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

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

Joe Medley
Joe Medley

ตั้งแต่ 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