2014-12-20 16 views
12

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ó?

+2

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

+1

https://github.com/browserstate/history.js/commit/91a5c5bcd63cb5fc35e786de3a11218ea69e65bc – zerkms

+0

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) –

Trả lời

3

Như đã đề cập trong các nhận xét, this code was added to History.js for compatibility with Env.js.

Env.js là trình duyệt không có đầu được viết bằng JavaScript không còn được phát triển hoạt động nữa. Vì vậy, điều này chắc chắn là một trường hợp cạnh, để nói rằng ít nhất. Tôi đoán vấn đề này là do sự hạn chế của chính JavaScript.

Người dùng Lance Leonard đã chỉ ra trong các nhận xét rằng có một số possible memory leak issue in IE 10.

+2

Bạn đã thấy http: // stackoverflow chưa.com/questions/15905652/workaround-for-ie10-setinterval-memory-leak/15919452 # 15919452? –

Các vấn đề liên quan