العرض المسبق لقواعد التوقّع حتى انتهاء الفترة التجريبية الخاصة بمصدر النص البرمجي

تاريخ النشر: 23 يناير 2026

سيطلق Chrome مرحلة تجربة وتقييم جديدة من الإصدار 144 من Chrome لإضافة prerender until script إلى Speculation Rules API. تتيح مرحلة التجربة والتقييم هذه للمواقع الإلكترونية تجربة الإضافة الجديدة مع مستخدمين حقيقيين. والهدف من ذلك هو إجراء اختبار ميداني للميزة وتقديم ملاحظات إلى فريق Chrome للمساعدة في تطويرها وتحديد ما إذا كان يجب إضافتها إلى منصة الويب.

ما المشكلة التي يسعى هذا التغيير إلى حلّها؟

تتيح واجهة برمجة التطبيقات Speculation Rules API بدء تحميل الصفحات قبل أن ينتقل المستخدمون إليها فعليًا. ويمكن أن يؤدي ذلك إلى تحسين عمليات تحميل الصفحات المستقبلية من خلال إكمال بعض أو كل العمل مسبقًا. وحتى الآن، كانت تتيح نوعَين من التخمينات: الجلب المُسبَق والعرض المُسبَق.

لا يجلب الجلب المسبق سوى مستند HTML. يؤدي ذلك إلى الحصول على المورد الأول المهم في وقت مبكر، ما يؤدي إلى تحسين الأداء عند الانتقال إلى عنوان URL. ولا يتم تحميل أي موارد فرعية (مثل CSS أو JavaScript أو الصور)، ولا يتم تنفيذ JavaScript، وبالتالي قد يظل على المتصفّح تنفيذ الكثير من العمل عند تحميل الصفحات.

تتضمّن عملية العرض المسبق مزايا أكثر بكثير. ويجلب الموارد الفرعية، ويبدأ في عرض الصفحة وتنفيذ JavaScript، كما لو تم فتح الصفحة في علامة تبويب مخفية في الخلفية. عندما ينقر المستخدم على الرابط، يمكنه التنقّل على الفور إذا كان المتصفّح قد أكمل كل العمل اللازم لعرض الصفحة.

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

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

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

مع ذلك، علمنا من المطوّرين أنّهم يحقّقون بالفعل تحسينات في الأداء من خلال جلب الصفحة مسبقًا، ويريدون الاستفادة بشكل أكبر من قواعد التوقّع. وهنا يأتي دور prerender until script.

ما المقصود بـ prerender until script؟

prerender until script هي تقنية جديدة تجمع بين ميزتَي "الجلب المُسبَق" و"العرض المُسبَق". يتم جلب مستند HTML مسبقًا (كما تفعل عملية الجلب المسبق)، ثم يبدأ عرض الصفحة، بما في ذلك جلب جميع الموارد الفرعية (كما تفعل عملية العرض المسبق). مع ذلك، سيحرص المتصفّح على تجنُّب تنفيذ عناصر <script> (لكلّ من النصوص البرمجية المضمّنة ونصوص src البرمجية). وعندما يصادف علامة <script> حظر، يتم إيقاف المحلّل مؤقتًا والانتظار إلى أن ينتقل المستخدم إلى الصفحة قبل المتابعة. في هذه الأثناء، يمكن لماسح التحميل المُسبَق مواصلة العمل وجلب الموارد الفرعية التي تحتاجها الصفحة لتكون جاهزة للاستخدام عندما تتمكّن الصفحة من مواصلة التحميل.

من خلال حجب أي عناصر <script> تحظر الإعلانات، يمكن تجنُّب الكثير من تعقيدات التنفيذ. في الوقت نفسه، من خلال بدء عملية العرض وجلب الموارد الفرعية، يمكن تحقيق فائدة كبيرة مقارنةً بجلب البيانات المسبق، وربما تكون الفائدة مماثلة تقريبًا للفائدة التي يمكن تحقيقها من خلال العرض المسبق الكامل.

