Erweiterungen sind eine Ergänzung des Browsers und stellen zusätzliche und benutzerdefinierte Funktionen bereit. Eine Erweiterung, die das Surfen verlangsamt oder beeinträchtigt, ist für den Nutzer problematisch und dem Ziel der Chrome-Erweiterung zuwider. Neben den allgemein guten Programmiergewohnheiten sollten Entwickler diese Praktiken befolgen, um sicherzustellen, dass ihre Erweiterungen mit Spitzenleistung ausgeführt werden.
Alles Mögliche auf später verschieben
Laden Sie keine Ressourcen, bis sie benötigt werden. Geben Sie nur die Elemente an, die zum Öffnen einer Erweiterung in der Startfunktion erforderlich sind. Laden Sie während des Starts keine Elemente, die nur benötigt werden, wenn der Nutzer auf eine Schaltfläche klickt, oder Funktionen, die nur dann funktionieren, wenn der Nutzer angemeldet ist, bevor er die Möglichkeit dazu hat.
Wichtige Ereignisse verwalten
Ein effizientes Hintergrundskript enthält registrierte Ereignisse, die für ihre Erweiterung wichtig sind. Sie liegen inaktiv, bis ein Zuhörer ausgelöst wird, reagieren entsprechend und kehren dann in den Ruhezustand zurück. Die Systemressourcen werden stark belastet, um die Ausführung eines nicht benötigten Scripts aufrechtzuerhalten.
Hintergrundskripts sollten im Manifest registriert werden und ihre Persistenz sollte nach Möglichkeit auf „false“ gesetzt sein.
{
"name": "High Performance Extension",
"description" : "Sleepy Background Script",
"version": "1.0",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
Ein Hintergrundskript muss nur dann dauerhaft aktiv bleiben, wenn die Erweiterung die chrome.webRequest
API verwendet, um Netzwerkanfragen zu blockieren oder zu ändern. Die webRequest API ist nicht mit nicht persistenten Hintergrundseiten kompatibel.
{
"name": "High Performance Extension",
"description" : "Persistent Background Script",
"version": "1.0",
...
"background": {
"scripts": ["background.js"],
"persistent": true
},
"permissions": [
"webRequest",
"webRequestBlocking",
"https://<distracting social media site>.com/*"
],
...
}
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return {redirectUrl: "/"};
},
{urls: ["https://social.media.distraction.com/*"]},
["blocking"]
);
Enthält Content-Skripts
Inhaltsskripts sollten als Geheimagent einer Erweiterung fungieren und dabei auf subtile Weise die Webseite lesen oder ändern, während der Erweiterungskern für komplexere Logiken herangezogen wird. Sie sollten klare Ziele haben, um invasive Aktivitäten auf irrelevanten Seiten zu vermeiden. Idealerweise sollten Inhaltsskripte beim Surfen unbemerkt bleiben, abgesehen von bewusstem Verhalten.
Ziele deklarieren
Eine Erweiterung, die Inhaltsskripte an unnötigen Speicherorten oder zu unangemessenen Zeiten ausführt, kann dazu führen, dass der Browser langsamer wird und Funktionsfehler verursachen. Dies lässt sich vermeiden, indem Sie Übereinstimmungsmuster im Manifest angeben und das Skript unter document_idle
statt document_start
ausführen.
{
"name": "High Performance Extension",
"description" : "Superfly Superlight Content Scripts",
"version": "1.0",
...
"content_scripts": [
{
"js": ["content_script.js"],
"matches": ["/*"],
"run_at": "document_idle"
}
]
...
}
Wenn eine Erweiterung nur auf eine Webseite mit der Aktion des Nutzers zugreifen muss, lassen Sie sie programmatisch einschleusen. Eine programmatische Injektion wird nur ausgeführt, wenn ein Nutzer sie aufruft.
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript({
code: 'document.body.style.fontSize="100px"'
});
});
Content-Skripts nur bei Bedarf verwenden
Viele Erweiterungen benötigen unter Umständen gar kein Inhaltsskript, um die gewünschte Funktionalität ausführen zu können. Mit der declarativeContent
API werden Regeln festgelegt, damit die Erweiterung erkennen kann, wenn relevante Bedingungen erfüllt sind. Dies ist effizienter als ein Inhaltsskript und verwendet weniger Code.
Wenn eine Erweiterung dem Nutzer beim Besuch einer Website mit einem HTML5-<video>
-Element eine Seitenaktion anzeigen muss, könnte sie eine deklarative Regel angeben.
chrome.runtime.onInstalled.addListener(function() {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([
{
conditions: [
new chrome.declarativeContent.PageStateMatcher({
css: ["video"],
})
],
actions: [ new chrome.declarativeContent.ShowPageAction() ]
}
]);
});
});
Codeeffizienz bewerten
Dieselben allgemeinen Praktiken für die Websiteleistung können auch auf Erweiterungen angewendet werden, z. B. die Implementierung von Techniken der asynchronen Programmierung und einen minimalen und kompakten Code.
Verwenden Sie Tools wie Lighthouse, um die Leistung einer Erweiterung zu bewerten und Regionen auszuwählen, in denen Seiten mit Bilderweiterungen verbessert werden können.