我正在研究JavaScript框架中變化檢測機制之間的基準研究。我正在比較虛擬DOM和KVO。對於KVO示例,我選擇了Ember,並且我開發了一個帶有推文列表的小演示應用程序。Ember JS性能問題
參照dev talk 2014 here據我所知 - KVO在顯示大量數據時(我認爲即使所有元素都改變了),在更改一個列表元素時應該更快一些,但對於應用程序我使用這些不同的實現(React,Ember)開發了Ember應用程序,當顯示1000個時,它顯着(很多次)比React應用程序在更改一個列表項時慢。
這是我開發的應用程序的fiddle。推文按照收藏夾進行排序,並且必須在模型中每次更改收藏夾時進行排序。如果你看一下小提琴,你必須按下SHOW LIST列表和按鈕來改變推文才能顯示(需要幾秒鐘顯示)。
App.AppModel = Ember.Object.extend({
topTweets: function() {
return this.get('tweets').sort(function(a, b) {
return b.favorites - a.favorites;
})/*.slice(0,10)*/;
}.property('[email protected]')
});
App.appModel = App.AppModel.create({
tweets: renderTweets()
});
這是偵聽收藏夾變化的模型。
changeOneTweet:function(){
var iPosition = _.random(0, numTweets - 1);
var iFavorites = _.random(0, 4000);
App.appModel.get('tweets').set(iPosition + '.favorites', iFavorites);
},
這是改變一個「tweet」的功能。
我希望Ember的專家能告訴我我做錯了什麼。
您使用調試版本的emberjs,其中包含調試代碼。使用prod版進行性能測試。也知道,現在的燼有一個完全不同的渲染模型:新的微光引擎。 – Lux
謝謝你的信息! – gfels
它有微光引擎的事實意味着Ember不再是KVO例子的選擇嗎?當我讀[這裏](https://auth0.com/blog/face-off-virtual-dom-vs-incremental-dom-vs-glimmer/) - Glimmer的工作類似於虛擬DOM? – gfels