Tôi đã cố gắng viết mã javascript có rò rỉ bộ nhớ để làm việc với trình thu thập thông tin trong Chrome. Tuy nhiên, có vẻ như profiler không hiển thị những gì nó nên được.Rò rỉ bộ nhớ của trình duyệt Chrome Profiler Javascript
Dưới đây là mã của tôi:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="start_button">Start</button>
<button id="destroy_button">Destroy</button>
<script type="text/javascript" charset="utf-8">
var Leaker = function(){};
Leaker.prototype = {
init:function(){
this._interval = null;
this.start();
},
start: function(){
var self = this;
this._interval = setInterval(function(){ self.onInterval(); }, 100);
},
onInterval: function(){ console.log("Interval"); }
};
$("#start_button").click(function(){
if(leak !== null && leak !== undefined){
return;
}
leak = new Leaker();
leak.init();
});
$("#destroy_button").click(function(){
leak = null;
});
var leak;
</script>
Bạn có thể nhìn thấy khi tôi bấm vào nút bắt đầu một leaker đối tượng mới được tạo ra. Và khi tôi nhấp vào hủy, đối tượng được đặt thành rỗng (LƯU Ý: Nhưng nó sẽ không bị thu gom rác vì setInterval sẽ vẫn hoạt động).
Vấn đề: Tuy nhiên, khi tôi sử dụng Google Chrome Profiler, nó không hiển thị cho tôi bất kỳ tham chiếu nào tới dụ Leaker của tôi sau khi tôi nhấp vào hủy (nhưng nó sẽ hiển thị cho tôi tham chiếu như vậy, như tôi đã nói ở trên, đóng cửa từ setInterval vẫn đang giữ nó).
Profiler trước khi nhấp vào nút phá hủy
Profiler sau khi nhấp vào nút phá hủy (bạn có thể xem phần Tôi không thể tìm thấy leaker dụ nữa, trong khi đó nó sẽ có mặt ở đó).
Và đây giao diện điều khiển, các setInterval vẫn còn trong hành động eventhough profiler cho chúng ta thấy không có trường hợp leaker hơn.
Am tôi thiếu một cái gì đó trên đường rác thu công trình hoặc các hồ sơ Chrome?