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 ổn định sẽ giúp giảm đáng kể chi phí tài nguyên cho tiện ích. Hầu hết chức năng của tiện ích đều có thể được tập lệnh nền dựa trên sự kiện hỗ trợ. Chỉ trong một số ít trường hợp tiện ích phải hoạt động ở chế độ nền ổn định, vì chúng liên tục tiêu thụ tài nguyên hệ thống và có thể gây ra tình trạng áp lực trên 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 tập lệnh nền cố định sang mô hình không lâu dài dựa trên sự kiện. Theo mặc định, "persistent" được đặt thành true.

Chỉ định tính bền vững là false (sai)

Tìm khoá "background" trong tệp tệp kê khai 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 với các tập lệnh nền dựa vào tệp HTML.

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

Hiển thị trình nghe sự kiện

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. Bạn có thể cần định cấu lại trình nghe đã đăng ký thành mẫu đồng bộ. Việc tạo cấu trúc trình nghe như bên dưới sẽ không cho phép gọi các trình nghe này vì chúng chưa đượ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ữ người 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ớ

Dùng API bộ nhớ để đặt và trả về 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
});

Chuyển đồng hồ hẹn giờ thành chuông báo

Các bộ tính giờ dựa trên DOM, chẳng hạn như window.setTimeout() hoặc window.setInterval(), không được áp dụng trong tập lệnh nền không ổn định nếu chúng kích hoạt khi trang sự kiện 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 API báo thức.

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

Sau đó, hãy 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 nền

Nếu sử dụng extension.getBackgroundPage để gọi một hàm từ trang nền, hãy cập nhật lên runtime.getBackgroundPage. Phương thức mới hơn kích hoạt tập lệnh không ổn định 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 tập lệnh không tồn tại lâu dài. 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 đã tải.

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