Thẻ nền có thể ảnh hưởng tiêu cực đáng kể đến hiệu suất của trình duyệt, đặc biệt là thời lượng pin. Để giảm thiểu điều này, Chrome đã đặt có nhiều hạn chế đối với các thẻ nền trong vài năm qua. Gần đây, có nhiều nỗ lực nhằm cải tiến hơn nữa, và tài liệu này cung cấp thông tin tổng quan về chính sách của Chrome. Tài liệu này tập trung vào việc mô tả các chính sách hiện tại trong Chrome 57. Bạn có thể xem chiến lược dài hạn và các kế hoạch khác trong tài liệu này.
Tối ưu hoá ứng dụng cho chế độ nền
Nhà phát triển web cần lưu ý rằng người dùng thường mở rất nhiều thẻ trong nền và có thể ảnh hưởng nghiêm trọng đến mức sử dụng điện năng cũng như thời lượng pin. Bạn nên hạn chế tối đa việc chạy ở chế độ nền, trừ phi việc này là hoàn toàn cần thiết để mang lại trải nghiệm cụ thể cho người dùng. Chiến lược phát hành đĩa đơn API Chế độ hiển thị trang nên dùng để phát hiện khi nào trang được chạy trong nền và tạm ngưng mọi công việc không cần thiết như cập nhật hình ảnh.
Đối với một số trang web, cách tối ưu hoá đơn giản này có thể giảm mức sử dụng CPU tới 75%:
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
Chính sách
requestAnimationFrame()
Theo tài liệu, Chrome không gọi requestAnimationFrame()
khi một trang đang chạy ở chế độ nền.
Hành vi này đã xảy ra từ năm 2011.
Căn chỉnh đồng hồ hẹn giờ ở chế độ nền
Kể từ Chrome 11, mỗi bộ hẹn giờ độc lập sẽ chạy không quá một lần mỗi giây. Chrome chạy các bộ hẹn giờ này theo lô một lần mỗi giây, đảm bảo số lần đánh thức quy trình được giữ ở mức tối thiểu. Các trang phát âm thanh được coi là người dùng dễ nhìn thấy và được miễn bộ tính giờ trong nền điều tiết. Quá trình miễn trừ sẽ kéo dài vài giây sau khi âm thanh ngừng phát để cho phép để đưa bản âm thanh tiếp theo vào hàng đợi.
Xin lưu ý rằng âm thanh được coi là âm thanh khi và chỉ khi Chrome hiển thị biểu tượng âm thanh. Luồng âm thanh im lặng không được miễn trừ.
Điều tiết bộ hẹn giờ ở chế độ nền dựa trên ngân sách
Giao diện trong Chrome 57, điều tiết bộ tính giờ dựa trên ngân sách là một phần mở rộng khác của cơ chế căn chỉnh bộ tính giờ, đặt ra thêm giới hạn đối với mức sử dụng CPU của bộ tính giờ trong nền. Mã này hoạt động như sau:
- Mỗi thẻ nền có một ngân sách thời gian (tính bằng giây) để chạy bộ hẹn giờ ở chế độ nền.
- Trang bị giới hạn ngân sách thời gian sau 10 giây ở chế độ nền.
- Tác vụ hẹn giờ chỉ được phép chạy khi ngân sách thời gian không âm.
- Sau khi một bộ tính giờ thực thi, thời gian chạy sẽ bị trừ vào ngân sách.
- Ngân sách liên tục được tạo lại theo thời gian (hiện được đặt ở tốc độ 0,01 giây/giây). Xin lưu ý rằng bạn có thể điều chỉnh tốc độ tạo lại ngân sách này khi Chrome thu thập thêm dữ liệu về hành vi điều tiết.
Có một số trường hợp miễn trừ tự động khỏi chế độ điều tiết này:
- Các ứng dụng phát âm thanh được coi là nền trước và không bị điều tiết.
- Các ứng dụng có kết nối theo thời gian thực (WebSocket và WebRTC) để tránh đóng các kết nối này do hết thời gian chờ. Quy tắc bộ tính giờ chạy một lần mỗi giây vẫn là được áp dụng trong các trường hợp này.
Xin lưu ý rằng cơ chế này sử dụng thời gian thực tế, chứ không phải thời gian CPU. Đây là cách ước tính phù hợp về thời gian của CPU và các hình phạt chặn luồng chính cho một trong một khoảng thời gian dài.
Cuối cùng, hãy nhớ rằng nếu bạn đang sử dụng các tác vụ dài trong nền, ứng dụng của bạn
có thể bị điều tiết trong một khoảng thời gian rất dài (tối đa 100 lần thời gian thực hiện nhiệm vụ của bạn).
Chia công việc thành các phần có thời lượng 50 mili giây trở xuống cho mỗi
nguyên tắc về hiệu suất
đồng thời sử dụng trình nghe visibilityChange
để tránh thực hiện các thao tác không cần thiết trong nền.
Chọn không tham gia
Chrome cung cấp cờ --disable-background-timer-throttling
cho các trường hợp sử dụng như
chạy các bộ kiểm thử cũng như các công cụ tính toán nặng nề khác do người dùng phê duyệt.