วงจรชีวิตของโปรแกรมทำงานของบริการส่วนขยาย

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

การติดตั้ง

การติดตั้งจะเกิดขึ้นเมื่อผู้ใช้ติดตั้งหรืออัปเดต 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 Worker

  • API ส่วนขยายเพิ่มเติมจะได้รับอนุญาตให้ทำงานเกินระยะเวลาการหมดเวลา 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 ของพอร์ต