Thẻ nền trong Chrome 57

Các 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 vấn đề này, Chrome đã đặt nhiều quy định hạn chế đối với các thẻ chạy trong nền trong vài năm qua. Gần đây, chúng tôi đã nỗ lực cải thiện thêm 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 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

Các nhà phát triển web cần lưu ý rằng người dùng thường mở nhiều thẻ trong nền và điều này có thể ảnh hưởng nghiêm trọng đến mức sử dụng năng lượng và 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. Bạn nên sử dụng API Chế độ hiển thị của trang để phát hiện thời điểm trang chạy ở chế độ 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, phương thức tối ưu hoá đơn giản này có thể giúp giảm tới 75% mức sử dụng CPU:

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 đã được áp dụng 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 nhìn thấy và được miễn trừ khỏi chế độ điều tiết bộ tính giờ trong nền. Thời gian miễn trừ kéo dài vài giây sau khi âm thanh ngừng phát để cho phép các ứng dụng xếp hàng bản âm thanh tiếp theo.

Xin lưu ý rằng âm thanh được coi là có thể nghe được khi và chỉ khi Chrome hiển thị biểu tượng âm thanh. Luồng âm thanh không có âm thanh sẽ không được miễn trừ.

Điều tiết bộ tính giờ trong nền theo ngân sách

Vận chuyể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ờ, giúp tăng thêm mức sử dụng CPU của bộ tính giờ trong nền. Phương thức 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.
  • Một trang sẽ phải tuân theo các giới hạn về ngân sách thời gian sau 10 giây chạ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 được miễn trừ tự động khỏi biện pháp đ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 (WebSockets và WebRTC) để tránh đóng các kết nối này khi hết thời gian chờ. Quy tắc chạy bộ hẹn giờ một lần mỗi giây vẫn được áp dụng trong những 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à giá trị ước chừng gần chính xác về thời gian CPU và phạt việc chặn luồng chính trong 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, thì ứ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 lượng tác vụ của bạn). Phân chia công việc thành các phần có thời lượng 50 mili giây trở xuống theo nguyên tắc về hiệu suất và sử dụng trình nghe visibilityChange để tránh thực hiện công việc không cần thiết ở chế độ nền.

Chọn không sử dụng

Chrome cung cấp cờ --disable-background-timer-throttling cho các trường hợp sử dụng như chạy bộ kiểm thử và các phép tính nặng khác do người dùng cho phép.