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

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

تأجيل كل ما يمكن تأجيله

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

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

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

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

{
  "name": "High Performance Extension",
  "description" : "Sleepy Background Script",
  "version": "1.0",
  ...
  "background": {
   "scripts": ["background.js"],
   "persistent": false
  },
  ...
}

الحالة الوحيدة التي يجب فيها إبقاء النص البرمجي في الخلفية نشطًا بشكل دائم هي إذا كانت الإضافة تستخدم chrome.webRequest واجهة برمجة التطبيقات لحظر طلبات الشبكة أو تعديلها. لا تتوافق واجهة برمجة التطبيقات 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"]
);

تضمين النصوص البرمجية للمحتوى

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

تحديد الأهداف

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

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