برگههای پسزمینه میتوانند تأثیر منفی چشمگیری بر عملکرد مرورگر، بهویژه عمر باتری داشته باشند. برای کاهش این مشکل، کروم در چندین سال گذشته محدودیتهای مختلفی را روی برگههای پسزمینه اعمال کرده است. اخیراً تلاشهایی برای بهبود بیشتر صورت گرفته است و این سند نمای کلی از خطمشی Chrome را ارائه میدهد. این سند بر توصیف خطمشیهای فعلی در Chrome 57 تمرکز دارد. استراتژی بلندمدت و برنامههای بیشتر را میتوانید در این سند پیدا کنید.
بهینه سازی برنامه برای پس زمینه
توسعه دهندگان وب باید بدانند که کاربران اغلب تب های زیادی را در پس زمینه باز می کنند و می تواند تأثیر جدی بر مصرف انرژی و عمر باتری داشته باشد. کار در پسزمینه باید به حداقل برسد، مگر اینکه ارائه یک تجربه کاربری خاص کاملاً ضروری باشد. API visibility Page باید برای تشخیص اینکه چه زمانی صفحه پسزمینه است و همه کارهای غیرضروری مانند بهروزرسانیهای بصری را به حالت تعلیق درآورد.
برای برخی از سایتها ، این بهینهسازی ساده میتواند استفاده از CPU را تا ۷۵٪ کاهش دهد:
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
سیاست ها
requestAnimationFrame()
بر اساس مستندات ، Chrome هنگامی که صفحه در پسزمینه است requestAnimationFrame()
را فراخوانی نمیکند. این رفتار از سال 2011 برقرار بوده است.
تراز کردن تایمر پس زمینه
از Chrome 11 ، هر تایمر مستقل بیش از یک بار در ثانیه اجرا نمی شود. کروم این تایمرها را به صورت دستهای یکبار در ثانیه اجرا میکند و اطمینان حاصل میکند که تعداد بیداریهای فرآیند به حداقل میرسد. صفحاتی که صدای قابل شنیدن را پخش میکنند برای کاربر قابل مشاهده هستند و از فشار دادن تایمر پسزمینه معاف هستند. پس از توقف پخش صدا، معافیت چند ثانیه طول میکشد تا برنامهها بتوانند آهنگ صوتی بعدی را در صف قرار دهند.
توجه داشته باشید که زمانی و فقط زمانی که Chrome نماد صدا را نشان میدهد، صدا قابل شنیدن است. جریانهای صوتی بیصدا معافیتهایی را اعطا نمیکنند.
تنظیم تایمر پسزمینه مبتنی بر بودجه
حمل و نقل در Chrome 57 ، کاهش فشار تایمر مبتنی بر بودجه، گسترش بیشتری از مکانیسم هم ترازی تایمر است، که محدودیت بیشتری برای استفاده از تایمر پسزمینه CPU ایجاد میکند. به شرح زیر عمل می کند:
- هر تب پسزمینه دارای بودجه زمانی (بر حسب ثانیه) برای اجرای تایمر در پسزمینه است.
- یک صفحه پس از 10 ثانیه در پسزمینه در معرض محدودیتهای بودجه زمانی قرار میگیرد.
- یک کار تایمر فقط زمانی مجاز است که بودجه زمانی غیرمنفی باشد.
- پس از اجرای یک تایمر، زمان اجرای آن از بودجه کم می شود.
- بودجه به طور مداوم با زمان بازسازی می شود (در حال حاضر روی نرخ 0.01 ثانیه در ثانیه تنظیم شده است). توجه داشته باشید که این نرخ بازسازی بودجه را میتوان تغییر داد زیرا کروم دادههای بیشتری را در مورد رفتار کاهش فشار جمعآوری میکند.
تعدادی از معافیت های خودکار از این دریچه گاز وجود دارد:
- برنامههایی که صدا را پخش میکنند پیشزمینه در نظر گرفته میشوند و متوقف نمیشوند.
- برنامه های کاربردی با اتصالات بلادرنگ (WebSockets و WebRTC)، برای جلوگیری از بسته شدن این اتصالات با مهلت زمانی. قانون run-timers-one-a-second همچنان در این موارد اعمال می شود.
توجه داشته باشید که این مکانیسم او از زمان دیوار استفاده می کند، نه از زمان CPU. این یک تقریب خوب از زمان CPU است و مسدود شدن رشته اصلی را برای مدت طولانی جریمه می کند.
در نهایت، به یاد داشته باشید که اگر از کارهای طولانی در پسزمینه استفاده میکنید، برنامه شما میتواند برای مدت زمان بسیار طولانی (تا 100 برابر مدت زمان کار شما) متوقف شود. طبق دستورالعملهای اجرا، کار خود را به قطعات 50 میلیثانیه یا کمتر تقسیم کنید و از visibilityChange
شنونده استفاده کنید تا از انجام کارهای غیر ضروری در پسزمینه اجتناب کنید.
انصراف
Chrome پرچم --disable-background-timer-throttling
flag را برای موارد استفاده مانند اجرای مجموعه های آزمایشی و سایر محاسبات سنگین مورد تایید کاربر ارائه می دهد.