是否有可以觀察到的事件,類似於正在渲染視圖/模板時與數據加載相關的ember-data事件,如isLoaded/isUpdating?觀察渲染事件
我有一個進入列表的1000個元素的列表,它需要相當一段時間才能渲染(整個其他問題的主題)。我想向用戶展示渲染工作正在完成的一些跡象。
在微觀層面上還有一些事件,例如:http://emberjs.com/api/classes/Ember.View.html#event_willClearRender。我很想知道是否有任何渲染正在執行的事件。
是否有可以觀察到的事件,類似於正在渲染視圖/模板時與數據加載相關的ember-data事件,如isLoaded/isUpdating?觀察渲染事件
我有一個進入列表的1000個元素的列表,它需要相當一段時間才能渲染(整個其他問題的主題)。我想向用戶展示渲染工作正在完成的一些跡象。
在微觀層面上還有一些事件,例如:http://emberjs.com/api/classes/Ember.View.html#event_willClearRender。我很想知道是否有任何渲染正在執行的事件。
Ember.Instrumentation
提供了一種通用的方法來測試代碼,並且方便,默認情況下,Ember會在渲染東西時發出檢測事件。
Ember.subscribe
Ember.subscribe
用於爲前後設置偵聽程序 - 事件的命名空間爲句點,因此訂閱「渲染」將使您全部呈現工具調用,默認情況下它類似於「render.boundHandlebars」,「render .metamorph「,」render.view「...
這裏有一個小函數可以幫助您開始......您可以將其粘貼到控制檯中並單擊您的應用程序以查看它(或者如果您想查看從開始的所有渲染將其粘貼到代碼中的某處,以便在ember之後但在應用程序之前加載它)。
如果沒有事件傳遞給beginInstrumentation
它會默認爲render
...
beginInstrumentation = function(eventName) {
var styles;
if (eventName == null) {
eventName = "render";
}
styles = {
"render.render.metamorph": "color: #a47701;",
"render.render.boundHandlebars": "color: #0f51fe;",
"render.view": "color: #37be02;"
};
Ember.subscribe(eventName, {
before: function(name, ts, payload) {
console.group(name);
return ts;
},
after: function(name, ts, payload, b_ts) {
var elapsed, style;
style = styles[name] || "";
elapsed = (ts - b_ts).toFixed(4);
console.log("%c" + payload.object + ": " + elapsed + "ms", style);
return console.groupEnd();
}
});
};
beginInstrumentation();
繼承人鉻輸出,當我將其粘貼到TodoMVC應用,然後點擊全部/已完成/有源濾波器(應在Firefox/Firebug的工作以及)
這是一個很好的答案,也是一個很棒的示範。謝謝!我想後續的問題是:顯示/隱藏一個「微調」適當使用這種儀器?它不太喜歡它,但我可能是錯的。 – 2013-02-28 16:55:55
雅這是一個很好的問題,考慮到我甚至不能100%確定儀器是包含在Ember的生產構建包(我認爲它是,因爲它是在灰燼中)。我想這歸結於你如何在你的代碼中做事 - 它歸結爲一個具有「加載」屬性的控制器,觀察該屬性以確定加載微調器是否顯示 - 那麼你如何更新那加載屬性?你有選項..重寫View.render,如果你需要..基於任何數量的狀態轉換視圖使..重寫renderToBuffer ..儀器... – chrixian 2013-03-01 02:38:56
剛剛發現一個很好的帖子在這個話題上,檢查出來這裏:http://tobyho.com/2013/03/12/perf-testing-ember.js-views/ – 2013-03-25 03:24:55
只是要清楚,我已經表現出了類似的加載微調當數據從適配器加載。 – 2013-02-28 02:19:53