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

Katie Hempenius
Katie Hempenius

مقدمة

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

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

توضّح هذه المقالة طريقة عمل NoStatePrefetch ودوافع تقديمه وتعليمات لاستخدام المدرّجات التكرارية في Chrome لعرض إحصاءات حول استخدامه.

الحافز

كان هناك دافعان أساسيان لتقديم ميزة الجلب المسبق NoState:

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

لا يستخدم الجلب المسبق NoState سوى 45 ميجابايت تقريبًا من الذاكرة. يُعد الاحتفاظ بماسح ضوئي للتحميل المسبق هو المصاريف الأساسية للذاكرة لعملية الجلب المسبق لميزة NoState، وتظل هذه التكلفة ثابتة نسبيًا في حالات الاستخدام المختلفة. لا تؤثر زيادة حجم أو حجم عمليات الجلب بشكل كبير في مقدار الذاكرة التي تستهلكها ميزة الجلب المسبق NoState.

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

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

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

التنفيذ

توضح الخطوات التالية كيفية عمل ميزة الجلب المسبق NoState.

  1. تم تشغيل NoStatePrefetch.

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

  2. تم إنشاء عارض جديد مخصّص لعملية الجلب المسبق من NoState.

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

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

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

  4. بالنسبة إلى الموارد الفرعية التي يتم استرجاعها، سيتم جلبها حسب أولوية "غير نشِطة":

    إن "الأولوية الصافية" "غير نشِطة" هي أدنى أولوية صافية ممكنة في Chrome.

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

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

  6. يتم إنهاء العارض بعد تحميل كل الموارد الفرعية.

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

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

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

  8. عند الحاجة، يتم تحميل المورد في نافذة المتصفّح.

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

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

    إذا لم تنتهِ ميزة الجلب المسبق من NoState من جلب الموارد الفرعية بحلول الوقت الذي تكون فيه الصفحة مطلوبة، سيواصل المتصفح عملية تحميل الصفحة من حيث تم إيقاف ميزة "الجلب المسبق لميزة NoState". لا يزال المتصفح بحاجة إلى جلب الموارد، ولكن ليس العدد المطلوب في حال عدم بدء الجلب المسبق لميزة "NoState".

التأثير في تحليلات الويب

يتم تسجيل الصفحات التي يتم تحميلها باستخدام ميزة الجلب المسبق NoState بواسطة أدوات تحليل بيانات الإنترنت في أوقات مختلفة قليلاً بناءً على ما إذا كانت الأداة تجمع البيانات من جهة العميل أو من جهة الخادم.

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

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

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

تم شحن NoStatePrefetch في كانون الأول (ديسمبر) 2017 في Chrome 63. تُستخدَم حاليًا للأغراض التالية:

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

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

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

لعرض إحصاءات حول استخدام ميزة الجلب المسبق لميزة NoState، انتقِل إلى chrome://histograms وابحث عن "NoStatePrefetch". هناك ثلاثة مدرجات تكرارية مختلفة للجلب المسبق NoState، وهناك واحد لكل حالة استخدام من حالات الجلب المسبق بدون حالة:

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