การใช้สคริปต์ที่ทำงานอยู่เบื้องหลังอย่างต่อเนื่องจะช่วยลดค่าใช้จ่ายด้านทรัพยากรของส่วนขยายได้อย่างมาก ฟังก์ชันส่วนขยายส่วนใหญ่สามารถรองรับโดยสคริปต์พื้นหลังที่อิงกับเหตุการณ์ เฉพาะภายใต้สถานการณ์ที่พบได้น้อย ส่วนขยายควรมีพื้นหลังถาวร เนื่องจากต้องใช้ทรัพยากรระบบอย่างต่อเนื่องและอาจทำให้เกิดการใช้งานอุปกรณ์ที่ใช้พลังงานต่ำ
ปรับปรุงประสิทธิภาพของส่วนขยายด้วยการย้ายข้อมูลสคริปต์พื้นหลังถาวรไปยังโมเดลที่ไม่ถาวรที่อิงตามเหตุการณ์ ระบบจะตั้งค่า "persistent"
เป็น "จริง" ไว้โดยค่าเริ่มต้น
ระบุการคงอยู่เป็น false
ค้นหาคีย์ "background"
ในไฟล์ manifest ส่วนขยาย จากนั้นเพิ่มหรืออัปเดตช่อง "persistent"
เป็น false
{
"name": "My extension",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
เช่นเดียวกันกับสคริปต์พื้นหลังที่ต้องใช้ไฟล์ HTML
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
Listener เหตุการณ์ของแพลตฟอร์ม
ผู้ฟังต้องอยู่ที่ระดับบนสุดเพื่อเปิดใช้งานสคริปต์เบื้องหลังหากมีการทริกเกอร์เหตุการณ์สำคัญ Listener ที่ลงทะเบียนอาจต้องได้รับการจัดโครงสร้างใหม่ให้เป็นรูปแบบซิงโครนัส การจัดโครงสร้างผู้ฟังดังที่แสดงด้านล่าง จะไม่อนุญาตให้เรียกผู้ฟัง เนื่องจากไม่ได้ลงทะเบียนแบบพร้อมกัน
chrome.storage.local.get('runtimeEvents', function (events) {
for (let event of events)
chrome.runtime[event].addListener(listener);
});
แต่ให้เก็บผู้ฟังไว้ที่ระดับบนสุดและไม่ซ้อนกันแทน
chrome.runtime.onStartup.addListener(function() {
// run startup function
})
บันทึกการเปลี่ยนแปลงสถานะในพื้นที่เก็บข้อมูล
ใช้ storage API เพื่อตั้งค่าและแสดงผลสถานะและค่า โปรดใช้ local.set
เพื่ออัปเดตเครื่องภายใน
chrome.storage.local.set({ variable: variableInformation });
ใช้ local.get
เพื่อหาค่าของตัวแปรนั้น
chrome.storage.local.get(['variable'], function(result) {
let awesomeVariable = result.variable;
// Do something with awesomeVariable
});
เปลี่ยนตัวจับเวลาเป็นนาฬิกาปลุก
ตัวจับเวลาแบบ DOM เช่น window.setTimeout()
หรือ window.setInterval()
จะใช้ไม่ได้ในสคริปต์พื้นหลังที่ไม่ถาวรหากทริกเกอร์เมื่อหน้าเหตุการณ์ไม่มีความเคลื่อนไหว
let timeout = 1000 * 60 * 3; // 3 minutes in milliseconds
window.setTimeout(function() {
alert('Hello, world!');
}, timeout);
โปรดใช้ Alarms API แทน
chrome.alarms.create({delayInMinutes: 3.0})
จากนั้นให้เพิ่ม Listener
chrome.alarms.onAlarm.addListener(function() {
alert("Hello, world!")
});
อัปเดตการเรียกฟังก์ชันสคริปต์พื้นหลัง
หากใช้ extension.getBackgroundPage
เพื่อเรียกใช้ฟังก์ชันจากหน้าพื้นหลัง ให้อัปเดตเป็น runtime.getBackgroundPage
เมธอดที่ใหม่กว่าจะเปิดใช้งานสคริปต์ที่ไม่ถาวรก่อนที่จะแสดงผล
function backgroundFunction() {
alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
chrome.extension.getBackgroundPage().backgroundFunction();
});
วิธีการนี้จะใช้ไม่ได้หากสคริปต์เบื้องหลังไม่มีการใช้งาน ซึ่งเป็นสถานะเริ่มต้นสำหรับสคริปต์ที่ไม่ถาวร วิธีการที่ใหม่กว่ามีฟังก์ชันเรียกกลับเพื่อให้มั่นใจว่าสคริปต์พื้นหลังโหลดแล้ว
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});