علامات التبويب في الخلفية في Chrome 57

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

تحسين تطبيق للعمل في الخلفية

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

في بعض المواقع الإلكترونية، يمكن أن يؤدي هذا التحسين البسيط إلى تقليل استخدام وحدة المعالجة المركزية بنسبة تصل إلى %75:

var doVisualUpdates = true;

document.addEventListener('visibilitychange', function(){
    doVisualUpdates = !document.hidden;
});

function update() {
    if (!doVisualUpdates) {
    return;
    }
    doStuff();
}

السياسات

requestAnimationFrame()

وفقًا للمستندات، لا يستدعي Chrome requestAnimationFrame() عندما تكون الصفحة في الخلفية. وقد تمّ تطبيق هذا السلوك منذ عام 2011.

محاذاة الموقّت في الخلفية

منذ الإصدار 11 من Chrome، لا يتم تشغيل كل موقّت مستقل أكثر من مرة في الثانية. يشغِّل Chrome هذه الموقّتات بشكلٍ مجمّع مرة واحدة في الثانية، ما يضمن الحدّ الأدنى من عدد عمليات تنشيط العمليات. وتُعتبر الصفحات التي تشغّل محتوى صوتي مسموعًا مرئية للمستخدم ومستثناة من تقييد موقّت الخلفية. تستمر الإعفاءات لعدة ثوانٍ بعد توقّف تشغيل الصوت، ما يسمح للتطبيقات بإضافة المقطع الصوتي التالي إلى قائمة المحتوى التالي.

يُرجى العِلم أنّ الصوت يُعد مسموعًا عندما يعرض Chrome رمز الصوت فقط. لا تمنح عمليات بث الصوت بدون صوت إعفاءات.

تقييد مؤقتات الخلفية المستندة إلى الميزانية

تم طرح هذه الميزة في الإصدار 57 من Chrome، ويشكّل تقييد الموقّت المستنِد إلى الميزانية إضافة أخرى إلى آلية مواءمة الموقّت، ويفرض حدًا إضافيًا على استخدام وحدة المعالجة المركزية للموقّت في الخلفية. وتعمل هذه الميزة على النحو التالي:

  • تحتوي كل علامة تبويب في الخلفية على ميزانية زمنية (بالثواني) لتشغيل الموقّتات في الخلفية.
  • تخضع الصفحة لقيود الميزانية الزمنية بعد 10 ثوانٍ من عرضها في الخلفية.
  • لا يُسمح بتنفيذ مهمة الموقّت إلا عندما تكون الميزانية الزمنية غير سالبة.
  • بعد تنفيذ موقّت، يتم طرح وقت تشغيله من الميزانية.
  • تتم إعادة إنشاء الميزانية باستمرار مع الوقت (يتم ضبطها حاليًا على معدّل 0.01 ثانية في الثانية). يُرجى العلم أنّه يمكن تعديل معدّل إعادة إنشاء الميزانية هذا أثناء جمع Chrome لمزيد من البيانات عن سلوك التقييد.

هناك عدد من الاستثناءات التلقائية من هذا التقييد:

  • تُعتبر التطبيقات التي تشغّل الصوت تطبيقات في المقدّمة ولا يتم الحد من سرعتها.
  • التطبيقات التي تستخدم اتصالات في الوقت الفعلي (WebSockets وWebRTC)، لتجنُّب إغلاق هذه الاتصالات بسبب انتهاء المهلة لا يزال يتم تطبيق قاعدة "وقت التشغيل مرة واحدة في الثانية" في هذه الحالات.

يُرجى العِلم أنّ هذه الآلية تستخدِم الوقت الفعلي، وليس وقت وحدة المعالجة المركزية. وهي تقريبية جيدة لوقت وحدة المعالجة المركزية وتفرض عقوبة على حظر سلسلة التعليمات الرئيسية لعدة ساعات.

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

عمليات الإيقاف

يقدّم Chrome العلامة --disable-background-timer-throttling لحالات الاستخدام، مثل تشغيل مجموعات الاختبار والعمليات الحسابية الثقيلة الأخرى التي يوافق عليها المستخدم.