เวิร์กเกอร์บริการของเวิร์กชีตจะตอบสนองต่อทั้งเหตุการณ์เวิร์กเกอร์บริการมาตรฐานและเหตุการณ์ในเนมสเปซของเวิร์กชีต รูปแบบเหล่านี้มักถูกนำเสนอร่วมกันเนื่องจากโฆษณาประเภทหนึ่งมักจะตามหลังอีกประเภทหนึ่งระหว่างการใช้ส่วนขยาย
การติดตั้ง
การติดตั้งจะเกิดขึ้นเมื่อผู้ใช้ติดตั้งหรืออัปเดต Service Worker จาก Chrome เว็บสโตร์ หรือเมื่อผู้ใช้โหลดหรืออัปเดตส่วนขยายที่แตกไฟล์แล้วโดยใช้หน้า chrome://extensions
เหตุการณ์ 3 รายการเกิดขึ้นตามลําดับด้านล่าง
ServiceWorkerRegistration.install
เหตุการณ์แรกที่เริ่มทํางานระหว่างการติดตั้งคือเหตุการณ์ install ของเวิร์กเกอร์บริการเว็บ
chrome.runtime.onInstalled
ถัดไปคือเหตุการณ์ onInstalled
ของส่วนขยาย ซึ่งจะแสดงเมื่อติดตั้งส่วนขยาย (ไม่ใช่ Service Worker) เป็นครั้งแรก เมื่ออัปเดตส่วนขยายเป็นเวอร์ชันใหม่ และเมื่ออัปเดต Chrome เป็นเวอร์ชันใหม่ ใช้เหตุการณ์นี้เพื่อตั้งค่าสถานะหรือสำหรับการเริ่มต้นแบบครั้งเดียว เช่น เมนูตามบริบท
chrome.runtime.onInstalled.addListener((details) => {
if(details.reason !== "install" && details.reason !== "update") return;
chrome.contextMenus.create({
"id": "sampleContextMenu",
"title": "Sample Context Menu",
"contexts": ["selection"]
});
});
ServiceWorkerRegistration.active
สุดท้าย ระบบจะเรียกเหตุการณ์ activate ของ Service Worker โปรดทราบว่าเหตุการณ์นี้ต่าง��ากโปรแกรมทำงานของบริการเว็บตรงที่เหตุการณ์จะเริ่มทำงานทันทีหลังจากติดตั้งส่วนขยาย เนื่องจากไม่มีอะไรเทียบได้กับการโหลดหน้าเว็บซ้ำในส่วนขยาย
การเริ่มต้นใช้งานส่วนขยาย
เมื่อโปรไฟล์ผู้ใช้เริ่มต้น เหตุการณ์ chrome.runtime.onStartup
จะเริ่มทำงาน แต่จะไม่เรียกใช้เหตุการณ์ Service Worker
การทำงานที่ไม่ได้ใช้งานและการปิดระบบ
โดยปกติแล้ว Chrome จะสิ้นสุดการทำงานของ Service Worker เมื่อเป็นไปตามเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้
- หลังจากไม่มีการใช้งานเป็นเวลา 30 วินาที การรับเหตุการณ์หรือการเรียก API ของส่วนขยายจะรีเซ็ตตัวจับเวลานี้
- เมื่อคําขอเดียว เช่น เหตุการณ์หรือการเรียก API ใช้เวลาประมวลผลนานกว่า 5 นาที
- เมื่อการตอบกลับจาก
fetch()
ใช้เวลานานกว่า 30 วินาที
เหตุการณ์และการเรียก API ของส่วนขยายจะรีเซ็ตตัวจับเวลาเหล่านี้ และหาก Service Worker หยุดทำงานอยู่ เหตุการณ์ขาเข้าจะปลุกให้ Service Worker ทำงานอีกครั้ง อย่างไรก็ตาม คุณควรออกแบบโปรแกรมทำงานของบริการให้สามารถรับมือกับการสิ้นสุดที่ไม่คาดคิด
หากต้องการเพิ่มประสิทธิภาพการใช้ทรัพยากรของส่วนขยาย โปรดหลีกเลี่ยงการทำให้โปรแกรมทำงานของบริการทำงานอย่างไม่มีกำหนด หากเป็นไปได้ ทดสอบส่วนขยายเพื่อให้แน่ใจว่าคุณไม่ได้ทำสิ่งนี้โดยไม่ได้ตั้งใจ
เก็บข้อมูลแทนการใช้ตัวแปรร่วม
ตัวแปรร่วมที่คุณตั้งค่าไว้จะสูญหายไปถ้าโปรแกรมทำงานของบริการปิดตัวลง บันทึกค่าลงในที่เก็บข้อมูลแทนการใช้ตัวแปรส่วนกลาง ตัวเลือกมีดังนี้ โปรดทราบว่า Web Storage API ไม่พร้อมใช้งานสำหรับ WSW
- chrome.storage API
- Extension API ที่ให้บริการพื้นที่เก็บข้อมูลหลายประเภท ได้แก่ พื้นที่เก็บข้อมูลในเครื่อง เซสชัน โดเมนที่จัดการ และซิงค์ API นี��จะจัดเ��็บ����บเจ็กต์ JSON ที่ระบุและดึงข้อมูลด้วยคีย์ที่นักพัฒนาแอปกำหนด ระบบจะไม่นำพื้นที่เก็บข้อมูลประเภทนี้ออกเมื่อผู้ใช้ล้างแคชเว็บ
- IndexedDB API
- API ระดับล่างสําหรับพื้นที่เก็บข้อมูลฝั่งไคลเอ็นต์ของ Structured Data ซึ่งรวมถึงไฟล์และ Blob API นี้ให้บริการพื้นฐานสําหรับการสร้างพื้นที่เก็บข้อมูลและการเรียกข้อมูลธุรกรรม แม้ว่า API นี้มักจะซับซ้อนเกินไปสำหรับกรณีการใช้งานทั่วไป แต่ยังมีโซลูชันพื้นที่เก็บข้อมูลของบุคคลที่สามต่อยอดอีกหลายโซลูชัน
- CacheStorage API
- กลไกพื้นที่เก็บข้อมูลถาวรสำหรับคู่ออบเจ็กต์คำขอและการตอบกลับ API นี้ออกแบบมาเพื่อเวิร์กเกอร์ของเว็บเซอร์วิสโดยเฉพาะและใช้ดึงข้อมูลจากปลายทาง การใช้ API นี้ทำได้หลายวิธี โดยขึ้นอยู่กับความสำคัญว่าผู้ใช้ควรเห็นข้อมูลล่าสุดหรือไม่และสำคัญเพียงใด ดูข้อมูลเพิ่มเติมได้ที่ตำราอาหารสำหรับใช้แบบออฟไลน์ คุณควรใช้
chrome.storage
เว้นแต่คุณจะใช้พร็อกซีคำขอเครือข่ายผ่านตัวแฮนเดิลการดึงข้อมูลโดยเฉพาะ
เลือกเวอร์ชัน Chrome ขั้นต่ำ
นับตั้งแต่เปิดตัวไฟล์ Manifest เวอร์ชัน 3 เราได้ทำการปรับปรุงอายุการใช้งานของ Service Worker หลายอย่าง ซึ่งหมายความว่าหากส่วนขยาย Manifest V3 รองรับ Chrome เวอร์ชันเก่า คุณจะต้องคำนึงถึงเงื่อนไขบางอย่าง หากเงื่อนไขเหล่านี้ไม่ส่งผลต่อส่วนขยาย คุณสามารถดำเนินการต่อจากส่วนนี้ได้ หากเป็นเช่นนั้น ให้พิจารณาระบุเวอร์ชัน Chrome ขั้นต่ำในไฟล์ Manifest
Chrome 120
ตอนนี้คุณสามารถตั้งปลุกเป็นระยะ��วลาขั้นต่ำ 30 วินาทีเพื่อให้ตรงกับวงจรชีวิตของ Service Worker ได้แล้ว ดูรายละเอียดเพิ่มเติมได้ที่ chrome.alarms
Chrome 118
ตอนนี้เซสชันโปรแกรมแก้ไขข้อบกพร่องที่ใช้งานอยู่ซึ่งสร้างขึ้นโดยใช้ chrome.debugger
API จะเก็บ Service Worker ไว้ การดำเนินการนี้จะป้องกันไม่ให้ Service Worker หมดเวลาระหว่างการเรียกใช้ API นี้
Chrome 116
Chrome 116 ������าร���ร���บ��รุงอายุการใช้งานของ Service Worker ดังนี้
ตอนนี้การเชื่อมต่อ
WebSocket
ที่ใช้งานอยู่จะยืดอายุการทำงานของ W worker ของบริการส่วนขยาย การส่งหรือรับข้อความในWebSocket
ใน Service Worker ของส่วนขยายจะรีเซ็ตตัวจับเวลาช่วงไม่มีการใช้งานของ Service WorkerAPI ส่วนขยายเพิ่มเติมจะได้รับอนุญาตให้ทำงานเกินระยะเวลาการหมดเวลา 5 นาทีสำหรับเวิร์กเกอร์บริการส่วนขยาย API เหล่านี้จะแสดงข้อความแจ้งของผู้ใช้ ซึ่งอาจทำให้ใช้เวลาในการแก้ปัญหานานกว่า 5 นาทีพอสมควร ซึ่งได้แก่
desktopCapture.chooseDesktopMedia()
,identity.launchWebAuthFlow()
,management.uninstall()
และpermissions.request()
Chrome 114
การส่งข้อความโดยใช้การรับส่งข้อความแบบคงที่จะทำให้ Service Worker ทำงานต่อไป ก่อนหน้านี้การเปิดพอร์ตจะรีเซ็ตตัวจับเวลา แต่ส่งข้อความไม่ได้ การเปิดพอร์ตจะไม่รีเซ็ตตัวจับเวลาอีกต่อไป
Chrome 110
การเรียก Extension API จะรีเซ็ตตัวจับเวลา ก่อนหน้านี้มีเพียงตัวแฮนเดิลเหตุการณ์ที่ทำงานอยู่เท่านั้นที่จะคงสถานะของ Service Worker ไว้ เหตุการณ์ที่อยู่ในคิวแต่ยังไม่ได้เรียกใช้ตัวแฮนเดิลจะไม่ทําให้รีเซ็ต
Chrome 109
ข้อความที่ส่งจากเอกสารนอกหน้าจอจะรีเซ็ตตัวจับเวลา
Chrome 105
การเชื่อมต่อกับโฮสต์การรับส่งข้อความในเครื่องโดยใช้ chrome.runtime.connectNative()
จะทำให้ Service Worker ทำงานอย่างต่อเนื่อง หากกระบวนการของโฮสต์ขัดข้องหรือปิดลง พอร์ตจะปิดและ Service Worker จะ��ิ้นสุดลงหลังจากตัวจับเวลาทำงานเสร็จ ป้องกันปัญหานี้โดยการเรียกใช้ chrome.runtime.connectNative()
ในเครื่องจัดการเหตุการณ์ onDisconnect ของพอร์ต