Tôi có trang web bắt đầu tập lệnh HTML5 SharedWorker
. Mức sử dụng bộ nhớ Chrome tăng lên mỗi khi trang này được tải lại (nhấn F5).Rò rỉ bộ nhớ trong Chrome bằng cách sử dụng Nhân viên được chia sẻ?
Tập lệnh công nhân rất đơn giản. Mỗi giây (sử dụng setInterval
) một tin nhắn được gửi đến cổng được kết nối.
Có vẻ như quy trình công nhân bị chấm dứt và khởi động lại mỗi khi tôi nhấn F5. Đây là những gì tôi mong đợi vì người lao động không thực sự được chia sẻ bởi nhiều hơn một 'tài liệu'. Tuy nhiên, tôi không thể tìm ra lý do tại sao mức sử dụng bộ nhớ tăng lên trên mỗi lần làm mới.
Có ai biết tại sao điều này xảy ra không?
Do bộ nhớ tăng lên mỗi khi trang được tải lại khiến tôi nghĩ rằng tôi không thể sử dụng công nhân được chia sẻ nào cả trong Chrome. Có ai có thể làm như vậy mà không gặp vấn đề về bộ nhớ?
CẬP NHẬT
Đây là HTML lưu trữ:
<div id="output"></div>
<script type="text/javascript" src="/scripts/jquery-1.4.4.js"></script>
<script type="text/javascript">
$(function() {
var worker = new SharedWorker("/scripts/worker.js")
worker.port.onmessage = function(e) {
$("#output").append($("<div></div>").text(e.data));
};
worker.port.start();
});
</script>
... và đây là worker.js
:
var list = [];
setInterval(function() {
for (var i = 0; i < list.length; ++i) {
list[i].postMessage("#connections = " + list.length);
}
}, 1000);
onconnect = function (event) {
list.push(event.ports[0]);
};
Các trang lưu trữ bắt đầu/kết nối với một nhân viên chia sẻ và đầu ra bất cứ điều gì nhận được từ nó.
Mã công nhân giữ một danh sách các cổng được kết nối và gửi một thông điệp tới tất cả các cổng một lần.
Đây là công cụ đơn giản. Tuy nhiên, mỗi khi trang lưu trữ được tải lại trong Chrome. Trọng tải bộ nhớ cho tab đó được tăng lên.
Sau đây cho thấy sử dụng bộ nhớ của Chrome sau một vài làm mới:
... sau khi làm mới một số chi tiết tôi đang đạt 250 MB ...
Tôi đang hết ý tưởng, nghĩ rằng đây phải là một lỗi trong Chrome. Bất cứ ai có thể cho tôi một số loại con trỏ?
UPDATE 2
Vô hiệu hóa phần mở rộng AdBlock của tôi dường như để sửa chữa các vấn đề:
Vì vậy, tôi rất vui mừng cho một thời gian ngắn nhưng nó bật ra rằng bộ nhớ vẫn bị rò rỉ. Với AdBlock bị vô hiệu hóa nó chỉ rò rỉ khá ít hơn một lần làm mới trang.
Nếu bạn khởi chạy Chrome bằng cờ '--purge-memory-button', hãy mở Trình quản lý tác vụ của Chrome và nhấp vào nút Xóa bộ nhớ, bộ nhớ của tiện ích có quay lại mức ban đầu hay không? –
@Chris Nó vẫn cồng kềnh. Đó là bộ nhớ của trang lưu trữ đang cồng kềnh. Chủ đề nền (mở rộng) không bị cồng kềnh, nó được khởi động lại (biến mất và xuất hiện lại trong trình quản lý tác vụ) trên mỗi lần làm mới. –