تاريخ النشر: 23 يناير 2026
سيطلق Chrome تجربة أصل جديدة من الإصدار 144 من Chrome لإضافة العرض المسبق إلى أن يتم تنفيذ النص البرمجي إلى Speculation Rules API. تتيح هذه التجربة الأصلية للمواقع الإلكترونية تجربة الميزة الجديدة مع مستخدمين حقيقيين. والهدف من ذلك هو إجراء اختبار ميداني للميزة وتقديم ملاحظات إلى فريق Chrome للمساعدة في تطويرها وتحديد ما إذا كان يجب إضافتها إلى منصة الويب.
ما هي المشكلة التي تهدف هذه الميزة إلى حلّها؟
تتيح واجهة برمجة التطبيقات Speculation Rules API بدء تحميل الصفحات قبل أن ينتقل المستخدمون إليها فعليًا. ويمكن أن يؤدي ذلك إلى تحسين عمليات تحميل الصفحات المستقبلية من خلال إكمال بعض أو كل العمل مسبقًا. حتى الآن، كانت تتيح نوعَين من التخمينات: الجلب المُسبَق والعرض المُسبَق.
لا يجلب التخزين المؤقت المسبق سوى مستند HTML. يتم الحصول على هذا المورد الأول المهم مسبقًا، ما يؤدي إلى تحسين الأداء عند الانتقال إلى عنوان URL. لا يتم تحميل أي موارد فرعية (مثل CSS أو JavaScript أو الصور)، ولا يتم تنفيذ JavaScript، وبالتالي قد يظل هناك عمل كبير على المتصفّح تنفيذه عند تحميل الصفحات.
تتضمّن عملية العرض المسبق الكثير من المزايا. ويجلب الموارد الفرعية، ويبدأ في عرض الصفحة وتنفيذ JavaScript، كما لو تم فتح الصفحة في علامة تبويب مخفية في الخلفية. عندما ينقر المستخدم على الرابط، يمكنه التنقّل على الفور إذا كان المتصفّح قد أكمل كل العمل اللازم لعرض الصفحة.
قد يكون استخدام خيار العرض المسبق أفضل بكثير من ناحية الأداء، ولكنّه يتطلّب تكلفة تنفيذ إضافية، بالإضافة إلى تكاليف موارد إضافية. وإذا لم يتم أخذ ذلك في الاعتبار بعناية، يمكن أن يؤدي أيضًا إلى آثار جانبية غير متوقّعة عند إجراء عملية العرض المسبق لصفحة بالكامل قبل أن ينتقل إليها المستخدم فعليًا. على سبيل المثال، قد يتم تفعيل الإحصاءات قبل أن يتنقّل المستخدم، ما يؤدي إلى تحريف الإحصاءات، إذا لم يأخذ مقدّم خدمة الإحصاءات التخمينات في الاعتبار.
يجب أيضًا أن تحرص المواقع الإلكترونية التي تستخدم العرض المسبق على عدم عرض صفحة قديمة للمستخدم. على سبيل المثال، إذا كنت تتوقّع تحميل صفحة على موقع إلكتروني للتجارة الإلكترونية، ثم أضفت منتجًا إلى سلّة التسوّق، ثم حمّلت الصفحة التي توقّعت تحميلها سابقًا، قد ترى كمية السلّة القديمة إذا لم يتّخذ الموقع الإلكتروني احتياطات إضافية لضمان تعديلها.
تحدث هذه التعقيدات أيضًا في عملية الجلب المسبق إذا تمت بعض إدارة الحالة من جهة الخادم، ولكنها غالبًا ما تكون مشكلة أكبر في عملية العرض المسبق. قد يكون استخدام ميزة "العرض المسبق" أكثر تعقيدًا على المواقع الإلكترونية الأكثر تعقيدًا.
مع ذلك، علمنا من المطوّرين أنّهم يحقّقون بالفعل تحسينات في الأداء من خلال جلب الصفحة مسبقًا، ويريدون الاستفادة بشكل أكبر من قواعد التوقّع. وهنا يأتي دور ميزة "العرض المسبق إلى أن يتم تحميل النص البرمجي".
ما هي ميزة "العرض المسبق حتى يتم تحميل النص البرمجي"؟
Prerender until script هي تقنية جديدة تجمع بين ميزتَي "الجلب المسبق" و"العرض المسبق". يتم جلب مستند HTML مسبقًا (كما تفعل عملية الجلب المسبق)، ثم يبدأ عرض الصفحة، بما في ذلك جلب جميع الموارد الفرعية (كما تفعل عملية العرض المسبق). مع ذلك، من المهم أن يتجنّب المتصفّح تنفيذ عناصر <script> (لكلّ من النصوص البرمجية المضمّنة ونصوص src البرمجية). عندما يصادف علامة <script> حظر، يوقف المحلّل مؤقتًا وينتظر إلى أن ينتقل المستخدم إلى الصفحة قبل المتابعة. في الوقت نفسه، يمكن لماسح التحميل المُسبَق مواصلة العمل واسترداد الموارد الفرعية التي تحتاج إليها الصفحة، وبالتالي ستكون جاهزة للاستخدام عندما تتمكّن الصفحة من مواصلة التحميل.
من خلال حجب أي عناصر <script> للحظر، يمكن تجنُّب الكثير من تعقيدات التنفيذ. في الوقت نفسه، من خلال بدء عملية العرض وجلب الموارد الفرعية، يمكن تحقيق فائدة كبيرة مقارنةً بجلب البيانات المسبق، وربما تكون الفائدة مماثلة تقريبًا للفائدة التي يمكن تحقيقها من خلال العرض المسبق الكامل.
في أفضل سيناريو (عندما لا تتضمّن الصفحة أي نصوص برمجية على الإطلاق)، سيتم العرض المسبق للصفحة بأكملها باستخدام هذا الخيار. أو عندما تحتوي الصفحة على عناصر نص برمجي فقط في التذييل أو نصوص برمجية فقط تتضمّن السمتَين async أو defer، سيتم العرض المسبق للصفحة بالكامل بدون JavaScript. حتى في أسوأ السيناريوهات (حيث يتوفّر نص برمجي حاصِر في <head>)، من المفترض أن يؤدي بدء عرض الصفحة، وخاصةً جلب الموارد الفرعية مسبقًا، إلى تحسين سرعة تحميل الصفحة بشكل كبير.
كيفية استخدام ميزة "العرض المسبق حتى تنفيذ النص البرمجي"؟
أولاً، فعِّل الميزة، ثم نفِّذ العرض المسبق إلى أن يتم استخدام النص البرمجي بالطريقة نفسها التي يتم بها استخدام خيارات واجهة 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>
يمكن إجراء العرض المسبق إلى أن يصبح النص البرمجي متاحًا للاستخدام مع خيارات 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 مع هذا التكرار بدون أي مشاكل وسينفّذ القاعدة الأنسب لكل إعداد من إعدادات الحماس.
بدلاً من ذلك، يمكنك استخدامها مع مستويات مختلفة من الحماس، لإجراء جلب مسبق بحماس، ثم الترقية إلى العرض المسبق إلى أن يتم عرض النص البرمجي مع المزيد من الإشارات كما تم اقتراحه سابقًا مع الجلب المسبق/العرض المسبق:
<script type="speculationrules">
{
"prefetch": [{
"where": { "href_matches": "/*" },
"eagerness": "eager"
}],
"prerender_until_script": [{
"where": { "href_matches": "/*" },
"eagerness": "moderate"
}]
}
</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 إلى حين تفعيلها، ولكنّها لن تمنع المحلّل من مواصلة معالجة بقية الصفحة. يتم تنزيل النصوص البرمجية ولكن لا يتم تنفيذها إلى أن يتم الانتقال إلى الصفحة.
كيفية تفعيل العرض المُسبَق إلى أن يتم تنفيذ النص البرمجي
"العرض المسبق إلى أن يتم تحميل النص البرمجي" هو خيار جديد نعمل عليه، وهو عرضة للتغيير، لذا لا يمكن استخدامه بدون تفعيله أولاً.
يمكن تفعيلها محليًا للمطوّرين باستخدام ميزة Chrome التجريبية chrome://flags/#prerender-until-script أو باستخدام ميزة سطر الأوامر --enable-features=PrerenderUntilScript.
تتوفّر الآن أيضًا ميزة "العرض المسبق إلى أن يتم تحميل البرنامج النصي" كتجربة أصلية من الإصدار 114 من Chrome. تسمح التجارب الأصلية لمالكي المواقع الإلكترونية بتفعيل ميزة على مواقعهم الإلكترونية ليستخدمها المستخدمون الفعليون بدون الحاجة إلى تفعيلها يدويًا. يتيح ذلك قياس تأثير الميزة على المستخدمين الفعليين لضمان عملها على النحو المتوقّع.
جرِّبها وشارِك ملاحظاتك
نحن متحمّسون جدًا بشأن هذه الإضافة المقترَحة إلى Speculation Rules API ونشجّع مالكي المواقع الإلكترونية على تجربتها.
يمكنك مشاركة ملاحظاتك حول الاقتراح في مستودع GitHub. لإرسال ملاحظات حول طريقة تنفيذ Chrome لهذه الميزة، يمكنك الإبلاغ عن خطأ في Chromium.