Cách các trang web lãng phí CPU và pin
(h.43z.one)-
Phát hiện vấn đề: Tác giả phát hiện loa trên chiếc laptop mới thỉnh thoảng phát ra tiếng nhiễu trắng. Chỉ có thể nghe thấy trong phòng yên tĩnh.
-
Phân tích nguyên nhân: Sau khi kiểm tra trạng thái audio sink của PulseAudio, tác giả phát hiện rằng ở trạng thái SUSPENDED thì không có tiếng, nhưng ở trạng thái IDLE hoặc RUNNING thì xuất hiện nhiễu trắng.
-
Vấn đề của Firefox: Firefox được hiển thị là chương trình đang sử dụng audio sink, dù không có tab nào đang mở phát âm thanh nhưng vẫn xảy ra hiện tượng nhiễu trắng.
-
Nguyên nhân: Âm thanh thông báo của outlook.office.com được xác định là nguyên nhân của vấn đề. Mỗi khi nhận email, nhiễu trắng bắt đầu xuất hiện và chỉ dừng lại khi tải lại tab hoặc khởi động lại Firefox.
-
Tiêu hao pin: Khi nhiễu trắng xuất hiện, mức sử dụng CPU và pin cũng tăng lên.
-
Thử giải pháp: Tác giả đã cố giải quyết bằng cách tắt thông báo email, nhưng các trang web khác cũng gặp vấn đề tương tự.
-
Xử lý âm thanh trong HTML/JavaScript: Có thẻ `` và WebAudio API là các cách để phát âm thanh. Nguyên nhân vấn đề được xác định là phát sinh khi tạo
AudioContext. -
Khác biệt giữa Firefox và Chrome: Chrome tự động dừng việc lãng phí pin/CPU sau một khoảng thời gian nhất định, còn Firefox thì không.
-
Giải pháp: Tác giả đã phát triển một tiện ích mở rộng tự động dừng
AudioContextvà khởi động lại khi cần. Dù không hoàn hảo nhưng đủ hiệu quả.
1 bình luận
Ý kiến trên Hacker News
Vấn đề này đã được lên kế hoạch và là quan trọng. Sẽ sớm được khắc phục. Xin lỗi vì vẫn chưa sửa do vấn đề ưu tiên. Cá nhân tôi xem đây là ưu tiên cao
Một website mở audio context rồi không phát gì có lẽ đang thực hiện phát hiện bot
Tò mò không biết vấn đề tương tự có xảy ra trên thiết bị Android không
Tiếng ồn trắng này đã khiến tôi phát điên từ lâu nhưng tôi không thể lần ra được
Khi đầu ra ở trạng thái nhàn rỗi, tín hiệu SPDIF kỹ thuật số sẽ mất đồng bộ. Khi phát lại bắt đầu, cần thời gian để đồng bộ lại nên sẽ mất vài giây đầu của âm thanh. Tôi đã viết một chương trình giữ đầu ra luôn mở mà không đổ dữ liệu lên line để tránh cho đầu ra rơi vào trạng thái nhàn rỗi
Điều này có thể giải thích vấn đề đôi khi Firefox trên Android khiến điện thoại tiêu thụ 10GB dữ liệu mỗi ngày. Các trang tin phát âm thanh, liên tục tải lại quảng cáo, và tab không chuyển sang chế độ tiết kiệm điện vì âm thanh. Tôi đã phải chuyển sang Chrome vì chi phí dữ liệu lặp đi lặp lại
Trong Chromium, đoạn mã xử lý việc ngắt này nằm ở đây
Tôi cũng phát hiện vấn đề tương tự trên macOS (điện năng bị tiêu hao do âm thanh, không có tiếng ồn trắng)
coreaudiodtrên máy Mac của tôi đang dùng 20% CPU dù không phát gì cả. Tôi định chuyển sang trình duyệt khác cho đến khi lỗi này được sửa, nhưng tôi không muốn từ bỏ FirefoxVấn đề này đã sửa trang đầu của https://www.dr.dk/
Tôi không rõ
audioContextđược triển khai theo cách nào, nhưng nó rất thông minh và động. Phát âm báo cũng giống như dùng D3 để vẽ SVG. Tôi tự hỏi liệu có serviceWorker hook nào trong một API hiệu quả hơn để đăng ký các tác vụ lặp đơn giản như trình xử lý thông báo hay không