Di chuyển sang tập lệnh nền dựa trên sự kiện

Việc triển khai các tập lệnh nền không liên tục sẽ giúp giảm đáng kể chi phí tài nguyên của tiện ích. Hầu hết chức năng của tiện ích đều có thể được hỗ trợ bằng một tập lệnh nền dựa trên sự kiện. Chỉ trong một số trường hợp hiếm gặp, tiện ích mới có chế độ nền liên tục, vì tiện ích này liên tục tiêu thụ tài nguyên hệ thống và có thể gây căng thẳng cho các thiết bị có công suất thấp.

Nâng cao hiệu suất của tiện ích bằng cách di chuyển một tập lệnh nền liên tục sang mô hình không liên tục dựa trên sự kiện. Theo mặc định, "persistent" được đặt thành true.

Chỉ định tính duy trì là false

Tìm khoá "background" trong tệp manifest của tiện ích, sau đó thêm hoặc cập nhật trường "persistent" thành false.

{
  "name": "My extension",
  ...
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  ...
}

Điều này cũng áp dụng cho các tập lệnh nền dựa vào một tệp HTML.

{
  "name": "My extension",
  ...
  "background": {
    "page": "background.html",
    "persistent": false
  },
  ...
}

Trình xử lý sự kiện trên nền tảng

Trình nghe phải ở cấp cao nhất để kích hoạt tập lệnh nền nếu một sự kiện quan trọng được kích hoạt. Có thể bạn cần tái cấu trúc các trình nghe đã đăng ký thành một mẫu đồng bộ. Việc cấu trúc các trình nghe như bên dưới sẽ không cho phép chúng được gọi vì chúng không được đăng ký đồng bộ.

chrome.storage.local.get('runtimeEvents', function (events) {
  for (let event of events)
    chrome.runtime[event].addListener(listener);
});

Thay vào đó, hãy giữ các trình nghe ở cấp cao nhất và không lồng ghép.

chrome.runtime.onStartup.addListener(function() {
  // run startup function
})

Ghi lại các thay đổi về trạng thái trong bộ nhớ

Sử dụng API bộ nhớ để đặt và trả về các trạng thái cũng như giá trị. Sử dụng local.set để cập nhật trên máy cục bộ.

  chrome.storage.local.set({ variable: variableInformation });

Sử dụng local.get để lấy giá trị của biến đó.

chrome.storage.local.get(['variable'], function(result) {
  let awesomeVariable = result.variable;
  // Do something with awesomeVariable
});

Biến bộ tính giờ thành chuông báo

Các bộ hẹn giờ dựa trên DOM, chẳng hạn như window.setTimeout() hoặc window.setInterval(), sẽ không được tuân thủ trong các tập lệnh nền không liên tục nếu chúng kích hoạt khi trang sự kiện ở trạng thái không hoạt động.

let timeout = 1000 * 60 * 3;  // 3 minutes in milliseconds
window.setTimeout(function() {
  alert('Hello, world!');
}, timeout);

Thay vào đó, hãy sử dụng alarms API.

chrome.alarms.create({delayInMinutes: 3.0})

Sau đó, thêm một trình nghe.

chrome.alarms.onAlarm.addListener(function() {
  alert("Hello, world!")
});

Cập nhật lệnh gọi cho các hàm tập lệnh chạy trong nền

Nếu bạn đang dùng extension.getBackgroundPage để gọi một hàm từ trang nền, hãy cập nhật thành runtime.getBackgroundPage. Phương thức mới hơn sẽ kích hoạt tập lệnh không liên tục trước khi trả về tập lệnh đó.

function backgroundFunction() {
  alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
  chrome.extension.getBackgroundPage().backgroundFunction();
});

Phương thức này sẽ không hoạt động nếu tập lệnh nền không hoạt động. Đây là trạng thái mặc định cho một tập lệnh không liên tục. Phương thức mới hơn bao gồm một hàm callback để đảm bảo tập lệnh nền đã được tải.

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