تحقيق أفضل أداء

الإضافات هي إضافة إلى المتصفح، وهي مصممة لتوفير وظائف تكميلية ومخصّصة. وتُعدّ الإضافة التي تبطئ تجربة التصفّح أو تُضعفها تمثّل مشكلة للمستخدم وتعارض هدف إضافة Chrome. بالإضافة إلى عادات الترميز الجيدة العامة، على المطوّرين اتّباع هذه الممارسات لضمان عمل الإضافات في ذروة الأداء.

تأجيل كل البيانات الممكنة

تجنَّب تحميل الموارد إلى أن تكون هناك حاجة إليها. قم بتضمين ما هو مطلوب فقط لفتح إضافة في وظيفة بدء التشغيل. أثناء بدء التشغيل، لا تحمِّل أشياء لا تكون مطلوبة إلا عندما ينقر المستخدم على زر ما أو الميزات التي لا تعمل إلا عند تسجيل المستخدم الدخول قبل أن تتاح له الفرصة لإجراء ذلك.

إدارة الأحداث المهمة

يحتوي النص البرمجي للخلفية على الأحداث المسجّلة المهمة للإضافة. تبقى خاملة حتى يتم تشغيل المستمع، وتتصرف وفقًا لذلك، ثم تعود إلى الحالة الخاملة. وهو استنزاف لموارد النظام للحفاظ على تشغيل نص برمجي غير ضروري.

يجب تسجيل النصوص البرمجية للخلفية في البيان مع ضبط استمرارها على "خطأ" إن أمكن.

{
  "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 إلى ضبط قواعد للإضافة من أجل التعرّف على وقت استيفاء الشروط ذات الصلة. وهذه الطريقة أكثر فعالية من النصوص البرمجية للمحتوى وتستخدم عددًا أقل من الرموز.

إذا كانت هناك إضافة تطلب عرض إجراء صفحة للمستخدم عند زيارة موقع إلكتروني يحتوي على عنصر <video> HTML5، يمكن أن تحدِّد هذه الإضافة قاعدة تعريفية.

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، لتقييم أداء الإضافات والمناطق المستهدفة التي يمكن تحسينها في صفحات الإضافات المرئية.