به اسکریپت های پس زمینه رویداد محور مهاجرت کنید

پیاده‌سازی اسکریپت‌های پس‌زمینه غیرمداوم، هزینه منابع برنامه افزودنی شما را تا حد زیادی کاهش می‌دهد. اکثر قابلیت های برنامه افزودنی را می توان توسط یک اسکریپت پس زمینه مبتنی بر رویداد پشتیبانی کرد. فقط در شرایط نادر یک برنامه افزودنی باید یک پس‌زمینه پایدار داشته باشد، زیرا آنها دائماً منابع سیستم را مصرف می‌کنند و می‌توانند باعث فشار بر دستگاه‌های کم مصرف شوند.

با انتقال یک اسکریپت پس‌زمینه پایدار به یک مدل غیر پایدار مبتنی بر رویداد، عملکرد یک برنامه افزودنی را افزایش دهید. به طور پیش فرض، "persistent" روی true تنظیم شده است.

تداوم را نادرست تعیین کنید

کلید "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
})

ثبت تغییرات وضعیت در ذخیره سازی

از 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);

در عوض، از 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();
});

اگر اسکریپت پس‌زمینه غیرفعال باشد، این روش کار نخواهد کرد، که حالت پیش‌فرض برای یک اسکریپت غیرمداوم است. روش جدیدتر شامل یک تابع callback برای اطمینان از بارگیری اسکریپت پس‌زمینه است.

document.getElementById('target').addEventListener('click', function() {
  chrome.runtime.getBackgroundPage(function(backgroundPage){
    backgroundPage.backgroundFunction()
  })
});