ส่วนขยายเป็นส่วนเพิ่มเติมของเบราว์เซอร์ ที่ออกแบบมาเพื่อให้มีฟังก์ชันการทำงานเสริมและที่กำหนดเอง ส่วนขยายที่ทำให้ประสบการณ์การท่องเว็บช้าลงหรือบกพร่องเป็นปัญหาต่อผู้ใช้และตอบสนองวัตถุประสงค์ของส่วนขยาย Chrome นอกจากการเขียนโค้ดที่ดีโดยทั่วไปแล้ว นักพัฒนาซอฟต์แวร์ควรทำตามแนวทางปฏิบัติเหล่านี้ด้วยเพื่อให้แน่ใจว่าส่วนขยายจะทำงานได้อย่างมีประสิทธิภาพสูงสุด
เลื่อนเวลาที่เป็นไปได้ทั้งหมด
อย่าโหลดทรัพยากรจนกว่าจะจำเป็นต้องใช้ ใส่เฉพาะส่วนที่จำเป็นในการเปิดส่วนขยายในฟังก์ชันเริ่มต้น อย่าโหลดสิ่งต่างๆ ที่จำเป็นในช่วงเริ่มต้นซึ่งจำเป็นเฉพาะในกรณีที่ผู้ใช้คลิกปุ่ม หรือคุณลักษณะที่ทำงานเฉพาะเมื่อผู้ใช้ลงชื่อเข้าใช้ก่อนมีโอกาสดำเนินการดังกล่าว
จัดการเหตุการณ์สำคัญ
สคริปต์เบื้องหลังที่มีประสิทธิภาพมีเหตุการณ์ที่บันทึกไว้ซึ่งมีความสำคัญต่อส่วนขยาย ทั้งคู่จะไม่มีความเคลื่อนไหวจนกว่าผู้ฟังจะถูกเรียกให้แสดง ให้กระทำตามนั้น จากนั้นกลับสู่สถานะที่ไม่มีความเคลื่อนไหว ซึ่งเป็นการสิ้นเปลืองทรัพยากรระบบเพื่อให้สคริปต์ที่ไม่จำเป็นทำงานต่อไป
ควรลงทะเบียนสคริปต์พื้นหลังในไฟล์ Manifest โดยตั้งค่าความต่อเนื่องเป็น "เท็จ" หากทำได้
{
"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"]
);
มีสคริปต์เนื้อหา
สคริปต์เนื้อหาควรทำหน้าที่เป็นตัวแทนลับของส่วนขยาย โดยค่อยๆ อ่านหรือแก้ไขหน้าเว็บขณะอาศัยหลักของส่วนขยายเพื่อให้ทำงานเชิงตรรกะมากขึ้น แคมเปญประเภทนี้ควรมีเป้าหมายที่ชัดเจนเพื่อหลีกเลี่ยงกิจกรรมที่ไม่รุกล้ำหน้าที่ไม่เกี่ยวข้อง ตามหลักแล้ว สคริปต์เนื้อหาไม่ควรเป็นสิ่งที่ ไม่ได้สังเกตในขณะท่องเว็บ นอกจากจะเป็นพฤติกรรมที่ต้องการ
ประกาศเป้าหมาย
ส่วนขยายที่เรียกใช้สคริปต์เนื้อหาในตำแหน่งที่ไม่จำเป็นหรือในเวลาที่ไม่เหมาะสมอาจทำให้เบราว์เซอร์ทำงานช้าลงและอาจทำให้เกิดข้อผิดพลาดของฟังก์ชัน คุณหลีกเลี่ยงปัญหานี้ได้โดยระบุรูปแบบการจับคู่ในไฟล์ 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"'
});
});
ใช้สคริปต์เนื้อหาเมื่อจำเป็นเท่านั้น
ส่วนขยายจำนวนมากอาจไม่จำเป็นต้องใช้สคริปต์เนื้อหาเลยเพื่อให้ทำงานตามที่ต้องการ การใช้ 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 เพื่อประเมินประสิทธิภาพของส่วนขยายและพื้นที่เป้าหมายที่ควรปรับปรุงในหน้าส่วนขยายภาพ