Thẻ nền trong Chrome 57

Thẻ nền có thể tác động tiêu cực đáng kể đến hiệu suất của trình duyệt, đặc biệt là đối với thời lượng pin. Để giảm thiểu điều này, vài năm qua, Chrome đã đặt nhiều hạn chế đối với các thẻ nền. Gần đây, chúng tôi đã nỗ lực cải tiế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 ở chế độ nền

Các nhà phát triển web nên lưu ý rằng người dùng thường mở nhiều thẻ ở chế độ nền. Điều này có thể ảnh hưởng nghiêm trọng đến mức sử dụng điện năng và thời lượng pin. Hạn chế tối đa hoạt động trong nền, trừ phi thực sự cần thiết để cung cấp một trải nghiệm người dùng cụ thể. Bạn nên sử dụng API chế độ hiển thị trang để phát hiện thời điểm trang chuyển sang 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, thao tác tối ưu hoá đơn giản này có thể làm 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 này, Chrome không gọi requestAnimationFrame() khi một trang đang chạy trong nền. Hành vi này đã diễn ra từ năm 2011.

Căn chỉnh đồng hồ hẹn giờ ở chế độ nền

Kể từ Chrome 11, mỗi bộ tính giờ độc lập chỉ chạy không quá một lần mỗi giây. Chrome sẽ chạy các bộ tính giờ này theo lô mỗi giây một lần, đả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 âm thanh được coi là người dùng nhìn thấy và được miễn điều tiết bộ tính giờ ở chế độ nền. Quá trình miễn trừ sẽ kéo dài vài giây sau khi ngừng phát âm thanh để cho phép ứng dụng thêm 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. Các luồng âm thanh im lặng không được miễn trừ.

Chế độ điều tiết đồng hồ hẹn giờ trong nền theo ngân sách

Vận chuyển trong Chrome 57, tính năng điều tiết bộ tính giờ dựa trên ngân sách là một phần mở rộng bổ sung của cơ chế căn chỉnh bộ tính giờ, đặt ra thêm giới hạn về mức sử dụng CPU của bộ tính giờ ở chế độ nền. Quy trình này hoạt động như sau:

  • Mỗi thẻ nền có một hạn mức thời gian (tính bằng giây) để chạy đồng hồ hẹn giờ trong nền.
  • Một trang sẽ bị giới hạn ngân sách thời gian sau 10 giây ở chế độ nền.
  • Tác vụ trong bộ tính giờ chỉ được phép chạy khi ngân sách thời gian không là một số âm.
  • Sau khi bộ tính giờ đã thực thi, thời gian chạy của nó sẽ được trừ vào ngân sách.
  • Ngân sách liên tụ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 vì 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:

  • Ứng dụng phát âm thanh được xem là ứng dụng ở 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 theo thời gian chờ. Quy tắc định giờ chạy một lần vẫn đượ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ế, không phải thời gian của CPU. Đây là cách ước tính gần đúng về thời gian của CPU và hình 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 ở chế độ 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 (lên tới 100 lần thời gian của tác vụ đó). Chia công việc thành các phần có thời lượng từ 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ác tác vụ không cần thiết trong 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 phức tạp khác được người dùng cho phép.