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