Tôi đã nhận thấy trong một vài thư viện JavaScript sử dụng số setInterval
, thư viện sẽ liên kết trình xử lý sự kiện với sự kiện unload
của window
, để xóa tất cả khoảng thời gian đã tạo bằng cách sử dụng clearInterval
.Lý do để clearInterval trước khi dỡ cửa sổ?
Một ví dụ là History.js giữ một số "List of intervals set, to be cleared when document is unloaded".
Snippet:
// ====================================================================
// Interval record
/**
* History.intervalList
* List of intervals set, to be cleared when document is unloaded.
*/
History.intervalList = [];
/**
* History.clearAllIntervals
* Clears all setInterval instances.
*/
History.clearAllIntervals = function(){
var i, il = History.intervalList;
if (typeof il !== "undefined" && il !== null) {
for (i = 0; i < il.length; i++) {
clearInterval(il[i]);
}
History.intervalList = null;
}
};
Các event listener mà các cuộc gọi chức năng này trên các sự kiện unload
được thêm here.
Snippet:
/**
* Clear Intervals on exit to prevent memory leaks
*/
History.Adapter.bind(window,"unload",History.clearAllIntervals);
Vì vậy, câu hỏi của tôi là, tại sao một số tác giả JavaScript làm điều này? Dường như những khoảng thời gian này sẽ được xóa tự động khi các trình duyệt rời khỏi trang (tôi chưa bao giờ thấy nó làm cách khác). Có một lợi thế để làm điều này? Nó có bù đắp cho một lỗi trình duyệt nào đó không? Nếu có, lỗi nào và trình duyệt nào ảnh hưởng đến nó?
Câu hỏi thú vị nếu có lý do hợp lệ để thực hiện việc này. Tôi không nhìn thấy một mặc dù. – Jonathan
https://github.com/browserstate/history.js/commit/91a5c5bcd63cb5fc35e786de3a11218ea69e65bc – zerkms
Tại sao không liên hệ với tác giả của history.js, email của họ nằm ở cuối https://github.com/browserstate/history.js (Mặc dù nhận xét trên có vẻ như nó phải liên quan đến một số loại phụ thuộc trên Env.js) –