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

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

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

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

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

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

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

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

الخلفية

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

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

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

ومع ذلك، فإن حدث unload غير موثوق للغاية.

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

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

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

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

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

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

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

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

Reporting API

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

لمزيد من التفاصيل، اطّلِع على مقالة استخدام Reporting API للعثور على عمليات إلغاء التحميل.

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

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

{
   children: [],
   id: null,
   name: null,
   reasons: [
     {"reason", "unload-handler"}
   ],
   src: null,
   url: "https://www.example.com/page/"
}

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

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

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

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

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

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

شكر وتقدير

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

صورة رئيسية من قناة Anja Bauermann على Un التصميم