G/temizlemek gerekir buOmurga belleği sızıntısı çalışmıyor mu? yönlendirici olarak
function test() {
self.topbarView = new TopbarView();
self.topbarView.render();
GhostviewHunter.addView(self.topbarView);
}
function clean() {
console.log(GhostviewHunter.currentViews.length);
GhostviewHunter.clean();
}
setInterval(test, 1000);
setInterval(clean, 1000);
ghostviewhunter görünümleri kaldırmak yapın:
define('ghostviewHunter', [], function() {
var GhostviewHunter = function() {};
GhostviewHunter.prototype.currentViews = [];
GhostviewHunter.prototype.addView = function(view) {
this.currentViews.push(view);
}
GhostviewHunter.prototype.clean = function() {
_.each(this.currentViews, function(view) {
view.remove();
});
this.currentViews.length = 0;
}
GhostviewHunter.__instance = null;
GhostviewHunter.getInstance = function() {
if(GhostviewHunter.__instance == null) {
GhostviewHunter.__instance = new GhostviewHunter();
}
return GhostviewHunter.__instance;
}
return GhostviewHunter.getInstance();
})
Topview bir model alma olduğunu, model setInterval fonksiyonu ile her 1seconde güncellenir.
Bunu remove(); Ben uygulamayı izlerken, bellek sızıntısı çok hızlı olması yeterli olurdu.
Herhangi bir fikrin var mı?
DÜZENLEME: TOPBARVIEW
define('topbarView', [
'backbone',
'parameterManager',
'text!views/topbarView/topbarTemplate.html',
'drupalidModel',
'weatherModel',
'refreshTime',
'dateParser'
], function(Backbone, ParameterManager, TopbarTemplate, DrupalidModel, WeatherModel, RefreshTime, DateParser) {
var TopbarView = Backbone.View.extend({
el: '#topbar',
template: _.template(TopbarTemplate),
events: {},
initialize: function() {
var self = this;
_.bindAll(this, 'render', 'startDateRefresh');
this.dateParser = new DateParser();
self.startDateRefresh();
setInterval(self.startDateRefresh, RefreshTime.date);
this.initWeatherModel();
},
render: function() {
var self = this;
var data = {
picto_url : ParameterManager.get('WEATHER_RESOURCE_URL') + ParameterManager.get('WEATHER_PICTO_CODE') + ".png",
date: self.date
}
this.$el.html(this.template({data: data}));
},
initWeatherModel: function() {
var self = this;
var weather_url = ParameterManager.get('WEATHER_URL');
if(weather_url === null) {
this.drupalidModel = new DrupalidModel();
this.drupalidModel.fetch({
success: function(model, response) {
var center_id_num = model.get('center_id_num');
ParameterManager.set('DRUPAL_CENTER_ID_NUM', center_id_num);
ParameterManager.constructWeatherUrl();
self.model = new WeatherModel();
self.listenTo(self.model,'change', self.render);
self.startModelRefresh();
},
error: function() {
console.log("Failed to fetch center id!");
}
})
} else {
this.model = new WeatherModel();
self.listenTo(self.model,'change', self.render);
this.startModelRefresh();
};
},
startModelRefresh: function() {
var self = this;
this.modelRefresh = function() {
self.model.fetch();
}.bind(this);
self.modelRefresh();
setInterval(self.modelRefresh, RefreshTime.weather);
},
stopModelRefresh: function() {
var self = this;
clearInterval(self.modelRefresh);
},
startDateRefresh: function() {
var self = this;
this.date = this.dateParser.classicDate();
this.render();
}
});
return TopbarView;
})
'TopbarView' nedir? Bir [mcve] oluşturabilir misin? –
Bu, belirli aralıklarla hatalı bir yönetimden kaynaklandığını sanıyorum, ancak yanlış yaptığım şeyi net olarak anlayamıyorum –
Ikinci T J'nin bir MCVE isteği. Chrome geliştirici araçlarında, bellek kullanımını izlemek için Zaman Çizelgesi'ni kullanın ve 'topla çöp kutusuna '(genellikle çöp kutusu simgesi)' ye ve özellikle de' clean() 'işlevini çağırmadan önce ve sonra basın. Ne tür bir bellek sızıyorsa yalıtın. Bunu yayına ekle. Bellek sızıntısının Omurga yanlış kullanımından kaynaklanamayacağına, ayrıca önemsiz bir kapatma sızıntısına neden olabileceğini unutmayın. –