ส่วนขยายคือส่วนเสริมของเบราว์เซอร์ที่ออกแบบมาเพื่อมอบฟังก์ชันการทำงานเพิ่มเติมและปรับแต่งได้ ส่วนขยายที่ทำให้ประสบการณ์การท่องเว็บช้าลงหรือทำให้เกิดข้อบกพร่องเป็นปัญหาต่อผู้ใช้และขัดต่อวัตถุประสงค์ของส่วนขยาย Chrome นอกเหนือจากนิสัยการเขียนโค้ดที่ดีโดยทั่วไปแล้ว นักพัฒนาแอปควรปฏิบัติตามแนวทางเหล่านี้เพื่อให้มั่นใจว่าส่วนขยายจะทำงานได้อย่างมีประสิทธิภาพสูงสุด
เลื่อนทุกอย่างที่เป็นไปได้
หลีกเลี่ยงการโหลดทรัพยากรจนกว่าจะจำเป็น ใส่เฉพาะสิ่งที่จำเป็นต่อการเปิด ส่วนขยายในฟังก์ชันเริ่มต้น อย่าโหลดสิ่งต่างๆ ในระหว่างการเริ่มต้นระบบซึ่งจำเป็นต่อเมื่อผู้ใช้คลิกปุ่ม หรือฟีเจอร์ที่ทำงานเมื่อผู้ใช้ลงชื่อเข้าใช้ก่อนเท่านั้น
จัดการเหตุการณ์สำคัญ
สคริปต์พื้นหลังที่มีประสิทธิภาพจะมีเหตุการณ์ที่ลงทะเบียนไว้ซึ่งมีความสําคัญต่อส่วนขยาย โดยจะอยู่ในสถานะหยุดทำงานจนกว่าจะมีการเรียกใช้ผู้ฟัง จากนั้นจะดำเนินการตามนั้น แล้วกลับสู่สถานะหยุดทำงาน การเรียกใช้สคริปต์ที่ไม่จำเป็นจะทำให้ทรัพยากรของระบบหมดไป
ควรลงทะเบียนสคริปต์พื้นหลังในไฟล์ Manifest โดยตั้งค่าความคงทนเป็น false หากเป็นไปได้
{
"name": "High Performance Extension",
"description" : "Sleepy Background Script",
"version": "1.0",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
กรณีเดียวที่ควรให้สคริปต์พื้นหลังทำงานอย่างต่อเนื่องคือหากส่วนขยายใช้ chrome.webRequest API เพื่อบล็อกหรือแก้ไขคำขอเครือข่าย API webRequest ใช้ร่วมกับหน้าพื้นหลังที่ไม่คงอยู่ไม่ได้
{
"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"]
);
มีสคริปต์เนื้อหา
Content Script ควรทำงานเป็นตัวแทนลับของส่วนขยาย โดยอ่านหรือแก้ไขหน้าเว็บอย่างแนบเนียนในขณะที่ใช้แกนหลักของส่วนขยายเพื่อทำงานกับตรรกะที่ซับซ้อนกว่า โดยควรมี เป้าหมายที่ชัดเจนเพื่อหลีกเลี่ยงกิจกรรมที่ล่วงล้ำในหน้าเว็บที่ไม่เกี่ยวข้อง ในอุดมคติ สคริปต์เนื้อหาควร ไม่เป็นที่สังเกตในประสบการณ์การท่องเว็บนอกเหนือจากพฤติกรรมที่มีจุดประสงค์
ประกาศเป้าหมาย
ส่วนขยายที่เรียกใช้ Content Script ในตำแหน่งที่ไม่จำเป็นหรือในเวลาที่ไม่เหมาะสมอาจทำให้เบราว์เซอร์ทำงานช้าลงและอาจทำให้เกิดข้อผิดพลาดด้านฟังก์ชันการทำงาน หลีกเลี่ยงปัญหานี้โดยระบุรูปแบบ
การจับคู่ในไฟล์ Manifest และเรียกใช้สคริปต์ที่ 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"'
});
});
ใช้ Content Script เมื่อจำเป็นเท่านั้น
ส่วนขยายจำนวนมากอาจไม่จำเป็นต้องใช้ Content Script เลยเพื่อให้ฟังก์ชันการทำงานที่ต้องการ การใช้declarativeContent API จะกำหนดกฎให้ส่วนขยายจดจำได้เมื่อตรงตามเงื่อนไขที่เกี่ยวข้อง
ซึ่งมีประสิทธิภาพมากกว่า Content Script และใช้โค้ดน้อยกว่า
หากส่วนขยายต้องแสดงการดำเนินการในหน้าเว็บต่อผู้ใช้เมื่อเข้าชมเว็บไซต์ที่มีองค์ประกอบ 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 เพื่อประเมินประสิทธิภาพของส่วนขยายและกำหนดเป้าหมายส่วนที่ อาจปรับปรุงในหน้าส่วนขยายภาพ