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

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

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

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

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

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

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

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

الخلفية

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

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

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

ومع ذلك، فإنّ حدث unload غير موثوق به على الإطلاق.

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

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

يعتقد فريق Chrome أنّ استخدام نموذج الأجهزة الجوّالة الذي يمنح الأولوية لذاكرة التخزين المؤقت bfcache على 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 نهائيًا.

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

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

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

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

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

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

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

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

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

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

الخاتمة

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

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

الشكر والتقدير

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

الصورة الرئيسية تقدّمها Anja Bauermann على Unsplash