تاريخ النشر: 20 يوليو 2018
مقدمة
NoState Prefetch هي آلية جديدة في Chrome تشكّل بديلاً لعملية العرض المسبق المتوقّفة نهائيًا، وتُستخدم لتشغيل ميزات مثل <link rel="prerender">. وكما هو الحال مع العرض المسبق، يتم جلب الموارد مسبقًا، ولكن على عكس العرض المسبق، لا يتم تنفيذ JavaScript أو عرض أي جزء من الصفحة مسبقًا. تهدف ميزة NoState
Prefetch إلى استخدام ذاكرة أقل من ميزة العرض المسبق، مع مواصلة تقليل أوقات تحميل الصفحات.
NoState Prefetch ليست واجهة برمجة تطبيقات، بل هي آلية يستخدمها Chrome لتنفيذ واجهات برمجة تطبيقات وميزات مختلفة. يتم تنفيذ كل من واجهة برمجة التطبيقات Resource Hints API وعملية الجلب المسبق للصفحات من خلال شريط عناوين Chrome باستخدام NoState Prefetch. إذا كنت تستخدم الإصدار 63 من Chrome أو إصدارًا أحدث، يكون متصفّحك قد بدأ في استخدام ميزة NoState Prefetch لميزات مثل <link rel="prerender">.
توضّح هذه المقالة طريقة عمل NoStatePrefetch، والأسباب التي دفعتنا إلى طرحها، كما تقدّم تعليمات حول كيفية استخدام الرسوم البيانية المدرّجة في Chrome لعرض إحصاءات حول استخدامها.
الحافز
كان هناك سببان رئيسيان لإطلاق ميزة NoState Prefetch:
تقليل استخدام الذاكرة
لا يستخدم NoState Prefetch سوى حوالي 45 ميغابايت من الذاكرة. يُعدّ الحفاظ على أداة فحص التحميل المُسبَق هو التكلفة الأساسية للذاكرة في ميزة NoState Prefetch، وتبقى هذه التكلفة ثابتة نسبيًا في جميع حالات الاستخدام المختلفة. لا تؤثر زيادة حجم عمليات الجلب أو عددها بشكل كبير في مقدار الذاكرة التي تستهلكها ميزة NoState Prefetch.
في المقابل، يستهلك العرض المسبق عادةً 100 ميغابايت من الذاكرة، ويتم تحديد الحد الأقصى لاستهلاك الذاكرة عند 150 ميغابايت. ويجعل هذا الاستهلاك المرتفع للذاكرة التطبيق غير مناسب للأجهزة المنخفضة المواصفات (أي التي تحتوي على ذاكرة وصول عشوائي بسعة 512 ميغابايت أو أقل). نتيجةً لذلك، لا ينفّذ Chrome عملية العرض المسبق على الأجهزة المنخفضة المواصفات، بل سيجري عملية الاتصال المسبق بدلاً من ذلك.
تسهيل إتاحة ميزات جديدة على منصة الويب
عند إجراء عملية العرض المسبق، يجب عدم تنفيذ أي إجراءات موجّهة للمستخدم (مثل تشغيل الموسيقى أو الفيديو) أو إجراءات تتضمّن حفظ الحالة (مثل تغيير الجلسة أو مساحة التخزين المحلية). ومع ذلك، قد يكون من الصعب والمعقّد منع حدوث هذه الإجراءات أثناء عرض الصفحة. لا يجلب NoState Prefetch الموارد مسبقًا فحسب، بل لا ينفّذ الرمز أو يعرض الصفحة. ويسهّل ذلك منع حدوث إجراءات موجّهة للمستخدمين وتتضمّن حالة.
التنفيذ
توضّح الخطوات التالية طريقة عمل ميزة "الجلب المسبق بدون حالة".
يتم بدء عملية NoStatePrefetch.
سيؤدي توفير تلميح بشأن الموارد التي سيتم عرضها مسبقًا (أي
<link rel="prerender">) وبعض ميزات Chrome إلى تفعيل ميزة NoState Prefetch، وذلك في حال استيفاء الشرطَين التاليَين: أ) ألا يستخدم المستخدم جهازًا منخفض المواصفات، ب) ألا يستخدم المستخدم شبكة خلوية.يتم إنشاء أداة عرض جديدة ومخصّصة لميزة NoState Prefetch.
في Chrome، المُعرِض هو عملية مسؤولة عن أخذ مستند HTML وتحليله وإنشاء شجرة العرض الخاصة به وعرض النتيجة على الشاشة. تحتوي كل علامة تبويب في Chrome، بالإضافة إلى كل عملية NoState Prefetch، على أداة عرض خاصة بها لتوفير العزل. يساعد ذلك في الحدّ من تأثير حدوث خطأ (مثل تعطُّل علامة تبويب)، كما يمنع الرمز الضار من الوصول إلى علامات التبويب الأخرى أو الأجزاء الأخرى من النظام.
يتم جلب المورد الذي يتم تحميله باستخدام NoState Prefetch. بعد ذلك، يفحص HTMLPreloadScanner هذا المورد للعثور على أي موارد فرعية يجب جلبها. إذا كان لدى المورد الرئيسي أو أي من موارده الفرعية عامل خدمة مسجَّل، ستتم معالجة هذه الطلبات من خلال عامل الخدمة المناسب.
لا يتيح NoState Prefetch سوى طريقة GET HTTP، ولن يجلب أي موارد فرعية تتطلّب استخدام طرق HTTP أخرى. بالإضافة إلى ذلك، لن يتم جلب أي موارد تتطلّب إجراءات من المستخدم (مثل النوافذ المنبثقة الخاصة بالمصادقة أو شهادة عميل طبقة المقابس الآمنة أو عمليات الإلغاء اليدوية).
سيتم جلب الموارد الفرعية بأولوية شبكة "خاملة".
إنّ أولوية الشبكة "غير نشط" هي أدنى أولوية ممكنة للشبكة في Chrome.
يتم تخزين جميع الموارد التي يتم استردادها من خلال ميزة NoState Prefetch مؤقتًا وفقًا لعناوين التخزين المؤقت الخاصة بها.
ستخزّن ميزة NoState Prefetch جميع الموارد مؤقتًا باستثناء تلك التي تتضمّن العنوان
no-storeCache-Control. ستتم إعادة التحقّق من صحة المورد قبل استخدامه إذا كان هناك عنوان استجابةVaryأو عنوانno-cacheCache-Control أو إذا كان عمر المورد أكثر من 5 دقائق.يتم إيقاف أداة العرض بعد تحميل جميع الموارد الفرعية.
إذا انتهت مهلة الموارد الفرعية، سيتم إنهاء عملية العرض بعد 30 ثانية.
لا يُجري المتصفّح أي تعديلات على الحالة باستثناء تعديل متجر ملفات تعريف الارتباط وذاكرة التخزين المؤقت المحلية لنظام أسماء النطاقات. من المهم الإشارة إلى ذلك لأنّ هذا هو "NoState" في "NoState Prefetch".
في هذه المرحلة من عملية تحميل الصفحة "العادية"، من المحتمل أن ينفّذ المتصفّح إجراءات تؤدي إلى تعديل حالة المتصفّح، مثل تنفيذ JavaScript أو تعديل
sessionStorageأوlocalStorageأو تشغيل الموسيقى أو الفيديوهات أو استخدام History API أو مطالبة المستخدم. التعديلات الوحيدة التي تحدث في NoState Prefetch هي تعديل ذاكرة التخزين المؤقت لنظام أسماء النطاقات عند وصول الردود وتعديل متجر ملفات تعريف الارتباط إذا كان الرد يتضمّن العنوانSet-Cookie.عند الحاجة إلى المورد، يتم تحميله في نافذة المتصفّح.
ومع ذلك، على عكس الصفحة المعروضة مُسبقًا، لن تكون الصفحة مرئية على الفور، بل سيظل على المتصفح عرضها. لن يعيد المتصفّح استخدام أداة العرض التي استُخدمت في ميزة NoState Prefetch، بل سيستخدم أداة عرض جديدة. يؤدي عدم عرض الصفحة مسبقًا إلى تقليل استهلاك الذاكرة في NoStatePrefetch، ولكنّه يقلّل أيضًا من التأثير المحتمل الذي يمكن أن يحدثه في أوقات تحميل الصفحة.
إذا كانت الصفحة تتضمّن مشغّل خدمات، سيتم تحميل الصفحة من خلال مشغّل الخدمات مرة أخرى.
إذا لم تنتهِ ميزة NoState Prefetch من جلب الموارد الفرعية قبل الحاجة إلى الصفحة، سيواصل المتصفّح عملية تحميل الصفحة من حيث توقّفت ميزة NoState Prefetch. وسيظل المتصفّح بحاجة إلى جلب الموارد، ولكن ليس بالقدر الذي كان سيحتاجه إذا لم يتم بدء ميزة NoState Prefetch.
التأثير على "إحصاءات الويب"
تسجّل أدوات إحصاءات الويب الصفحات التي يتم تحميلها باستخدام NoState Prefetch في أوقات مختلفة قليلاً، وذلك استنادًا إلى ما إذا كانت الأداة تجمع البيانات من جهة العميل أو جهة الخادم.
تسجّل نصوص برامج الإحصاء من جهة العميل مشاهدة صفحة عندما يتم عرض الصفحة للمستخدم. تعتمد هذه البرامج النصية على تنفيذ JavaScript، ولا تنفّذ ميزة NoState Prefetch أي JavaScript.
تسجّل أدوات الإحصاء من جهة الخادم المقاييس عند معالجة الطلب. بالنسبة إلى الموارد التي يتم تحميلها من خلال NoState Prefetch، قد يكون هناك فارق زمني كبير بين وقت معالجة الطلب ووقت استخدام العميل للاستجابة (إذا تم استخدامها على الإطلاق). منذ الإصدار 69 من Chrome، يضيف NoState Prefetch
العنوان Purpose: Prefetch إلى جميع الطلبات من أجل تمييزها عن
التصفّح العادي.
الاطّلاع على التفاصيل
تم إطلاق ميزة NoStatePrefetch في ديسمبر 2017 في الإصدار 63 من Chrome. يتم استخدامها حاليًا في ما يلي:
- تنفيذ تلميح المورد
prerender - استرداد النتيجة الأولى في نتائج "بحث Google"
- جلب الصفحات التي يتوقّع شريط العناوين في Chrome أنّه من المرجّح الانتقال إليها بعد ذلك
يمكنك استخدام Chrome Internals لمعرفة كيفية استخدامك لميزة NoStatePrefetch.
للاطّلاع على قائمة المواقع الإلكترونية التي تم تحميلها باستخدام ميزة NoState Prefetch، انتقِل إلى chrome://net-internals/#prerender.
لعرض إحصاءات حول استخدام ميزة NoState Prefetch، انتقِل إلى chrome://histograms وابحث عن NoStatePrefetch. هناك ثلاثة رسوم بيانية مختلفة لميزة NoState Prefetch، رسم بياني لكل حالة استخدام لميزة NoState Prefetch:
- NoStatePrefetch (إحصاءات الاستخدام حسب تلميحات الموارد للعرض المسبق)
- "gws_NoStatePrefetch" (إحصاءات حول الاستخدام من خلال صفحة نتائج البحث على Google)
- "omnibox_NoStatePrefetch" (إحصاءات الاستخدام من خلال شريط عناوين Chrome)