في أفضل سيناريو (عندما لا تتضمّن الصفحة أي نصوص برمجية على الإطلاق)، سيعرض هذا الخيار الصفحة بأكملها مسبقًا. أو عندما تحتوي الصفحة على عناصر نص برمجي فقط في التذييل أو نصوص برمجية فقط تتضمّن السمتَين async أو defer، سيتم العرض المسبق للصفحة بالكامل بدون JavaScript. حتى في أسوأ السيناريوهات (عندما يكون هناك نص برمجي حاصِر في <head>)، من المفترض أن يؤدي بدء عرض الصفحة، وخاصةً جلب الموارد الفرعية مسبقًا، إلى تحسين سرعة تحميل الصفحة بشكل كبير.

كيفية استخدام prerender until script

أولاً، فعِّل الميزة، ثم استخدِم prerender until script بالطريقة نفسها التي تستخدم بها خيارات Speculation Rules API الأخرى مع مفتاح prerender_until_script جديد (يُرجى ملاحظة الشرطات السفلية لجعلها اسم مفتاح JSON صالحًا).

يمكن استخدام هذه الميزة مع قواعد القوائم الخاصة بعناوين URL الثابتة:

<script type="speculationrules">
{
  "prerender_until_script": [{
    "urls": ["next.html", "next2.html"]
  }]
}
</script>

يمكن أيضًا استخدامها مع قواعد المستندات حيث تتوفّر عناوين URL التي يمكن التخمين بشأنها كروابط على الصفحة:

<script type="speculationrules">
{
  "prerender_until_script": [{
    "where": { "href_matches": "/*" }
  }]
}
</script>

يمكن بعد ذلك استخدام prerender until script مع خيارات Speculation Rules API المعتادة، بما في ذلك قيم الحماس المختلفة.

بما أنّه لن يتم تنفيذ JavaScript، لن تتم قراءة document.prerendering ولا الحدث prerenderingchange. ومع ذلك، سيكون وقت activationStart غير صفري.

يوضّح المثال التالي كيفية نشر المثال السابق مع توفير خيار احتياطي لجلب البيانات مسبقًا للمتصفحات التي لا تتوافق مع prerender_until_script:

<script type="speculationrules">
{
  "prerender_until_script": [{
    "where": { "href_matches": "/*" }
  }],
  "prefetch": [{
    "where": { "href_matches": "/*" }
  }]
}
</script>

سيتعامل Chrome مع هذا التكرار بدون أي مشاكل وسينفّذ القاعدة الأنسب لكل إعداد من إعدادات الحماس.

بدلاً من ذلك، يمكنك استخدامها مع مستويات مختلفة من الحماس، لإجراء جلب مسبق بحماس، ثم الترقية إلى prerender until script باستخدام المزيد من الإشارات كما تم اقتراحه سابقًا مع الجلب المسبق/العرض المسبق:

<script type="speculationrules">
{
  "prefetch": [{
    "where": { "href_matches": "/*" },
    "eagerness": "eager"
  }],
  "prerender_until_script": [{
    "where": { "href_matches": "/*" },
    "eagerness": "moderate"
  }]
}
</script>

يُرجى العِلم أنّه لا يمكنك ترقية prerender until script إلى عملية عرض مُسبَق كاملة بهذه الطريقة، ولكن يُرجى إعلامنا إذا كان هذا النمط يهمّك أن يتيحه Chrome من خلال تمييز هذا الخلل بنجمة.

هل تم إيقاف جميع نصوص JavaScript مؤقتًا؟

لا، لا تؤدي سوى عناصر <script> إلى إيقاف المحلّل مؤقتًا. وهذا يعني أنّ معالِجات النصوص البرمجية المضمّنة (مثل onload) أو عناوين URL الخاصة بعلامة javascript: لن تتسبّب في إيقاف التنفيذ مؤقتًا وقد يتم تنفيذها.

