Service Worker ที่มีอายุการใช้งานนานขึ้น

โปรแกรมทำงานของบริการส่วนขยายจะไม่มีชีวิตอยู่ตราบใดที่ได้รับเหตุการณ์ วิธีนี้จะเพิ่มความน่าเชื่อถือให้กับผู้ปฏิบัติงานของบริการส่วนขยาย แต่ก็มีข้อเสียที่คุณควรหลีกเลี่ยง

โจ เมดเลย์
โจ้ เมดเลย์

ตั้งแต่ Chrome 110 เป็นต้นไป (ในเวอร์ชันเบต้าตั้งแต่วันที่ 7 กุมภาพันธ์ 2023) โปรแกรมทำงานของบริการส่วนขยายจะยังใช้งานได้ตราบเท่าที่พวกเขาได้รับกิจกรรม การดำเนินการนี้จะแก้ไขปัญหาเวลาในการใช้งานโปรแกรมทำงานของบริการส่วนขยายก่อนหน้านี้ จึงอาจมีการหมดเวลาเกิดขึ้นเมื่อมีเหตุการณ์ใหม่อยู่ในคิวเหตุการณ์และอยู่ในระยะหมดเวลาเพื่อตัดงานที่ไม่พร้อมกันออก การปรับปรุงนี้จะลดอายุการใช้งานสูงสุด 5 นาทีสำหรับผู้ปฏิบัติงานของบริการส่วนขยาย

บทความนี้จะอธิบายว่าลักษณะการทำงานเหล่านี้เปลี่ยนแปลงไปอย่างไร

ที่มา

โปรแกรมทำงานของบริการส่วนขยายจะทำงานเหมือนกับโปรแกรมทำงานของบริการเว็บเป็นส่วนใหญ่ แต่นอกเหนือจากเหตุการณ์ของโปรแกรมทำงานของบริการแล้ว โปรแกรมทำงานของบริการส่วนขยายยังรับฟังเหตุการณ์ของส่วนขยายได้ด้วย แม้ว่าเหตุการณ์ Service Worker ปกติจะยืดอายุการใช้งานให้กับ Service Worker แต่ก่อนการเผยแพร่ 110 มีเหตุการณ์ของแพลตฟอร์มส่วนขยายเพียงไม่กี่เหตุการณ์เท่านั้นที่ทำให้โปรแกรมทำงานของบริการส่วนขยายยังคงอยู่

โดยปกติแล้ว Chromium จะยุติการทำงานของ Service Worker หลังจากเป็นไปตามเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้

  • โปรแกรมทำงานของบริการไม่ได้รับเหตุการณ์นานกว่า 30 วินาที และไม่มีงานที่ยังทำอยู่ซึ่งใช้เวลานาน หาก Service Worker ได้รับเหตุการณ์ในช่วงเวลาดังกล่าว ระบบจะนำตัวจับเวลาที่ไม่มีการใช้งานออก
  • งานที่ใช้เวลานานเกินกว่า 5 นาทีจึงจะเสร็จสมบูรณ์ และไม่ได้รับเหตุการณ์ใดๆ ในช่วง 30 วินาทีที่ผ่านมา

เหตุการณ์ Service Worker ใหม่ที่ได้รับก่อนตัวจับเวลาเมื่อไม่มีการใช้งานหรือตัวจับเวลางานที่ใช้เวลานานจะหมดอายุจะรีเซ็ตตัวจับเวลาและยืดอายุการใช้งานของ Service Worker

ขออภัย ลักษณะการทำงานนี้ไม่ได้ใช้กับเหตุการณ์ของส่วนขยาย เหตุการณ์ส่วนขยายอาจทำให้โปรแกรมทำงานของบริการส่วนขยายทำงาน และทำให้โปรแกรมทำงานตลอดเวลาจนกว่าเหตุการณ์จะเสร็จสมบูรณ์ แต่ไม่สามารถขยายตัวจับเวลาการใช้เวลา 30 วินาที ซึ่งหมายความว่าคุณสามารถยุติการทำงานของโปรแกรมทำงานของบริการส่วนขยายได้ทุกเมื่อหลังจากที่เหตุการณ์ส่วนขยายล่าสุดเสร็จสิ้นลง แม้ว่าเบราว์เซอร์เพิ่งจะส่งเหตุการณ์ใหม่ไปยังส่วนขยายก็ตาม

มีอะไรเปลี่ยนแปลงบ้าง

เหตุการณ์ทั้งหมดใน Chrome 110 จะรีเซ็ตตัวจับเวลาเมื่อไม่มีการใช้งาน และจะไม่เกิดระยะหมดเวลาเนื่องจากไม่มีการใช้งานหากมีเหตุการณ์ที่รอดำเนินการ กล่าวคือ หากไม่มีการหยุดชะงักที่ไม่คาดคิด ผู้ปฏิบัติงานบริการส่วนขยายจะยังคงใช้งานได้ตามปกติตราบเท่าที่ยังประมวลผลเหตุการณ์อยู่ นอกจากนี้ การเรียกไปยัง API ของ Chrome ที่เฉพาะเจาะจง เช่น chrome.storage.local.get() จะรีเซ็ตการหมดเวลาเมื่อไม่มีการใช้งาน กล่าวอย่างเจาะจงคือ

  • Service Worker จะยุติการทำงานหลังจากไม่มีการใช้งานเป็นเวลา 30 วินาที (การรับเหตุการณ์หรือการเรียก API ส่วนขยายจะรีเซ็ตตัวจับเวลานี้)
  • โปรแกรมทำงานของบริการจะยุติหากคำขอเดียว เช่น เหตุการณ์หรือการเรียก API ใช้เวลาประมวลผลนานกว่า 5 นาที

API บางตัว เช่น การรับส่งข้อความดั้งเดิมจะมี Keep-alive ที่มีประสิทธิภาพ ซึ่งจะยกเลิกตัวจับเวลาทั้ง 2 อันนี้

เรากำลังดำเนินการเพื่อให้แน่ใจว่าโปรแกรมทำงานของบริการส่วนขยายจะถูกยุติเมื่อเป็นไปได้ โดยไม่หยุดทำงานที่ใช้เวลานาน โปรแกรมทำงานของบริการส่วนขยายที่ให้ความสำคัญกับทรัพยากรควรเพิ่มผลตอบแทนทุกครั้งที่เป็นไปได้ นอกจากนี้ ส่วนขยายควรเตรียมพร้อมสำหรับการสิ้นสุดที่ไม่ได้คาดไว้ด้วยการคงสถานะไว้ ซึ่งจะช่วยป้องกันเหตุการณ์ที่คาดเดาไม่ได้ เช่น ผู้ใช้บังคับให้ปิดเบราว์เซอร์

รูปภาพโดย Paula Guerreiro ใน Unsplash