เผยแพร่: 10 สิงหาคม 2023, อัปเดตล่าสุด: 29 มกราคม 2026
เราจะค่อยๆ เลิกใช้งานเหตุการณ์ unload โดยค่อยๆ เปลี่ยนค่าเริ่มต้นเพื่อให้ตัวแฮนเดิล unload หยุดทำงานในหน้าเว็บ เว้นแต่หน้าเว็บจะเลือกใช้เพื่อเปิดใช้ตัวแฮนเดิลอีกครั้งอย่างชัดแจ้ง
ไทม์ไลน์การเลิกใช้งาน
เราได้ระบุว่าลักษณะการทำงานของเหตุการณ์เลิกโหลดมีแนวโน้มที่จะมีการเปลี่ยนแปลงตั้งแต่เดือนมกราคม 2019 ซึ่งเป็นช่วงที่เราประกาศความตั้งใจที่จะใช้ Back-Forward Cache ควบคู่ไปกับการดำเนินงาน เราได้ทำการติดต่อจำนวนมากซึ่งส่งผลให้การใช้งานการเลิกโหลดลดลงอย่างมาก นอกจากนี้ เรายังเริ่มเสนอวิธีทดสอบผลของการเลิกใช้งาน unload จาก Chrome 115 เพื่อเสริมการเข้าถึงนี้ด้วย
- การทดสอบในสภาพแวดล้อมจริงโดยใช้ Permission-Policy API สำหรับการเลิกโหลดใน Chrome 115 (กรกฎาคม 2023)
- การทดสอบในเครื่องโดยการเปิดใช้ Flag ใน Chrome 117 (กันยายน 2023)
ตลอดปี 2024 เราได้แก้ไขปัญหาหลายอย่างที่ขัดขวางการเริ่มเปิดตัว และตลอดปี 2025 เราได้เปิดตัวการเลิกใช้งานกับเว็บไซต์ยอดนิยม 50 อันดับแรก
| Milestone | วันที่ของเหตุการณ์สำคัญ | เว็บไซต์ยอดนิยม 50 อันดับแรก | % ของต้นทางอื่นๆ |
|---|---|---|---|
| 135 | 26 มี.ค. 2025 | 1 (www.google.com) |
0 |
| 139 | 30 ก.ค. 2025 | 5 | 0 |
| 140 | 27 ส.ค. 2025 | 10 | 0 |
| 141 | 24 ก.ย. 2025 | 25 | 0 |
| 142 | 22 ต.ค. 2025 | 50 | 0 |
ตอนนี้เราได้เลิกใช้งานเว็บไซต์ 50 อันดับแรกแล้ว และได้รับอนุมัติเพิ่มเติมในการเปิดตัวฟีเจอร์นี้ในต้นทางทั้งหมด โดยจะแบ่งออกเป็น 8 ขั้นตอน (หรือประมาณ 32 สัปดาห์) ตามรายละเอียดในตารางต่อไปนี้
| Milestone | วันที่ของเหตุการณ์สำคัญ | เว็บไซต์ยอดนิยม 50 อันดับแรก | % ของการโหลดหน้าเว็บ Chrome สำหรับเว็บไซต์ทั้งหมด |
|---|---|---|---|
| 146 | 10 มี.ค. 2026 | 50 | 1 |
| 147 | 7 เมษายน 2026 | 50 | 5 |
| 148 | 5 พฤษภาคม 2026 | 50 | 10 |
| 149 | 2 มิ.ย. 2026 | 50 | 20 |
| 150 | 30 มิ.ย. 2026 | 50 | 40 |
| 151 | 28 กรกฎาคม 2026 | 50 | 60 |
| 152 | 25 ส.ค. 2026 | 50 | 80 |
| 153 | 22 ก.ย. 2026 | 50 | 100 |
การเปิดตัวอย่างเต็มรูปแบบจะอิงตามการโหลดหน้าเว็บ (โดยมีความสอดคล้องกันเมื่อเวลาผ่านไป) แทนที่จะอิงตามผู้ใช้หรือเว็บไซต์แต่ละราย เพื่อหลีกเลี่ยงไม่ให้ผู้ใช้หรือเว็บไซต์ได้รับผลกระทบมากกว่ารายอื่นๆ ตามที่ระบุไว้ในความตั้งใจที่จะเลิกใช้งาน
โปรดทราบว่าเรายังมีเมนูตัวเลือกการเลือกไม่ใช้ในกรณีที่ไทม์ไลน์การเลิกใช้งานนี้มีเวลาไม่เพียงพอที่จะย้ายข้อมูลออกจาก unload เป้าหมายของเราคือการใช้การเลิกใช้งานแบบค่อยเป็นค่อยไปนี้เพื่อแจ้งไทม์ไลน์สำหรับระยะสุดท้าย (การเลิกใช้งาน unload แบบถาวร) ซึ่งเราจะนำการเลือกไม่ใช้เหล่านี้ออกหรือลดจำนวนลง
ฉากหลัง
unload ได้รับการออกแบบมาให้ทำงานเมื่อมีการยกเลิกการโหลดเอกสาร ในทางทฤษฎีแล้ว สามารถใช้เพื่อเรียกใช้โค้ดได้ทุกเมื่อที่ผู้ใช้นำทางออกจากหน้าเว็บ หรือใช้เป็นโค้ดเรียกกลับเมื่อสิ้นสุดเซสชัน
สถานการณ์ที่ใช้เหตุการณ์นี้บ่อยที่สุด ได้แก่
- การบันทึกข้อมูลผู้ใช้: บันทึกข้อมูลก่อนออกจากหน้าเว็บ
- การทำงานล้างข้อมูล: ปิดทรัพยากรที่เปิดอยู่ก่อนที่จะออกจากหน้า
- การส่งข้อมูลวิเคราะห์: การส่งข้อมูลที่เกี่ยวข้องกับการโต้ตอบของผู้ใช้เมื่อสิ้นสุดเซสชัน
อย่างไรก็ตาม unload เหตุการณ์ไม่น่าเชื่อถืออย่างยิ่ง
ใน Chrome และ Firefox บนเดสก์ท็อป unload ค่อนข้างน่าเชื่อถือ แต่ส่งผลเสียต่อประสิทธิภาพของเว็บไซต์โดยการป้องกันการใช้ bfcache (แคชย้อนหลัง)
ในเบราว์เซอร์บนอุปกรณ์เคลื่อนที่ unload มักจะไม่ทำงานเนื่องจากแท็บมักจะทำงานในเบื้องหลังและปิดไป ด้วยเหตุนี้ เบราว์เซอร์จึงเลือกให้ความสำคัญกับ bfcache ในอุปกรณ์เคลื่อนที่มากกว่า unload ซึ่งทำให้ unload ไม่น่าเชื่อถือมากยิ่งขึ้น Safari ยังใช้ลักษณะการทำงานนี้ในเดสก์ท็อปด้วย
ทีม Chrome เชื่อว่าการใช้โมเดลมือถือในการจัดลำดับความสำคัญของ bfcache เหนือ unload บนเดสก์ท็อปจะทำให้เกิดการหยุดชะงักเนื่องจากจะทำให้ bfcache ไม่น่าเชื่อถือมากขึ้นด้วย ในขณะที่ก่อนหน้านี้ bfcache ค่อนข้างน่าเชื่อถือใน Chrome (และ Firefox) แต่เป้าหมายของ Chrome คือการนำเหตุการณ์ unload ออกไปโดยสมบูรณ์ จนกว่าจะถึงตอนนั้น ฟีเจอร์นี้จะยังคงใช้งานได้บนเดสก์ท็อปสำหรับผู้ที่เลือกไม่ใช้การเลิกใช้งานอย่างชัดเจน
เหตุผลที่เลิกใช้งานเหตุการณ์ unload
การเลิกใช้งาน unload เป็นขั้นตอนสำคัญในการรับรู้ที่ใหญ่ขึ้นมากเกี่ยวกับเว็บที่เราใช้อยู่ในปัจจุบัน unload เหตุการณ์นี้ทำให้เกิดความรู้สึกผิดๆ ว่าสามารถควบคุมวงจรของแอปได้ ซึ่งไม่เป็นความจริงมากขึ้นเรื่อยๆ เมื่อพิจารณาถึงวิธีที่เราท่องเว็บในโลกคอมพิวเตอร์สมัยใหม่
ระบบปฏิบัติการบนอุปกรณ์เคลื่อนที่มักจะหยุดทำงานหรือยกเลิกการโหลดหน้าเว็บเพื่อประหยัดหน่วยความจำ และปัจจุบันเบราว์เซอร์บนเดสก์ท็อปก็ทำเช่นนี้มากขึ้นด้วยเหตุผลเดียวกัน แม้จะไม่มีการแทรกแซงระบบปฏิบัติการ แต่ผู้ใช้เองก็มักจะสลับแท็บและปิดแท็บเก่าโดยไม่ได้ "ออกจากหน้าเว็บ" อย่างเป็นทางการ
การนำunload event ออกเนื่องจากล้าสมัยเป็นการยอมรับว่าในฐานะนักพัฒนาเว็บ เราต้องตรวจสอบว่ากระบวนทัศน์ของเราตรงกับโลกแห่งความเป็นจริง และไม่ขึ้นอยู่กับแนวคิดที่ล้าสมัยซึ่งไม่เป็นความจริงอีกต่อไป (หากเคยเป็นจริง)
ทางเลือกแทนกิจกรรม unload
ขอแนะนำให้ใช้ unload แทน
visibilitychange: เพื่อกำหนดเวลาที่การมองเห็นของหน้าเว็บเปลี่ยนแปลง เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้สลับแท็บ ย่อหน้าต่างเบราว์เซอร์ หรือเปิดหน้าใหม่ พิจารณาสถานะhiddenซึ่งเป็นเวลาที่เชื่อถือได้ล่าสุดในการบันทึกข้อมูลแอปและผู้ใช้pagehide: เพื่อพิจารณาว่าเมื่อใดที่ผู้ใช้ออกจากหน้าเว็บ เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้ออกจากหน้าเว็บ โหลดหน้าเว็บซ้ำ หรือปิดหน้าต่างเบราว์เซอร์ ระบบจะไม่ทริกเกอร์เหตุการณ์pagehideเมื่อย่อหน้าเว็บหรือเปลี่ยนไปใช้แท็บอื่น โปรดทราบว่าเนื่องจากpagehideไม่ได้ทำให้หน้าเว็บไม่มีสิทธิ์ใช้ Back-Forward Cache จึงเป็นไปได้ที่ระบบจะกู้คืนหน้าเว็บหลังจากที่เหตุการณ์นี้เริ่มทำงาน หากคุณล้างข้อมูลทรัพยากรใดๆ ในเหตุการณ์นี้ คุณอาจต้องกู้คืนทรัพยากรดังกล่าวเมื่อกู้คืนหน้าเว็บ
เหตุการณ์ beforeunload มีกรณีการใช้งานที่แตกต่างจาก unload เล็กน้อยเนื่องจากเป็นเหตุการณ์ที่ยกเลิกได้ โดยมักใช้เพื่อเตือนผู้ใช้ถึงการเปลี่ยนแปลงที่ไม่ได้บันทึกเมื่อออกจากหน้าเว็บ นอกจากนี้ เหตุการณ์นี้ยังไม่น่าเชื่อถือเนื่องจากจะไม่ทริกเกอร์หากมีการปิดแท็บเบื้องหลัง เราขอแนะนำให้จำกัดการใช้ beforeunload และเพิ่มเฉพาะแบบมีเงื่อนไข แต่ให้ใช้เหตุการณ์ที่กล่าวถึงก่อนหน้านี้แทนสำหรับการแทนที่ unload ส่วนใหญ่
ดูรายละเอียดเพิ่มเติมได้ที่คำแนะนำนี้เกี่ยวกับการไม่ใช้unloadแฮนเดิล
ตรวจหาการใช้งาน unload
มีเครื่องมือต่างๆ ที่จะช่วยคุณค้นหาการปรากฏของunloadเหตุการณ์ในหน้าเว็บ ซึ่งจะช่วยให้เว็บไซต์ทราบว่าตนเองใช้เหตุการณ์นี้หรือไม่ ไม่ว่าจะอยู่ในโค้ดของตนเองหรือใช้ไลบรารี และอาจได้รับผลกระทบจากการเลิกใช้งานที่กำลังจะเกิดขึ้น
เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome มีback-forward-cacheการตรวจสอบที่จะช่วยคุณระบุปัญหาที่อาจทำให้หน้าเว็บไม่มีสิทธิ์ใช้แคชย้อนหลัง ซึ่งรวมถึงการใช้ตัวแฮนเดิล unload
หากต้องการทดสอบแคชย้อนหลัง/แคชไปข้างหน้า ให้ทำตามขั้นตอนต่อไปนี้
ในหน้าเว็บ ให้เปิดเครื่องมือสำหรับนักพัฒนาเว็บ แล้วไปที่แอปพลิเคชัน > บริการที่ทำงานอยู่เบื้องหลัง > แคชย้อนกลับ/ไปข้างหน้า
คลิกทดสอบ Back-Forward Cache Chrome จะนำคุณไปยัง
chrome://terms/และกลับไปยังหน้าเว็บโดยอัตโนมัติ หรือจะคลิกปุ่มย้อนกลับและไปข้างหน้าของเบราว์เซอร์ก็ได้
หากหน้าเว็บไม่มีสิทธิ์ใช้แคชย้อนหลัง แท็บแคชย้อนหลังจะแสดงรายการปัญหา ในส่วนนำไปใช้ได้จริง คุณจะดูได้ว่าคุณใช้ unload หรือไม่
Reporting API
คุณสามารถใช้ Reporting API ร่วมกับนโยบายสิทธิ์แบบอ่านอย่างเดียวเพื่อตรวจหาการใช้งาน unload จากผู้ใช้เว็บไซต์
ดูรายละเอียดเพิ่มเติมได้ที่การใช้ Reporting API เพื่อค้นหาการเลิกใช้งาน
notRestoredReasons API ของ Bfcache
พร็อพเพอร์ตี้ notRestoredReasons ซึ่งเพิ่มลงในคลาส PerformanceNavigationTiming จะรายงานข้อมูลว่าระบบบล็อกไม่ให้เอกสารใช้ bfcache ในการนำทางหรือไม่ และเพราะเหตุใด ตัวอย่างลักษณะของคำเตือนออบเจ็กต์การตอบกลับเกี่ยวกับเครื่องมือฟัง unload ที่มีอยู่มีดังนี้
{
children: [],
id: null,
name: null,
reasons: [
{"reason", "unload-listener"}
],
src: null,
url: "https://www.example.com/page/"
}
ควบคุมการเข้าถึง unload
Chrome จะค่อยๆ เลิกใช้งานเหตุการณ์ unload ในระหว่างนี้ คุณสามารถใช้เครื่องมือต่างๆ เพื่อควบคุมลักษณะการทำงานนี้และเตรียมพร้อมสำหรับการเลิกใช้งานที่กำลังจะเกิดขึ้น โปรดทราบว่าคุณไม่ควรพึ่งพาเทคนิคเหล่านี้ในระยะยาว และควรวางแผนที่จะย้ายข้อมูลไปยังทางเลือกอื่นแทนโดยเร็วที่สุด
ตัวเลือกต่อไปนี้ช่วยให้คุณเปิดหรือปิดใช้แฮนเดิลunloadเพื่อทดสอบว่าเว็บไซต์จะทำงานอย่างไรหากไม่มีแฮนเดิลดังกล่าว เพื่อให้คุณเตรียมพร้อมสำหรับการเลิกใช้งานที่กำลังจะมาถึง นโยบายมีหลายประเภท ดังนี้
- นโยบายสิทธิ์: นี่คือ API ของแพลตฟอร์มสำหรับเจ้าของเว็บไซต์เพื่อควบคุมการเข้าถึงฟีเจอร์ที่ระดับเว็บไซต์หรือหน้าเว็บแต่ละหน้าโดยใช้ส่วนหัว HTTP
- นโยบายขององค์กร: เครื่องมือสำหรับผู้ดูแลระบบไอทีในการกำหนดค่า Chrome ให้กับองค์กรหรือธุรกิจ โดยกำหนดค่าได้โดยใช้แผงผู้ดูแลระบบ เช่น คอนโซลผู้ดูแลระบบของ Google
- Chrome Flag: ช่วยให้นักพัฒนาซอฟต์แวร์แต่ละรายเปลี่ยน
unloadการตั้งค่าการเลิกใช้งานเพื่อทดสอบผลกระทบต่อเว็บไซต์ต่างๆ ได้
นโยบายสิทธิ์
มีการเพิ่มนโยบายสิทธิ์จาก Chrome 115 เพื่อให้เว็บไซต์เลือกไม่ใช้ตัวแฮนเดิล unload และใช้ประโยชน์จาก bfcache ได้ทันทีเพื่อปรับปรุงประสิทธิภาพของเว็บไซต์ ดูตัวอย่างเหล่านี้เกี่ยวกับวิธีตั้งค่าสำหรับเว็บไซต์ ซึ่งจะช่วยให้เว็บไซต์เตรียมพร้อมรับมือกับการเลิกใช้งาน unload ได้
เราจะขยายการรองรับใน Chrome 117 เพื่อให้เว็บไซต์ทำในทางกลับกันได้ และเลือกใช้เพื่อลองเรียกใช้ตัวแฮนเดิล unload ต่อไป เนื่องจาก Chrome จะเปลี่ยนค่าเริ่มต้นสำหรับตัวแฮนเดิลเหล่านี้ไม่ให้เรียกใช้ในอนาคต ดูตัวอย่างเหล่านี้เกี่ยวกับวิธีอนุญาตให้ตัวแฮนเดิลการเลิกโหลดทำงานในเว็บไซต์ต่อไป การเลือกใช้จะไม่คงอยู่ตลอดไป และควรใช้เพื่อเผื่อเวลาให้เว็บไซต์ย้ายข้อมูลออกจากunloadแฮนเดิล
นโยบายขององค์กร
องค์กรที่มีซอฟต์แวร์ที่ต้องใช้เหตุการณ์ unload เพื่อให้ทำงานได้อย่างถูกต้องสามารถใช้นโยบาย ForcePermissionPolicyUnloadDefaultEnabled เพื่อป้องกันการทยอยเลิกใช้งานสำหรับอุปกรณ์ที่อยู่ภายใต้การควบคุมขององค์กร การเปิดใช้นโยบายนี้จะทำให้ unload ยังคงเปิดใช้โดยค่าเริ่มต้นสำหรับทุกต้นทาง หน้าเว็บยังคงตั้งค่านโยบายที่เข้มงวดมากขึ้นได้หากต้องการ เช่นเดียวกับการเลือกไม่ใช้ Permissions Policy ซึ่งเป็นเครื่องมือในการลดผลกระทบจากการเปลี่ยนแปลงที่อาจทำให้เกิดข้อขัดข้อง แต่ไม่ควรใช้เครื่องมือนี้อย่างถาวร
Chrome Flag และสวิตช์บรรทัดคำสั่ง
นอกจากนโยบายขององค์กรแล้ว คุณยังปิดใช้การเลิกใช้งานสำหรับผู้ใช้แต่ละรายได้โดยใช้ Flag ของ Chrome และสวิตช์บรรทัดคำสั่ง
การตั้งค่า chrome://flags/#deprecate-unload เป็น enabled จะทำให้การเลิกใช้งานเริ่มต้นเร็วขึ้นและป้องกันไม่ให้ตัวแฮนเดิล unload ทำงาน คุณยังคงลบล้างได้ทีละเว็บไซต์โดยใช้นโยบายสิทธิ์ แต่จะยังคงทริกเกอร์โดยค่าเริ่มต้น
นอกจากนี้ คุณยังควบคุมการตั้งค่าเหล่านี้ได้ด้วยสวิตช์บรรทัดคำสั่ง
การเปรียบเทียบตัวเลือก
ตารางต่อไปนี้สรุปการใช้งานตัวเลือกต่างๆ ที่กล่าวถึงก่อนหน้านี้
| เลื่อนการเลิกใช้งาน | เลื่อนการเลิกใช้งาน (มีข้อยกเว้น) | ป้องกันการเลิกใช้งานเพื่อรักษาเวลาสำหรับการย้ายข้อมูล | |
|---|---|---|---|
| นโยบายสิทธิ์ (ใช้กับหน้าเว็บ/เว็บไซต์) |
ใช่ | ได้ | ใช่ |
| นโยบายขององค์กร (มีผลกับอุปกรณ์) |
ไม่ | ไม่ได้ | ใช่ |
| ฟีเจอร์ทดลองของ Chrome (ใช้กับผู้ใช้แต่ละราย) |
ใช่ | ไม่ใช่ | ไม่ |
| สวิตช์บรรทัดคำสั่งของ Chrome (ใช้กับผู้ใช้แต่ละราย) |
ใช่ | ไม่ใช่ | ใช่ |
บทสรุป
ตัวแฮนเดิล unload อยู่ระหว่างการเลิกใช้งาน ซึ่งไม่น่าเชื่อถือมาเป็นเวลานานแล้ว และไม่รับประกันว่าจะเรียกใช้ในทุกกรณีที่เอกสารถูกทำลาย นอกจากนี้ ตัวแฮนเดิล unload ยังใช้ร่วมกับ bfcache ไม่ได้
เว็บไซต์ที่ใช้ตัวแฮนเดิล unload ควรเตรียมพร้อมสำหรับการเลิกใช้งานที่กำลังจะเกิดขึ้นนี้โดยทดสอบตัวแฮนเดิล unload ที่มีอยู่ นำออกหรือย้ายข้อมูล หรือหากจำเป็น ให้ชะลอการเลิกใช้งานหากต้องการเวลาเพิ่มเติม
การรับทราบ
ขอขอบคุณ Kenji Baheux, Fergal Daly, Adriana Jara และ Jeremy Wagner ที่ช่วยตรวจสอบบทความนี้
รูปภาพหลักโดย Anja Bauermann ใน Unsplash