على سبيل المثال، يمكن أن يسجّل هذا الرمز Hero image is now loaded في وحدة التحكّم قبل الانتقال إلى الصفحة:

<img src="hero.jpg"
     onload="console.log('Hero image is now loaded!')"
     alt="Example Photo">

في المقابل، إذا تمت إضافة متتبِّع الأحداث باستخدام <script>، لن يتم تسجيل Hero image is now loaded في وحدة التحكّم إلا بعد تفعيل الصفحة:

<img src="hero.jpg" id="hero-image" alt="Example Photo">
<script>
  const heroImage = document.querySelector('#hero-image');
  if (heroImage.complete) {
        console.log('Hero image is now loaded');
  } else {
    heroImage.addEventListener('load',
      (event) => {
        console.log('Hero image is now loaded');
      }
    );
  }
</script>

قد يبدو هذا الإجراء غير منطقي، ولكن في العديد من الحالات (مثل المثال السابق!)، من الأفضل اتّخاذ الإجراء على الفور، وقد يؤدي تأخيره إلى حدوث المزيد من المضاعفات غير المتوقّعة.

بالإضافة إلى ذلك، تتطلّب معظم الأحداث المضمّنة إجراءً من المستخدم (على سبيل المثال، onclick، onhover)، وبالتالي لن يتم تنفيذها إلى أن يتمكّن المستخدم من التفاعل مع الصفحة.

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

<script>...</script>
<img src="hero.jpg"
     onload="console.log('Hero image is now loaded!')"
     alt="Example Photo">

ويكون ذلك مهمًا بشكل خاص لمعالجات النصوص البرمجية المضمّنة التي تستخدم رمزًا برمجيًا تم تحديده سابقًا، وسيستمر عملها على النحو المتوقّع:

<script>
imageLoadFunction() = {
   ...
}
</script>
<img src="hero.jpg" onload="imageLoadFunction" alt="Example Photo">

ماذا عن النصوص البرمجية التي تتضمّن السمتَين async وdefer؟

يتم تأخير النصوص البرمجية التي تتضمّن السمتَين async وdefer إلى حين تفعيلها، ولكنّها لن تمنع المحلّل من مواصلة معالجة بقية الصفحة. يتم تنزيل النصوص البرمجية ولكن لا يتم تنفيذها إلى أن يتم الانتقال إلى الصفحة.

كيف يمكن تفعيل prerender until script؟

prerender until script هو خيار جديد نعمل عليه، وهو عرضة للتغيير، لذا لا يمكن استخدامه بدون تفعيله أولاً.

يمكن تفعيلها محليًا للمطوّرين باستخدام ميزة تجريبية في Chrome chrome://flags/#prerender-until-script أو باستخدام علامة سطر الأوامر --enable-features=PrerenderUntilScript.

تتوفّر prerender until script الآن أيضًا كمرحلة تجربة وتقييم بدءًا من الإصدار 144 من Chrome. تتيح التجارب الأصلية لمالكي المواقع الإلكترونية تفعيل ميزة على مواقعهم الإلكترونية ليستخدمها المستخدمون الفعليون بدون الحاجة إلى تفعيلها يدويًا. ويتيح ذلك قياس تأثير الميزة على المستخدمين الفعليين لضمان عملها على النحو المتوقّع.

جرِّبها وشارِك ملاحظاتك

نحن متحمّسون جدًا بشأن هذه الإضافة المقترَحة إلى Speculation Rules API ونشجّع مالكي المواقع الإلكترونية على تجربتها.

يمكنك مشاركة ملاحظاتك حول الاقتراح في مستودع GitHub. لإرسال ملاحظات حول طريقة تنفيذ Chrome لهذه الميزة، يمكنك الإبلاغ عن خطأ في Chromium.