نقل البيانات إلى النصوص البرمجية للخلفية المستندة إلى الأحداث

يؤدي تنفيذ النصوص البرمجية غير الدائمة للخلفية إلى خفض تكلفة موارد الإضافة بشكل كبير. يمكن توفير معظم وظائف الإضافات من خلال نص برمجي للخلفية مستند إلى الحدث. في الظروف النادرة فقط، يجب أن تكون للإضافة خلفية ثابتة، لأنّها تستهلك موارد النظام باستمرار ويمكن أن تتسبّب في إجهاد الأجهزة ذات الطاقة المنخفضة.

يمكنك تحسين أداء إحدى الإضافات عن طريق نقل نص برمجي ثابت للخلفية إلى نموذج مستند إلى الحدث غير دائم. بشكل تلقائي، يتم ضبط سياسة "persistent" على "صحيح".

تصنيف الاستمرارية على أنها خاطئة

حدِّد موقع مفتاح "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);

بدلاً من ذلك، يمكنك استخدام واجهة برمجة تطبيقات المنبهات.

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()
  })
});