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