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

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

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

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

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

var doVisualUpdates = true;

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

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

السياسات

requestAnimationFrame()

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

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

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

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

تقييد موقّت الخلفية استنادًا إلى الميزانية

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

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

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

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

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

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

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

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