سيؤدي تنفيذ النصوص البرمجية التي تعمل في الخلفية والتي لا تُحفظ في الذاكرة إلى خفض تكلفة الموارد لإضافة Chrome بشكل كبير. يمكن أن تتوفّر معظم وظائف الإضافات من خلال نص برمجي في الخلفية يستند إلى الأحداث. يجب ألا تعمل الإضافات في الخلفية إلا في حالات نادرة، لأنّها تستهلك باستمرار موارد النظام ويمكن أن تتسبب في زيادة الضغط على الأجهزة ذات الطاقة المنخفضة.
يمكنك تحسين أداء إحدى الإضافات من خلال نقل نص برمجي دائم في الخلفية إلى نموذج غير دائم يستند إلى الأحداث. يتم ضبط "persistent"
تلقائيًا على true.
تعيين التثبيت على أنه "خطأ"
ابحث عن مفتاح "background"
في ملف manifest الإضافة، ثم أضِف الحقل
"persistent"
أو عدِّله إلى false.
{
"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 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})
بعد ذلك، يمكنك إضافة مستمع.
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()
})
});