إيقاف حدث إلغاء التحميل نهائيًا

سيتم إيقاف حدث unload تدريجيًا عن طريق تغيير الإعداد التلقائي تدريجيًا بحيث يتوقّف تنشيط معالِجات unload على الصفحات ما لم توافق الصفحة بشكل صريح على إعادة تفعيلها.

المخطط الزمني للإيقاف

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

بعد مرحلتَي التواصل والتجربة هذه، نتوقّع طرح الإيقاف النهائي بشكلٍ مبدئي:

  • هي مرحلة ذات نطاق محدَّد يتم فيها إيقاف العمل تدريجيًا لإلغاء التحميل لأهم 50 موقعًا إلكترونيًا شائعًا (المرجع حتى وقت كتابة هذا التقرير).
    • اعتبارًا من% 1 من المستخدمين بدءًا من الإصدار 120 من Chrome (نهاية تشرين الثاني (نوفمبر) 2023).
    • الانتهاء من% 100 من المستخدمين بنهاية الربع الثالث من عام 2024
  • بالإضافة إلى ذلك، ونعتزم اعتبارًا من الربع الثالث من عام 2024 بدء مرحلة عامة ستتوقف فيها إزالة التحميل تدريجيًا على أي مواقع إلكترونية، بدءًا من% 1 من المستخدمين وانتهاءً بنسبة% 100 من المستخدمين بحلول نهاية الربع الأول من عام 2025.

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

المخطط الزمني لإيقاف عملية إلغاء التحميل نهائيًا

الخلفية

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

تشمل السيناريوهات التي تم فيها استخدام هذا الحدث بشكل أكثر شيوعًا ما يلي:

  • حفظ بيانات المستخدمين: يمكنك حفظ البيانات قبل مغادرة الصفحة.
  • تنفيذ مهام تنظيف البيانات: إغلاق الموارد المفتوحة قبل مغادرة الصفحة.
  • إرسال الإحصاءات: إرسال البيانات ذات الصلة بتفاعلات المستخدم في نهاية الجلسة.

إلا أنّ حدث unload غير موثوق على الإطلاق.

على أجهزة الكمبيوتر المكتبي Chrome وFirefox، يمكن الاعتماد على unload بشكل معقول، إلا أنّ تأثيره يؤثر سلبًا في أداء الموقع الإلكتروني من خلال منع استخدام bfcache (التخزين المؤقت للصفحات).

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

يعتقد فريق Chrome أنّ استخدام نموذج الأجهزة الجوّالة المتمثل في منح الأولوية لميزة "التخزين المؤقت للصفحات" على unload على أجهزة الكمبيوتر المكتبي قد يكون مزعجًا لأنّه قد يكون أكثر موثوقية هناك أيضًا عندما كان ذلك موثوقًا بشكل معقول سابقًا في Chrome (وFirefox). بدلاً من ذلك، إنّ هدف Chrome هو إزالة حدث "unload" بالكامل. وحتى ذلك الحين، سيظل موثوقًا به على أجهزة الكمبيوتر المكتبي للمستخدمين الذين أوقفوا بشكلٍ صريح إيقاف هذه الميزة.

لماذا تريد إيقاف حدث "unload" نهائيًا؟

يُعدّ إيقاف unload نهائيًا خطوة أساسية في إدراك أكبر بكثير لشبكة الويب التي نعيشها في الوقت الحالي. يعطي حدث unload إحساسًا خاطئًا بالتحكم في دورة حياة التطبيق التي تجهلها بشكل متزايد عن كيفية تصفحنا للويب في عالم الحوسبة الحديث.

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

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

بدائل لفعاليات unload

