העברה לסקריפטים מבוססי-אירועים ברקע

יישום סקריפטים לא עקביים שפועלות ברקע יפחית באופן משמעותי את עלות המשאבים של התוסף. אפשר לתמוך ברוב הפונקציונליות של התוספים באמצעות סקריפט רקע המבוסס על אירועים. רק במקרים נדירים צריך לוודא שלתוסף יש רקע קבוע, מכיוון שהוא צורך כל הזמן משאבי מערכת ויכול ליצור עומס על מכשירים בעלי מתח נמוך.

כדי לשפר את הביצועים של תוסף, אפשר להעביר סקריפט ברקע קבוע למודל לא קבוע שמבוסס על אירועים. כברירת מחדל, הערך של "persistent" הוא True.

הגדרת העקביות כ-False

מחפשים את המפתח "background" בקובץ מניפסט של התוסף, ומוסיפים או מעדכנים את השדה "persistent" לערך False.

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

הכלל הזה חל גם על סקריפטים של רקע שמסתמכים על קובץ HTML.

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

פונקציות event listener של שטחי פרסום

המאזינים חייבים להיות ברמה העליונה כדי להפעיל את סקריפט הרקע אם מופעל אירוע חשוב. ייתכן שיהיה צורך לבנות מחדש מאזינים רשומים לתבנית סינכרונית. המבנה של המאזינים, כפי שמתואר בהמשך, לא יאפשר להפעיל אותם כי הם לא רשומים באופן סינכרוני.

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