擴充功能為瀏覽器之外,主要用來提供補充和自訂 功能。如果擴充功能會拖慢瀏覽速度或影響瀏覽體驗, 針對 Chrome 擴充功能目標的使用者和計數器。除了一般良好的程式設計習慣外 開發人員應遵循這些做法,確保擴充功能可達到最佳效能。
延遲所有可能性
請盡量不要載入需要的資源。僅包含開啟 觸發於其啟動函式中的擴充功能請勿在啟動期間載入只需要 使用者點選按鈕,或功能只有在使用者登入後才能運作 。
管理重要事件
有效率的背景指令碼包含已註冊的事件,而且事件很重要 。他們會一直處於休眠狀態,直到觸發聽眾並採取相應行動,然後再回到休眠狀態。 時間。必須提供系統資源,才能讓不必要的指令碼持續運作。
背景指令碼在資訊清單中註冊時,持續性必須設為 false,
{
"name": "High Performance Extension",
"description" : "Sleepy Background Script",
"version": "1.0",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
只有在擴充功能使用
chrome.webRequest
API 用於封鎖或修改網路要求。webRequest API 不相容
以非永久的背景頁面為例
{
"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"]
);
包含內容指令碼
內容指令碼應可做為擴充功能的秘密代理程式,巧妙地讀取或 同時運用擴充功能核心來修改網頁,讓邏輯更常運作。應有 清除目標,避免在不相關的網頁上從事侵入式活動。在理想情況下 使用者操作時不會被注意到,而不只是出於刻意的行為。
宣告目標
擴充功能在非必要位置或不當時間執行內容指令碼時
速度,使瀏覽器執行速度變慢,且可能造成功能錯誤。如要避免這種情形,請提供比對
模式,並在 document_idle
而非 document_start
執行指令碼。
{
"name": "High Performance Extension",
"description" : "Superfly Superlight Content Scripts",
"version": "1.0",
...
"content_scripts": [
{
"js": ["content_script.js"],
"matches": ["/*"],
"run_at": "document_idle"
}
]
...
}
如果擴充功能只需要存取使用者動作的網頁,請插入擴充功能 以程式輔助的方式投放 -程式輔助插入作業只會在使用者叫用時執行。
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript({
code: 'document.body.style.fontSize="100px"'
});
});
只在必要時使用內容指令碼
許多擴充功能可能完全不需要使用內容指令碼,就能執行所需功能。使用
declarativeContent
API 會為擴充功能設定規則,使其在相關條件下識別
裝置。這比內容指令碼更有效率,且需用更少的程式碼!
當使用者造訪含有 HTML5 的網站時,額外資訊需要顯示網頁動作
<video>
元素時,可以指定宣告規則。
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() ]
}
]);
});
});
評估程式碼效率
提升網站成效的通用做法也能套用至額外資訊,例如導入 ,同時確保程式碼保持精簡且精簡。
使用 Lighthouse 等工具評估額外資訊成效,並指定需要的額外資訊指定 可以改善視覺額外資訊頁面