وبدلاً من unload، يُنصَح باستخدام ما يلي:

  • visibilitychange: لتحديد وقت تغيُّر مستوى ظهور الصفحة. يحدث هذا الحدث عندما يبدّل المستخدم علامات التبويب أو يصغّر نافذة المتصفّح أو يفتح صفحة جديدة. يجب أن تكون حالة hidden آخر وقت موثوق به لحفظ بيانات التطبيق والمستخدم.
  • pagehide: لتحديد وقت انتقال المستخدم بعيدًا عن الصفحة يحدث هذا الحدث عندما ينتقل المستخدم بعيدًا عن الصفحة أو يعيد تحميل الصفحة أو يغلق نافذة المتصفّح. لا يتم تنشيط حدث "pagehide" عند تصغير الصفحة أو التبديل إلى علامة تبويب أخرى. يُرجى العلم أنّه من الممكن استعادة إحدى الصفحات بعد تنشيط هذا الحدث لأنّ ميزة "pagehide" لا تجعل هذه الصفحة غير مؤهَّلة لاستخدام ميزة "التخزين المؤقت للصفحات". إذا كنت تقوم بتنظيف أي موارد في هذا الحدث، فقد يجب استعادتها عند استعادة الصفحة.

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

لمزيد من التفاصيل، يُرجى الاطّلاع على هذه النصائح حول عدم استخدام معالج unload مطلقًا.

رصد استخدام "unload"

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

منارة

تتضمن أداة Lighthouse عملية تدقيق no-unload-listeners، وهي تحذّر المطوّرين في حال إضافة أي أداة JavaScript على صفحاتهم (بما في ذلك تلك الواردة من مكتبات الجهات الخارجية) "unload" أداة معالجة الحدث.

تدقيق Lighthouse يعرض معالِجات إلغاء التحميل قيد الاستخدام

أدوات مطوري البرامج في Chrome

تتضمّن أدوات مطوري البرامج في Chrome تدقيق back-foward-cache لمساعدتك في تحديد المشاكل التي قد تمنع صفحتك من استخدام ميزة "التخزين المؤقت للصفحات"، بما في ذلك استخدام معالج unload.

لاختبار ميزة "التخزين المؤقت للصفحات"، اتّبِع الخطوات التالية:

  1. على صفحتك، افتح "أدوات مطوري البرامج"، ثم انتقِل إلى التطبيق > خدمات الخلفية > التخزين المؤقت للصفحات.

  2. انقر على اختبار ميزة "التخزين المؤقت للصفحات" ينقلك Chrome تلقائيًا إلى chrome://terms/ ويعود إلى صفحتك. بدلاً من ذلك، يمكنك النقر على زر الرجوع وإعادة التوجيه في المتصفح.

إذا لم تكن صفحتك مؤهَّلة لاستخدام ميزة "التخزين المؤقت للصفحات"، ستعرض لك علامة التبويب التخزين المؤقت للصفحات قائمة بالمشاكل. ضمن قابلة للتنفيذ، يمكنك معرفة ما إذا كنت تستخدم unload:

تم استخدام أداة اختبار ميزة "التخزين المؤقت للصفحات" في "أدوات مطوري البرامج في Chrome" تبيّن استخدام معالِج لإلغاء التحميل.

Reporting API

يمكن استخدام Reporting API جنبًا إلى جنب مع سياسة الأذونات للقراءة فقط بهدف رصد استخدام unload من مستخدمي موقعك الإلكتروني.

لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة استخدام واجهة برمجة التطبيقات Reporting API للعثور على عمليات التحميل.

واجهة برمجة تطبيقات Bfcache notRestoredReasons

تعرض السمة notRestoredReasons، التي تمت إضافتها إلى الصف PerformanceNavigationTiming، معلومات عمّا إذا تم حظر استخدام المستندات bfcache أثناء التنقّل، وسبب ذلك. يمكنك العثور على تعليمات الاستخدام هنا. في ما يلي مثال على الشكل الذي يبدو عليه تحذير كائن الاستجابة الخاص بمستمع unload حالي:

{
   blocked: true,
   children: [],
   id: "",
   name: "",
   reasons: [ "Internal Error", "Unload handler" ],
   src: "",
   url: "a.com"
}

التحكّم في إمكانية الوصول إلى "unload"

سيوقِف متصفِّح Chrome نهائيًا حدث "unload" تدريجيًا. في الوقت الحالي، يمكنك استخدام أدوات مختلفة للتحكّم في هذا السلوك والاستعداد لعملية الإيقاف النهائي القادمة. ضَع في اعتبارك أنّه يجب عدم الاعتماد على هذه الأساليب على المدى الطويل، كما يجب التخطيط للتحوّل إلى البدائل بدلاً من ذلك في أقرب وقت ممكن.

