تغييرات في سلوك BFcache باستخدام منافذ رسائل الإضافات

إنّ ميزة "التخزين المؤقت للصفحات" (أو BFcache) هي تحسين في المتصفّح يتيح التنقّل الفوري باستخدام ميزة "التخزين المؤقت للصفحات". نحن نُجري تغييرات على ذاكرة التخزين المؤقت في Chrome BFCache، ما قد يؤثر في الإضافات التي تستخدم منافذ الرسائل. إذا كنت تملك إضافة Chrome تستخدم المراسلة للتواصل بين النصوص البرمجية للمحتوى وإضافتك، يمكنك متابعة القراءة للتعرّف على كيفية اختبار الإضافة وتكييفها.

منفذ رسالة الإضافة

تتواصل الإضافات مع النص البرمجي للمحتوى أو الإضافات الأخرى من خلال تمرير الرسالة. يمكن إرسال الرسائل باستخدام طلبات لمرّة واحدة من خلال الاتصال بـ runtime.sendMessage() وtabs.sendMessage() أو باستخدام منفذ رسائل قابل لإعادة الاستخدام. ما دام المنفذ نشطًا، يمكن لكلٍ من النص البرمجي للمحتوى والنص البرمجي لخلفية الإضافة إعادة استخدام المنفذ لنشر الرسائل مع بعضهما البعض.

لمزيد من المعلومات، يُرجى الاطّلاع على تمرير الرسائل.

ميزة "التخزين المؤقت للصفحات"

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

عندما تكون الصفحة مخزّنة في BFذاكرة التخزين المؤقت، تكون في حالة تجميد حيث لا يُسمح بتنفيذ JavaScript. ويعني ذلك أنّه لا يمكنه معالجة الرسائل التي يتلقّاها.

لمزيد من المعلومات، يُرجى الاطّلاع على التخزين المؤقت للصفحات.

تأثير منافذ رسالة الإضافة على ذاكرة التخزين المؤقت في BFCache

باختصار، قد تؤدي الإضافة التي ترسل رسائل إلى صفحة في BFذاكرة التخزين المؤقت إلى إخلاء ذاكرة التخزين المؤقت وقد تؤثر في الأداء.

عند تخزين صفحة تحتوي على منفذ رسالة إضافة مفتوح في BFcache، يظل المنفذ مفتوحًا. بعد استعادة الصفحة من BFCache، سيظل بإمكان عاملي خدمة الإضافات استخدام المرجع القديم لمنفذ الرسائل لنشر الرسائل على النص البرمجي للمحتوى.

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

لتجنب الوقوع في المشكلات المتعلقة بالرسائل المفقودة، يخرج Chrome في التنفيذ الحالي لـ Chrome صفحة المضيف من BFذاكرة التخزين المؤقت ويتجاهل الرسالة. إذا عاد المستخدم إلى الصفحة، سيتم تحميلها من جديد، ما يسمح للإضافة بإعداد اتصال جديد.

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

لتحسين الأداء العام، نخطط لتقديم سلوك جديد لمنفذ الرسائل.

سلوك جديد: إغلاق قناة الرسائل عند تخزين الصفحة في ذاكرة التخزين المؤقت للصفحات في ذاكرة التخزين المؤقت

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

بما أنّ القناة مغلقة، لن يتم إرسال أي رسائل إلى الصفحة أثناء تخزينها في BFذاكرة التخزين المؤقت. ولهذا السبب، لن يتم إخراج الصفحة بسبب الإضافة.

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

// content script

let port;

window.addEventListener('pageshow', (event) => {
  if (event.persisted) {
    // The page is restored from BFCache, set up a new connection.
    port = chrome.runtime.connect();
  }
});

اطّلِع على مزيد من المعلومات عن محادثة WECG من ممثلي المتصفحات المختلفة (ضمن المشكلة 474).

هل أنا متأثر؟

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

  1. تأكَّد من أنّ إصدار Chrome لا يقل عن 123. من الناحية المثالية، استخدِم Chrome Canary، الذي يتضمّن تحذيرًا إضافيًا لتسهيل عملية الاختبار.
  2. شغِّل متصفِّح Chrome بالعلامة التالية:

    --disable-features=DisconnectExtensionMessagePortWhenPageEntersBFCache
    
  3. انتقِل إلى صفحة مؤهَّلة لاستخدام ذاكرة التخزين المؤقت لمتصفّح BFذاكرة التخزين المؤقت بدون تشغيل الإضافة (على سبيل المثال، بعض المواقع الإلكترونية البسيطة مثل https://example.com/). اتّبِع الدليل التعليمي لميزة BFCache للتأكّد من استعادتها من هذه الأداة.

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

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

    في Chrome Canary 124.0.6315.0 والإصدارات الأحدث، سيظهر لك أيضًا التحذير التالي في الصفحة:

    يظهر تحذير عند عدم استعادة إحدى الصفحات من BFcache.
    يظهر تحذير عند عدم استعادة صفحة من ذاكرة التخزين المؤقت (BFcache).

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

  1. شغِّل متصفِّح Chrome بالعلامة التالية:

    --enable-features=DisconnectExtensionMessagePortWhenPageEntersBFCache
    
  2. انتقِل إلى الصفحة التي لم تتم استعادتها من ذاكرة التخزين المؤقت (BFCache) بسبب الخطأ "ExtensionSentMessageTocachedFrame".

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

  4. اختبِر ما إذا كانت الإضافة لا تزال تعمل كالمعتاد، وإذا لم تكن تعمل، يجب إعادة الاتصال يدويًا كما هو موضَّح في القسم السابق.

المخطط الزمني للإصدار

ونخطط لزيادة السلوك الجديد تدريجيًا بدءًا من إصدار Chrome 123. في ما يلي الخطة التفصيلية:

التاريخ الإنجاز المخطط له
‫15 فبراير ابدأ تجربة السلوك الجديد في إصدار Chrome Canary وإصدار مطوّري البرامج من Chrome.
1 مارس ابدأ تجربة السلوك الجديد في الإصدار التجريبي من Chrome.
18 آذار (مارس) إصدار السلوك الجديد لنسبة 4 في المئة من المستخدمين في إصدار Chrome الثابت.
25 آذار (مارس) إطلاق السلوك الجديد لنسبة %50 من المستخدمين في إصدار Chrome الثابت.
2 نيسان (أبريل) تنتهي التجربة، مع جعل السلوك الجديد تلقائيًا.