เราจะค่อยๆ เลิกใช้งานเหตุการณ์ unload
โดยการค่อยๆ เปลี่ยนค่าเริ่มต้นเพื่อให้ตัวแฮนเดิล unload
เริ่มทํางานในหน้าเว็บ เว้นแต่หน้าเว็บจะเลือกเปิดใช้อีกครั้งอย่างชัดแจ้ง
ลำดับเวลาในการเลิกใช้งาน
เราตั้งข้อสังเกตว่าลักษณะการทำงานยกเลิกการโหลดอาจเปลี่ยนแปลงตั้งแต่ต้นเดือนมกราคม 2019 เมื่อประกาศความตั้งใจที่จะนำ Back-Forward Cache มาใช้ พร้อมๆ กับการดำเนินการติดตั้งใช้งาน เราได้ทำการติดต่อในวงกว้าง ซึ่งส่งผลให้การใช้งานยกเลิกการโหลดลดลงอย่างมาก เพื่อเสริมการเข้าถึงนี้ เรายังเริ่มเสนอวิธีทดสอบผลของการเลิกใช้งานการยกเลิกการโหลดจาก Chrome 115 ดังนี้
- ในการทดสอบขั้นสูงผ่าน Permissions-Policy API สำหรับยกเลิกการโหลด ใน Chrome 115 (กรกฎาคม 2023)
- การทดสอบในเครื่องโดยการเปิดใช้ธงใน Chrome 117 (กันยายน 2023)
หลังจากระยะการติดต่อและทดลองใช้แล้ว เราคาดว่าการเลิกใช้งานแบบชั่วคราวจะเปิดตัวมีดังต่อไปนี้
- ระยะกำหนดขอบเขตที่การยกเลิกการโหลดจะค่อยๆ หยุดทำงานสำหรับเว็บไซต์ยอดนิยม 50 อันดับแรก (ข้อมูลอ้างอิง ณ เวลาที่เขียน)
- เริ่มด้วยจำนวนผู้ใช้ 1% จาก Chrome 120 (สิ้นเดือนพฤศจิกายน 2023)
- สิ้นสุดไตรมาสกับผู้ใช้ 100% ภายในสิ้นไตรมาส 3 ปี 2024
- นอกจากนี้ ตั้งแต่ไตรมาสที่ 3 ปี 2024 เป็นต้นไป เราตั้งใจจะเริ่มระยะทั่วๆ ไปที่ระบบยกเลิกการโหลดจะค่อยๆ หยุดทำงานในเว็บไซต์ต่างๆ โดยเริ่มที่จำนวนผู้ใช้ 1% และสิ้นสุดด้วยจำนวนผู้ใช้ 100% ภายในสิ้นไตรมาส 1 ปี 2025
โปรดทราบว่าเรามีเมนูสำหรับเลือกไม่ใช้ในกรณีที่ลำดับเวลาการเลิกใช้งานแบบชั่วคราวนี้ไม่มีเวลาเพียงพอในการย้ายข้อมูลออกจากการยกเลิกการโหลด เป้าหมายของเราคือใช้การเลิกใช้งานแบบค่อยเป็นค่อยไปนี้เพื่อแจ้งไทม์ไลน์สำหรับระยะสุดท้าย (การเลิกโหลดแบบถาวร) ที่ระบบจะลบหรือลดการเลือกไม่ใช้เหล่านี้
ข้อมูลเบื้องต้น
unload
ได้รับการออกแบบมาให้เริ่มทำงานเมื่อยกเลิกการโหลดเอกสาร ในทางทฤษฎีแล้ว สามารถใช้ในการเรียกใช้โค้ดทุกครั้งที่ผู้ใช้ออกจากหน้าเว็บ และใช้ในช่วงสิ้นสุดของ Callback
สถานการณ์ที่มีการใช้เหตุการณ์นี้มากที่สุด ได้แก่
- บันทึกข้อมูลผู้ใช้: บันทึกข้อมูลก่อนออกจากหน้าเว็บ
- ดำเนินการล้างข้อมูล: ปิดทรัพยากรที่เปิดอยู่ก่อนยกเลิกหน้าเว็บ
- การส่งข้อมูลวิเคราะห์: การส่งข้อมูลที่เกี่ยวข้องกับการโต้ตอบของผู้ใช้เมื่อสิ้นสุดเซสชัน
แต่เหตุการณ์ unload
ไม่น่าเชื่อถืออย่างมาก
ใน Chrome บนเดสก์ท็อปและ Firefox นั้น unload
มีความน่าเชื่อถือมากพอแต่ส่งผลเสียต่อประสิทธิภาพของเว็บไซต์ด้วยการป้องกันไม่ให้ใช้ bfcache (Back/Forward Cache)
ในเบราว์เซอร์ในอุปกรณ์เคลื่อนที่ unload
มักไม่ทำงานเนื่องจากแท็บต่างๆ อยู่ในเบื้องหลังบ่อยครั้งและจะหายไป ด้วยเหตุนี้ เบราว์เซอร์จึงเลือกให้ความสำคัญกับ Bfcache ในอุปกรณ์เคลื่อนที่มากกว่า unload
ซึ่งทำให้ไม่น่าเชื่อถือยิ่งขึ้น Safari ก็ใช้การทำงานลักษณะนี้บนเดสก์ท็อปด้วยเช่นกัน
ทีม Chrome เชื่อว่าการใช้โมเดลอุปกรณ์เคลื่อนที่ของการให้ความสําคัญกับ bfcache มากกว่า unload
บนเดสก์ท็อปจะรบกวนการใช้งาน เพราะทำให้การใช้งานใน Chrome (และ Firefox) เชื่อถือได้มากขึ้นเมื่อก่อนหน้านี้ แต่ Chrome มีจุดประสงค์เพื่อนำเหตุการณ์ unload
ออกโดยสมบูรณ์ ในระหว่างนี้ ฟีเจอร์ดังกล่าวจะยังคงใช้งานได้ในเดสก์ท็อปสำหรับผู้ที่เลือกไม่ใช้การเลิกใช้งานอย่างชัดแจ้ง
เหตุใดจึงเลิกใช้งานเหตุการณ์ unload
การเลิกใช้งาน unload
เป็นขั้นตอนสำคัญที่ช่วยให้มีการรับรู้เว็บที่เราอาศัยอยู่กันมากขึ้นในปัจจุบัน เหตุการณ์ unload
ทำให้เกิดการควบคุมวงจรของแอปที่ไม่เป็นความจริงมากขึ้นเรื่อยๆ เกี่ยวกับวิธีที่เราท่องเว็บในโลกการประมวลผลสมัยใหม่
ระบบปฏิบัติการบนอุปกรณ์เคลื่อนที่มักจะหยุดหรือยกเลิกการโหลดหน้าเว็บเพื่อประหยัดหน่วยความจำ และเบราว์เซอร์บนเดสก์ท็อปก็กำลังทำสิ่งเดียวกันนี้มากขึ้นเรื่อยๆ ด้วยเหตุผลเดียวกันนี้ แม้จะไม่มีการแทรกแซงระบบปฏิบัติการ ผู้ใช้เองก็มักมีการสลับแท็บและหยุดการทำงานของแท็บเก่าๆ โดยไม่ได้ "ออกจากหน้า" อย่างเป็นทางการ
การนำเหตุการณ์ unload
ออกเนื่องจากล้าสมัยถือเป็นการยอมรับว่าเราในฐานะนักพัฒนาเว็บต้องดูแลให้กระบวนทัศน์ของเราสอดคล้องกับเหตุการณ์ในโลกแห่งความเป็นจริงและไม่พึ่งแนวคิดที่ล้าสมัยและไม่เป็นความจริงอีกต่อไปหากเคยเป็นเช่นนั้น
ทางเลือกสำหรับกิจกรรม unload
ขอแนะนำให้ใช้รายการต่อไปนี้แทน unload
visibilitychange
: ใช้เพื่อระบุว่ามีการเปลี่ยนแปลงการแสดงหน้าเว็บเมื่อใด เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้สลับแท็บ ย่อหน้าต่างเบราว์เซอร์ หรือเปิดหน้าใหม่ พิจารณาสถานะhidden
ช่วงเวลาที่เชื่อถือได้ล่าสุดในการบันทึกแอปและข้อมูลผู้ใช้pagehide
: ระบุเวลาที่ผู้ใช้ออกจากหน้าเว็บ เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้ออกจากหน้า โหลดหน้าเว็บซ้ำ หรือปิดหน้าต่างเบราว์เซอร์ เหตุการณ์pagehide
จะไม่เริ่มทำงานเมื่อหน้าเว็บถูกย่อขนาดลงหรือเปลี่ยนไปยังแท็บอื่น โปรดทราบว่าเนื่องจากpagehide
ไม่ได้ทำให้หน้าไม่มีสิทธิ์ใช้ Back-Forward Cache จึงเป็นไปได้ที่หน้าเว็บจะคืนค่าได้หลังจากที่เหตุการณ์นี้เริ่มทำงาน หากกำลังล้างทรัพยากรในกิจกรรมนี้ ทรัพยากรดังกล่าวอาจต้องได้รับการคืนค่าเมื่อคืนค่าหน้าเว็บ
เหตุการณ์ beforeunload
มี Use Case ที่แตกต่างจาก unload
เล็กน้อยเนื่องจากเป็นเหตุการณ์ที่ยกเลิกได้ ซึ่งมักใช้เพื่อเตือนผู้ใช้เกี่ยวกับการเปลี่ยนแปลงที่ยังไม่ได้บันทึกเมื่อออกจากหน้าไป เหตุการณ์นี้ยังไม่น่าเชื่อถืออีกด้วย เนื่องจากจะไม่เริ่มทํางานหากแท็บในเบื้องหลังหยุดทำงาน ขอแนะนำให้จำกัดการใช้ beforeunload
และเพิ่มแบบมีเงื่อนไขเท่านั้น โปรดใช้เหตุการณ์ข้างต้นสำหรับการแทนที่ unload
ส่วนใหญ่แทน
ดูรายละเอียดเพิ่มเติมได้ในคําแนะนํานี้ในการไม่ใช้เครื่องจัดการ unload
ตรวจจับการใช้งาน unload
มีเครื่องมือมากมายที่จะช่วยให้คุณค้นหาการปรากฏของกิจกรรม unload
ในหน้าเว็บ วิธีนี้ช่วยให้เว็บไซต์ทราบว่ากำลังใช้กิจกรรมนี้อยู่ในโค้ดของตนเองหรือผ่านไลบรารี ซึ่งอาจได้รับผลกระทบจากการเลิกใช้งานที่กำลังจะเกิดขึ้น
เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome มีการตรวจสอบ back-forward-cache
เพื่อช่วยคุณระบุปัญหาที่อาจทำให้หน้าเว็บไม่มีสิทธิ์ใช้ Back-Forward Cache รวมถึงการใช้งานเครื่องจัดการ unload
หากต้องการทดสอบแคชย้อนหลัง ให้ทำตามขั้นตอนต่อไปนี้
ในหน้าเว็บ ให้เปิดเครื่องมือสำหรับนักพัฒนาเว็บ จากนั้นไปที่แอปพลิเคชัน > บริการที่ทำงานอยู่เบื้องหลัง > แคชย้อนหลัง
คลิกทดสอบแคชย้อนหลัง Chrome จะนำคุณไปยัง
chrome://terms/
และกลับไปที่หน้าโดยอัตโนมัติ หรือคุณสามารถคลิกปุ่มย้อนกลับและไปข้างหน้าของเบราว์เซอร์ได้
หากหน้าเว็บไม่มีสิทธิ์ใช้การแคชย้อนหลัง แท็บแคชย้อนหลังจะแสดงรายการปัญหา ในส่วนดำเนินการได้ คุณจะเห็นว่าคุณใช้ unload
อยู่หรือไม่
Reporting API
คุณสามารถใช้ Reporting API ร่วมกับนโยบายสิทธิ์แบบอ่านอย่างเดียวเพื่อตรวจหาการใช้งาน unload
จากผู้ใช้เว็บไซต์
โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อการใช้ Reporting API เพื่อค้นหาการยกเลิกการโหลด
API ของ Bfcache notRestoredReasons
พร็อพเพอร์ตี้ notRestoredReasons
ที่เพิ่มลงในคลาส PerformanceNavigationTiming
จะรายงานข้อมูลว่ามีการบล็อกเอกสารไม่ให้ใช้ bfcache ในการนำทางหรือไม่ และเพราะเหตุใด ดูวิธีการใช้งานได้ที่นี่ นี่คือตัวอย่างหน้าตาคำเตือนออบเจ็กต์การตอบกลับของผู้ฟัง unload
ที่มีอยู่
{
children: [],
id: null,
name: null,
reasons: [
{"reason", "unload-handler"}
],
src: null,
url: "https://www.example.com/page/"
}
ควบคุมการเข้าถึง unload
Chrome จะทยอยเลิกใช้งานเหตุการณ์ unload
ในระหว่างนี้ คุณสามารถใช้เครื่องมือต่างๆ เพื่อควบคุมลักษณะการทำงานนี้และเตรียมพร้อมสำหรับการเลิกใช้งานที่กำลังจะเกิดขึ้นได้ โปรดทราบว่าคุณไม่ควรใช้เทคนิคเหล่านี้ในระยะยาว และคุณควรวางแผนที่จะเปลี่ยนไปใช้ทางเลือกอื่นแทนโดยเร็วที่สุด
ตัวเลือกต่อไปนี้ช่วยให้คุณเปิดหรือปิดใช้ตัวแฮนเดิล unload
เพื่อทดสอบวิธีการทำงานของเว็บไซต์หากไม่มีตัวแฮนเดิล เพื่อให้คุณเตรียมพร้อมสำหรับการเลิกใช้งานที่กำลังจะเกิดขึ้น นโยบายแบ่งออกเป็นประเภทต่างๆ ดังนี้
- นโยบายสิทธิ์: นี่คือ API ของแพลตฟอร์มสำหรับเจ้าของเว็บไซต์ในการควบคุมการเข้าถึงฟีเจอร์ต่างๆ ในเว็บไซต์หรือหน้าแต่ละหน้า ผ่านการใช้ส่วนหัว HTTP
- นโยบายองค์กร: เครื่องมือสำหรับผู้ดูแลระบบไอทีในการกำหนดค่า Chrome สำหรับองค์กรหรือธุรกิจ ซึ่งคุณสามารถกำหนดค่าผ่านทางแผงการดูแลระบบ เช่น คอนโซลผู้ดูแลระบบของ Google
- การแจ้งว่าไม่เหมาะสมของ Chrome: ช่วยให้นักพัฒนาแอปแต่ละรายเปลี่ยนการตั้งค่าการเลิกใช้งาน
unload
เพื่อทดสอบผลกระทบต่อเว็บไซต์ต่างๆ ได้
นโยบายสิทธิ์
มีการเพิ่มนโยบายสิทธิ์จาก Chrome 115 เพื่ออนุญาตให้เว็บไซต์เลือกไม่ใช้เครื่องจัดการ unload
และรับประโยชน์จาก bfcache ได้ทันทีเพื่อปรับปรุงประสิทธิภาพของเว็บไซต์ ดูตัวอย่างเกี่ยวกับวิธีตั้งค่านี้สำหรับเว็บไซต์ วิธีนี้ช่วยให้เว็บไซต์เริ่มเลิกใช้งาน unload
ได้
การดำเนินการนี้จะขยายออกไปใน Chrome 117 เพื่อให้เว็บไซต์ดำเนินการแบบย้อนกลับได้และเลือกใช้เพื่อพยายามเริ่มการทำงานของเครื่องจัดการ unload
ต่อไป เนื่องจาก Chrome เปลี่ยนค่าเริ่มต้นเพื่อไม่ให้ทริกเกอร์เหล่านี้เริ่มทำงานในอนาคต ดูตัวอย่างเหล่านี้เกี่ยวกับวิธีอนุญาตให้เครื่องจัดการยกเลิกการโหลดเริ่มการทำงานของเว็บไซต์ต่อไป การเลือกใช้นี้จะยังคงอยู่ตลอดไปและควรใช้เพื่อให้เว็บไซต์มีเวลาย้ายข้อมูลออกจากตัวแฮนเดิล unload
นโยบายองค์กร
องค์กรที่มีซอฟต์แวร์ที่อาศัยเหตุการณ์ของ unload
เพื่อให้ทำงานได้อย่างถูกต้องสามารถใช้นโยบาย ForcePermissionPolicyUnloadDefaultEnabled
เพื่อป้องกันการทยอยเลิกใช้งานอุปกรณ์ที่อยู่ภายใต้การควบคุมของตน เมื่อเปิดใช้นโยบายนี้ unload
จะยังคงเปิดใช้ค่าเริ่มต้นเป็นเปิดใช้สำหรับต้นทางทั้งหมดต่อไป หน้าเว็บอาจยังกำหนดนโยบายที่เข้มงวดกว่าหากต้องการ นี่เป็นเครื่องมือในการลดการเปลี่ยนแปลงที่อาจส่งผลกับส่วนอื่นในระบบ แต่ไม่ควรใช้โดยไม่มีกำหนด เช่นเดียวกับการเลือกไม่ใช้นโยบายสิทธิ์
แฟล็ก Chrome และสวิตช์บรรทัดคำสั่ง
คุณปิดใช้การเลิกใช้งานสำหรับผู้ใช้แต่ละรายผ่านแฟล็ก Chrome และการสลับบรรทัดคำสั่งได้ เช่นเดียวกับนโยบายองค์กร
การตั้งค่า chrome://flags/#deprecate-unload
เป็น enabled
จะนำค่าเริ่มต้นการเลิกใช้งานและป้องกันไม่ให้ตัวแฮนเดิล unload
เริ่มทำงาน โดยจะยังคงลบล้างเนื้อหาดังกล่าวได้แบบรายเว็บไซต์ผ่านนโยบายสิทธิ์ แต่จะยังคงเริ่มทํางานต่อไปโดยค่าเริ่มต้น
นอกจากนี้ การตั้งค่าเหล่านี้ยังควบคุมได้โดยสวิตช์บรรทัดคำสั่ง
การเปรียบเทียบตัวเลือก
ตารางต่อไปนี้สรุปการใช้งานตัวเลือกต่างๆ ที่กล่าวถึงไปก่อนหน้านี้
ขับเคลื่อนการเลิกใช้งาน | นำการเลิกใช้งานไปข้างหน้า (โดยมีข้อยกเว้น) | ป้องกันการเลิกใช้งานเพื่อให้มีเวลาปลอดภัยสำหรับการย้ายข้อมูล | |
---|---|---|---|
นโยบายสิทธิ์ (ใช้กับหน้าเว็บ/เว็บไซต์) |
ใช่ | ได้ | ใช่ |
นโยบายองค์กร (มีผลกับอุปกรณ์) |
ไม่ได้ | ไม่ได้ | ใช่ |
Chrome Flag (ใช้ได้กับผู้ใช้แต่ละราย) |
ใช่ | ไม่ได้ | ไม่ได้ |
บรรทัดคำสั่งของ Chrome จะเปลี่ยน (มีผลกับผู้ใช้แต่ละราย) |
ใช่ | ไม่ได้ | ใช่ |
บทสรุป
ตัวแฮนเดิล unload
อยู่ระหว่างการเลิกใช้งาน เป็นผลิตภัณฑ์ที่เชื่อถือไม่ได้มานานแล้ว และไม่รับประกันว่าเอกสารจะถูกทำลายในทุกกรณี นอกจากนี้ ตัวแฮนเดิล unload
เข้ากันไม่ได้กับ bfcache
เว็บไซต์ที่ใช้ตัวแฮนเดิล unload
ในปัจจุบันควรเตรียมพร้อมสำหรับการเลิกใช้งานที่กำลังจะมาถึงนี้โดยการทดสอบตัวแฮนเดิล unload
ที่มีอยู่ นำตัวแฮนเดิลออกหรือย้ายข้อมูลตัวแฮนเดิลนั้น หรือใช้วิธีสุดท้ายที่เลื่อนการเลิกใช้งานออกไปหากจำเป็นต้องใช้เวลาเพิ่มเติม
กิตติกรรมประกาศ
ขอขอบคุณ Kenji Baheux, Fergal Daly, Adriana Jara และ Jeremy Wagner ให้ความช่วยเหลือในการอ่านบทความนี้
รูปภาพหลักจาก Anja Bauermann ใน Unsplash