تتيح لك الخيارات التالية تفعيل معالِجات "unload" أو إيقافها لاختبار كيفية عمل موقعك الإلكتروني بدونها، ما يتيح لك الاستعداد لعملية الإيقاف النهائي القادمة. تتوفّر أنواع مختلفة من السياسات:

  • سياسة الأذونات: واجهة برمجة تطبيقات خاصة بالنظام الأساسي تتيح لمالكي المواقع الإلكترونية التحكّم في إمكانية الوصول إلى الميزات على مستوى موقع إلكتروني أو على مستوى صفحة فردية، وذلك من خلال استخدام عناوين HTTP.
  • سياسات المؤسسة: أدوات لمشرفي تكنولوجيا المعلومات لضبط Chrome لمؤسستهم أو نشاطهم التجاري. ويمكن ضبطها من خلال لوحة مشرف، مثل وحدة تحكُّم المشرف في Google.
  • علامات Chrome: تتيح هذه الميزة للمطوّر الفردي تغيير إعداد إيقاف unload لاختبار التأثير على المواقع الإلكترونية المختلفة.

سياسة الأذونات

تمت إضافة سياسة أذونات من Chrome 115 للسماح للمواقع الإلكترونية بإيقاف استخدام معالِجات unload والاستفادة فورًا من ميزة "التخزين المؤقت للصفحات" لتحسين أداء المواقع الإلكترونية. اطّلِع على هذه الأمثلة حول كيفية ضبط ذلك لموقعك الإلكتروني. يسمح هذا الإجراء للمواقع الإلكترونية بتجنّب إيقاف ميزة "unload" نهائيًا.

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

سياسة المؤسسة

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

علامات Chrome ومفاتيح تبديل سطر الأوامر

بالإضافة إلى سياسة المؤسسة، يمكنك إيقاف عملية الإيقاف النهائي لمستخدمين فرديين من خلال تبديل أسطر الأوامر وعلامات Chrome:

يؤدي ضبط chrome://flags/#deprecate-unload على enabled إلى إعادة تقديم الإعدادات التلقائية للإيقاف النهائي ومنع تفعيل معالِجات unload. وسيظل من الممكن إلغاء كل موقع إلكتروني على حدة من خلال "سياسة الأذونات"، ولكن سيستمر تنشيطه بشكل تلقائي.

ويمكن أيضًا التحكّم في هذه الإعدادات باستخدام مفاتيح التحكّم في سطر الأوامر.

مقارنة الخيارات

يلخص الجدول التالي الاستخدامات المختلفة للخيارات التي تمت مناقشتها سابقًا:

تقديم عملية الإيقاف النهائي إلى الأمام تقديم الإيقاف النهائي (مع استثناءات) منع الإيقاف النهائي لتوفير وقت لعملية نقل البيانات
سياسة الأذونات
(تسري على الصفحات/المواقع الإلكترونية)
نعم نعم نعم
سياسة المؤسسة
(تنطبق على الأجهزة)
لا لا نعم
علامات Chrome
(تنطبق على المستخدمين الفرديين)
نعم لا لا
مفاتيح تبديل سطر أوامر Chrome
(ينطبق على المستخدمين الفرديين)
نعم لا نعم

الخلاصة

يتم إيقاف معالِجات unload نهائيًا. وهي كانت غير موثوقة منذ فترة طويلة، ولا يمكن ضمان تنشيطها في جميع الحالات التي يتم فيها إتلاف مستند. بالإضافة إلى ذلك، لا تتوافق معالِجات unload مع bfcache.

على المواقع الإلكترونية التي تستخدم حاليًا معالِجات unload أن تستعد لهذا الإيقاف النهائي القادم عن طريق اختبار أي معالِجات unload حالية أو إزالتها أو نقلها، أو كحل أخير، تأجيل عملية الإيقاف نهائيًا إذا احتاجت إلى مزيد من الوقت.

شكر وتقدير

نشكر "كنجي باهيو" و"فيرغال دالي" و"أدريانا جارا" و"جيريمي واغنر" على المساعدة في مراجعة هذه المقالة.

صورة رئيسية من تصميم أنجا باورمان على UnLaunch