سيتم إيقاف حدث unload
تدريجيًا عن طريق تغيير الإعداد التلقائي تدريجيًا بحيث يتوقّف تنشيط معالِجات unload
على الصفحات ما لم توافق الصفحة بشكل صريح على إعادة تفعيلها.
المخطط الزمني للإيقاف
لاحظنا أنّه من المحتمل أن يخضع سلوك إلغاء التحميل لتغييرات اعتبارًا من شهر كانون الثاني (يناير) 2019، عندما أعلنّا عن هدفنا إلى استخدام ميزة "التخزين المؤقت للصفحات". بالتوازي مع أعمال التنفيذ، أجرينا تواصلاً كبيرًا، ما أدّى إلى انخفاض كبير في استخدام إلغاء التحميل. لاستكمال هذه التوعية، بدأنا أيضًا في تقديم طرق لاختبار تأثير وقف إلغاء التحميل من Chrome 115:
- في الإصدارات التجريبية من خلال Permission-Policy API لإلغاء التحميل في Chrome 115 (تموز/يوليو 2023)
- الاختبار على الجهاز من خلال تفعيل علامة في الإصدار 117 من Chrome (أيلول/سبتمبر 2023)
بعد مرحلتَي التواصل والتجربة هذه، نتوقّع طرح الإيقاف النهائي بشكلٍ مبدئي:
- هي مرحلة ذات نطاق محدَّد يتم فيها إيقاف العمل تدريجيًا لإلغاء التحميل لأهم 50 موقعًا إلكترونيًا شائعًا (المرجع حتى وقت كتابة هذا التقرير).
- اعتبارًا من% 1 من المستخدمين بدءًا من الإصدار 120 من Chrome (نهاية تشرين الثاني (نوفمبر) 2023).
- الانتهاء من% 100 من المستخدمين بنهاية الربع الثالث من عام 2024
- بالإضافة إلى ذلك، ونعتزم اعتبارًا من الربع الثالث من عام 2024 بدء مرحلة عامة ستتوقف فيها إزالة التحميل تدريجيًا على أي مواقع إلكترونية، بدءًا من% 1 من المستخدمين وانتهاءً بنسبة% 100 من المستخدمين بحلول نهاية الربع الأول من عام 2025.
تجدر الإشارة إلى أنّنا نوفّر أيضًا قائمة بخيارات الإيقاف في حال لم يكن هذا المخطط الزمني للإيقاف المبدئي يوفّر وقتًا كافيًا لإيقاف تحميل المحتوى. نهدف إلى استخدام هذا الإيقاف النهائي المبدئي لتحديد المخطط الزمني للمرحلة الأخيرة (الإيقاف النهائي نهائيًا لإلغاء التحميل) التي ستتم خلالها إزالة عمليات الإيقاف هذه أو الحدّ من استخدامها.
![المخطط الزمني لإيقاف عملية إلغاء التحميل نهائيًا](https://developer.chrome.com/static/docs/web-platform/deprecating-unload/image/unload-deprecation-timeline.png?authuser=5&hl=ar)
الخلفية
تم تصميم 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
على الصفحات. يتيح ذلك للمواقع الإلكترونية معرفة ما إذا كانت تستخدم هذا الحدث، سواء باستخدام رمزه الخاص أو من خلال المكتبات، ما قد يؤثّر بالإيقاف النهائي المرتقب.
أدوات مطوّري البرامج في Chrome
تتضمّن أدوات مطوري البرامج في Chrome تدقيق back-forward-cache
لمساعدتك في تحديد المشاكل التي قد تمنع صفحتك من استخدام ميزة "التخزين المؤقت للصفحات"، بما في ذلك استخدام معالج unload
.
لاختبار ميزة "التخزين المؤقت للصفحات"، اتّبِع الخطوات التالية:
على صفحتك، افتح "أدوات مطوري البرامج"، ثم انتقِل إلى التطبيق > خدمات الخلفية > التخزين المؤقت للصفحات.
انقر على اختبار ميزة "التخزين المؤقت للصفحات" ينقلك Chrome تلقائيًا إلى
chrome://terms/
ويعود إلى صفحتك. بدلاً من ذلك، يمكنك النقر على زر الرجوع وإعادة التوجيه في المتصفح.
إذا لم تكن صفحتك مؤهَّلة لاستخدام ميزة "التخزين المؤقت للصفحات"، ستعرض لك علامة التبويب التخزين المؤقت للصفحات قائمة بالمشاكل. ضمن قابلة للتنفيذ، يمكنك معرفة ما إذا كنت تستخدم unload
:
![تم استخدام أداة اختبار ميزة "التخزين المؤقت للصفحات" في "أدوات مطوري البرامج في Chrome" تبيّن استخدام معالِج لإلغاء التحميل.](https://developer.chrome.com/static/docs/web-platform/deprecating-unload/image/chrome-devtools-forward-8640f1ef515a1.png?authuser=5&hl=ar)
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
لاختبار التأثير على المواقع الإلكترونية المختلفة.
سياسة الأذونات
تمت إضافة سياسة أذونات من 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