إضافة ميزة الجلب المسبق لـ NoState

Katie Hempenius
Katie Hempenius

مقدمة

ميزة "التحميل المُسبَق بدون حالة" هي آلية جديدة في Chrome وبديل لعملية التقديم المُسبَق المتوقّفة نهائيًا، وتُستخدَم لتوفير ميزات مثل <link rel="prerender">. مثل العرض المُسبَق، يُستخدَم هذا الأسلوب لجلب الموارد مسبقًا، ولكن على عكس العرض المُسبَق، لا يتم تنفيذ JavaScript أو عرض أي جزء من الصفحة مسبقًا. يهدف NoState Prefetch إلى استخدام ذاكرة أقل من المعالجة المسبقة، مع مواصلة تقليل أوقات تحميل الصفحة.

لا يُعدّ "التحميل المُسبَق بدون حالة" واجهة برمجة تطبيقات، بل آلية يستخدمها Chrome لتنفيذ واجهات برمجة تطبيقات ميزات مختلفة. يتم تنفيذ كلّ من Resource Hints API و عملية prefetching للصفحات من خلال شريط عناوين Chrome باستخدام NoState Prefetch. إذا كنت تستخدم الإصدار 63 من Chrome أو إصدارًا أحدث، يستخدم المتصفّح ميزة "التحميل المُسبَق بدون حالة" لميزات مثل <link rel="prerender">.

توضّح هذه المقالة آلية عمل NoStatePrefetch، والدافع لاستخدامها، وتعليمات استخدام الرسوم البيانية في Chrome لعرض إحصاءات حول استخدامها.

الحافز

كان هناك سببان رئيسيان لتقديم ميزة "التحميل المُسبَق بدون حالة":

تقليل استخدام الذاكرة

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

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

تسهيل استخدام ميزات منصة الويب الجديدة

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

التنفيذ

توضِّح الخطوات التالية آلية عمل ميزة "التحميل المُسبَق بدون حالة".

  1. تم بدء NoStatePrefetch.

    سيؤدي تلميح مورد التقديم المُسبَق (أي <link rel="prerender">) وبعض ميزات Chrome إلى بدء ميزة "التحميل المُسبَق بدون حالة" شرط استيفاء الشرطَين التاليَين: (أ) ألا يستخدم المستخدم جهازًا منخفض المستوى، و(ب) ألا يستخدم المستخدم شبكة جوّال.

  2. يتم إنشاء أداة عرض جديدة مخصّصة لميزة "التحميل المُسبَق بدون حالة".

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

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

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

  4. سيتم جلب الموارد الفرعية التي يتم جلبها باستخدام الأولوية الصافية "غير نشط".

    "أولوية الشبكة" في وضع "الخمول" هي أدنى أولوية ممكنة للشبكة في Chrome.

  5. يتم تخزين جميع الموارد التي يتم استرجاعها من خلال ميزة "التحميل المُسبَق بدون حالة" في ذاكرة التخزين المؤقت وفقًا لعناوين ذاكرة التخزين المؤقت.

    ستخزِّن ميزة "التحميل المُسبَق بدون حالة" جميع الموارد باستثناء تلك التي تحتوي على العنوان no-store Cache-Control. ستتم إعادة التحقّق من المورد قبل استخدامه إذا كان هناك عنوان استجابة Vary أوno-cache عنوان Cache-Control أو إذا مرّ أكثر من 5 دقائق على المورد.

  6. يتم إيقاف أداة التحويل بعد تحميل جميع الموارد الفرعية.

    إذا انتهت مهلة الموارد الفرعية، سيتم إنهاء عملية عرض المحتوى بعد 30 ثانية.

  7. لا يُجري المتصفّح أي تعديلات على الحالة باستثناء تعديل ملفّات تعريف الارتباط و ذاكرة التخزين المؤقت لنظام أسماء النطاقات (DNS) المحلي. من المهم الإشارة إلى ذلك لأنّه يشير إلى "NoState" في "NoState Prefetch".

    في هذه المرحلة من عملية التحميل "العادية" للصفحة، من المرجّح أن ينفّذ المتصفّح إجراءات تؤدي إلى تعديل حالة المتصفّح: على سبيل المثال، تنفيذ JavaScript أو تغيير sessionStorage أو localStorage أو تشغيل الموسيقى أو الفيديوهات أو استخدام History API أو توجيه المستخدم. إنّ التعديلات الوحيدة التي تطرأ على الحالة في ميزة "التحميل المُسبَق بدون حالة" هي تعديل ذاكرة التخزين المؤقت لنظام أسماء النطاقات عند وصول الردود وتعديل ملف تخزين ملفات تعريف الارتباط إذا كانت الاستجابة تحتوي على عنوان Set-Cookie.

  8. وعندما يكون المورد مطلوبًا، يتم تحميله في نافذة المتصفّح.

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

    إذا كانت الصفحة تتضمّن مشغّل خدمات، سيتم تحميل هذه الصفحة من خلال مشغّل الخدمات مرة أخرى.

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

التأثير في "إحصاءات الويب"

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

تسجِّل نصوص برمجية الإحصاءات من جهة العميل مشاهدة صفحة على الويب عندما يتم عرض الصفحة على المستخدم. تعتمد هذه النصوص البرمجية على تنفيذ JavaScript، ولا تُنفِّذ ميزة "التحميل المُسبَق بدون حالة" أي JavaScript.

تسجِّل أدوات الإحصاءات من جهة الخادم المقاييس عند معالجة طلب معيّن. بالنسبة إلى الموارد التي يتم تحميلها من خلال ميزة "التحميل المُسبَق بدون حالة"، يمكن أن تَحدث فجوة زمنية كبيرة بين وقت معالجة الطلب ووقت استخدام العميل للاستجابة (إذا تم استخدامها على الإطلاق). منذ الإصدار 69 من Chrome، أضافت ميزة "التحميل المُسبَق بدون حالة"Purpose: Prefetch إلى جميع الطلبات لتمييزها عن التصفّح العادي.

الاطّلاع على التفاصيل

تم طرح NoStatePrefetch في كانون الأول (ديسمبر) 2017 في الإصدار 63 من Chrome. ويتم استخدامه حاليًا لإجراء ما يلي:

  • تنفيذ تلميح المورد prerender
  • جلب النتيجة الأولى في نتائج "بحث Google"
  • جلب الصفحات التي يتوقّع شريط العناوين في Chrome أن يتم الانتقال إليها بعد ذلك

يمكنك استخدام "معلومات Chrome الداخلية" لمعرفة كيفية استخدامك لميزة NoStatePrefetch.

للاطّلاع على قائمة المواقع الإلكترونية التي تم تحميلها باستخدام ميزة "التحميل المُسبَق بدون حالة"، انتقِل إلى chrome://net-internals/#prerender.

للاطّلاع على إحصاءات عن استخدام ميزة "التحميل المُسبَق بدون حالة"، انتقِل إلى chrome://histograms وابحث عن NoStatePrefetch. هناك ثلاثة مخطّطات بيانية مختلفة لميزة "التحميل المُسبَق بدون حالة"، أحدها لكل حالة استخدام من حالات استخدام ميزة "التحميل المُسبَق بدون حالة":

  • ‎“NoStatePrefetch”‎ (إحصاءات الاستخدام حسب تلميحات موارد التقديم المُسبَق)
  • ‎“gws_NoStatePrefetch” (إحصاءات عن الاستخدام من قِبل صفحة نتائج البحث من Google)
  • ‎“omnibox_NoStatePrefetch” (إحصاءات عن الاستخدام من خلال شريط عناوين Chrome)