سيؤدي تنفيذ النصوص البرمجية في الخلفية غير الثابتة إلى تقليل تكلفة موارد إضافتك إلى حد كبير. يمكن أن يدعم نص برمجي في الخلفية يستند إلى الأحداث معظم وظائف الإضافة. يجب أن يكون للإضافة نص برمجي ثابت في الخلفية في ظروف نادرة فقط، لأنّها تستهلك باستمرار موارد النظام ويمكن أن تؤدي إلى إجهاد الأجهزة ذات الطاقة المنخفضة.
يمكنك تحسين أداء الإضافة من خلال نقل نص برمجي ثابت في الخلفية إلى نموذج غير ثابت يستند إلى الأحداث. تكون قيمة "persistent" تلقائيًا هي "صحيح".
تحديد قيمة "غير ثابت"
حدِّد المفتاح "background" في ملف بيان الإضافة، ثم أضِف الحقل
"persistent" أو عدِّله ليصبح "غير ثابت".
{
"name": "My extension",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
ينطبق الأمر نفسه على النصوص البرمجية في الخلفية التي تعتمد على ملف HTML.
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
عرض أدوات معالجة الأحداث
يجب أن تكون أدوات معالجة الأحداث في المستوى الأعلى لتفعيل النص البرمجي في الخلفية إذا تم تشغيل حدث مهم. قد تحتاج إلى إعادة هيكلة أدوات معالجة الأحداث المسجَّلة لتصبح نمطًا متزامنًا. لن يسمح هيكلة أدوات معالجة الأحداث، كما هو موضّح أدناه، باستدعائها لأنّها غير مسجَّلة بشكل متزامن.
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 لضبط الحالات والقيم وعرضها. استخدِم 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.
chrome.alarms.create({delayInMinutes: 3.0})
بعد ذلك، أضِف متتبِّعًا.
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()
})
});