ตอนนี้โปรแกรมทำงานของบริการส่วนขยายจะใช้งานได้ต่อไปตราบใดที่ยังรับเหตุการณ์อยู่ ซึ่งจะช่วยเพิ่มความน่าเชื่อถือของผู้ปฏิบัติงานด้านบริการส่วนขยาย แต่ก็มีอันตรายที่คุณควรหลีกเลี่ยง
ตั้งแต่ Chrome 110 เป็นต้นไป (ในรุ่นเบต้า ณ วันที่ 7 กุมภาพันธ์ 2023) ผู้ปฏิบัติงานบริการส่วนขยายจะทำงานต่อไปได้ตราบใดที่พวกเขาได้รับเหตุการณ์ การทำเช่นนี้จะช่วยแก้ปัญหาเวลาในการใช้งานโปรแกรมทำงานของบริการส่วนขยายก่อนหน้านี้ การหมดเวลาอาจเกิดขึ้นได้เมื่อเหตุการณ์ใหม่อยู่ในคิวเหตุการณ์ และระยะหมดเวลาในการตัดงานที่ไม่พร้อมกัน การปรับปรุงนี้จะขจัดอายุการใช้งานสูงสุด 5 นาทีสำหรับโปรแกรมทำงานส่วนขยาย
บทความนี้อธิบายว่าลักษณะการทำงานเหล่านี้เปลี่ยนแปลงไปอย่างไร
ที่มา
โดยส่วนใหญ่แล้วโปรแกรมทำงานของบริการส่วนขยายจะทำงานเหมือนกับโปรแกรมทำงานของบริการเว็บ แต่นอกเหนือจากเหตุการณ์ของโปรแกรมทำงานของบริการแล้ว โปรแกรมทำงานของบริการส่วนขยายยังฟังเหตุการณ์ของส่วนขยายได้อีกด้วย แม้ว่าเหตุการณ์ของ Service Worker ปกติจะยืดอายุการใช้งานของ Service Worker แต่ก่อนที่จะปล่อย 110 มีเหตุการณ์ในแพลตฟอร์มส่วนขยายเพียงไม่กี่เหตุการณ์เท่านั้นที่ทำให้โปรแกรมทำงานของบริการส่วนขยายยังคงทำงานต่อไป
โดยปกติแล้ว Chromium จะยุติโปรแกรมทำงานของบริการเมื่อตรงกับเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้
- โปรแกรมทำงานของบริการไม่ได้รับเหตุการณ์นานเกินสามสิบวินาที และไม่มีงานที่ใช้เวลานานที่ค้างอยู่ที่กำลังดำเนินการ หากโปรแกรมทำงานของบริการได้รับเหตุการณ์ในช่วงเวลาดังกล่าว ตัวจับเวลาที่ไม่มีการใช้งานจะถูกนำออก
- งานที่ใช้เวลานานเสร็จสิ้นกว่า 5 นาที และไม่มีเหตุการณ์ใดได้รับในช่วง 30 วินาทีที่ผ่านมา
เหตุการณ์ของ Service Worker ใหม่ที่ได้รับก่อนตัวจับเวลาที่ไม่มีการใช้งานหรือตัวจับเวลาของงานที่ใช้เวลานานจะหมดอายุจะรีเซ็ตตัวจับเวลาและยืดอายุการใช้งานของโปรแกรมทำงานของบริการ
ขออภัย ลักษณะการทำงานนี้ไม่ได้ใช้กับกิจกรรมส่วนขยาย เหตุการณ์ของส่วนขยายอาจปลุกระบบของ Service Worker ของส่วนขยายและทำให้ระบบทำงานต่อจนกว่าเหตุการณ์จะเสร็จสิ้น แต่ไม่สามารถขยายตัวจับเวลาที่ไม่มีการใช้งาน 30 วินาทีได้ ซึ่งหมายความว่าระบบอาจยุติโปรแกรมทำงานของบริการส่วนขยายได้ทุกเมื่อหลังจากที่กิจกรรมส่วนขยายครั้งล่าสุดเสร็จสิ้น แม้ว่าเบราว์เซอร์เพิ่งจะส่งเหตุการณ์ใหม่ไปยังส่วนขยายก็ตาม
มีอะไรเปลี่ยนแปลงบ้าง
ใน Chrome 110 เหตุการณ์ทั้งหมดจะรีเซ็ตตัวจับเวลาเมื่อไม่มีการใช้งาน และระยะหมดเวลาเมื่อไม่มีการใช้งานจะไม่เกิดขึ้นหากมีเหตุการณ์ที่รอดำเนินการ กล่าวคือ สมมติว่าไม่มีการขัดจังหวะที่ไม่คาดคิด โดยปกติโปรแกรมทำงานของบริการส่วนขยายจะทำงานต่อไปตราบใดที่พวกเขาประมวลผลเหตุการณ์อยู่ นอกจากนี้ การเรียกไปยัง Chrome API เฉพาะส่วนขยาย เช่น chrome.storage.local.get()
จะรีเซ็ตระยะหมดเวลาเนื่องจากไม่มีการใช้งาน กล่าวอย่างเจาะจงคือ
- โปรแกรมทำงานของบริการจะยุติลงหลังจากไม่มีการใช้งานเป็นเวลา 30 วินาที (การรับเหตุการณ์หรือการเรียกใช้ API ส่วนขยายจะรีเซ็ตตัวจับเวลานี้)
- โปรแกรมทำงานของบริการจะยุติการทำงาน หากคำขอเดียว เช่น กิจกรรมหรือการเรียก API ใช้เวลานานกว่า 5 นาทีในการประมวลผล
API บางอย่าง เช่น การรับส่งข้อความแบบดั้งเดิม จะทำให้ระบบทำงานอย่างต่อเนื่องซึ่งจะยกเลิกตัวจับเวลาทั้ง 2 ตัวนี้
เรายังคงดำเนินการอย่างต่อเนื่องเพื่อให้แน่ใจว่าจะมีการสิ้นสุดโปรแกรมทำงานของบริการส่วนขยายเมื่อเป็นไปได้ โดยไม่มีการปิดการทำงานที่ใช้เวลานาน โปรแกรมทำงานของบริการส่วนขยายที่คำนึงถึงทรัพยากรควรทำงานให้ผลตอบแทนเสมอเมื่อเป็นไปได้ นอกจากนี้ ส่วนขยายควรเตรียมพร้อมสําหรับการสิ้นสุดที่ไม่ได้คาดไว้โดยคงสถานะไว้ วิธีนี้จะช่วยป้องกันเหตุการณ์ที่คาดเดาไม่ได้ เช่น การบังคับให้ปิดเบราว์เซอร์โดยผู้ใช้
รูปภาพโดย Paula Guerreiro บน Unsplash