我想弄清楚使用KnockoutJS的最佳方式,我需要您的建議。Knockout JS和大型模型
我的視圖模型包含一組「文檔」,每個文檔都有一組「值」。 每個「文件」呈現爲使用以下模板一個單獨的表:
<div data-bind="foreach: Documents">
<table data-bind="foreach: Values">
<tr data-bind="foreach: $data">
<td data-bind="attr: {colspan: Colspan}">
<label data-bind="text: Label"></label>
<br />
<span data-bind="html: Value"></span>
</td>
</tr>
</table>
</div>
一切正常,除了當視圖模型是大的罰款。例如,如果視圖模型的大小大約爲1兆字節(並且包含80個文檔,每個文檔有60個值),那麼在我的機器上渲染需要兩分鐘以上。
我想知道如果有顯著提高性能......還是會更快地放棄淘汰賽,只是建立在一個服務器端的HTML,只是把它推到瀏覽器的方式...
渲染「僅」300kb視圖模型需要接近30秒。
「文件」是由用戶定義的,所以甚至有2兆字節的情況(我不知道他們爲什麼這樣做)。
有沒有人有JavaScript中的大視圖模型的經驗?
謝謝。那麼根據你的回答,玩我的視圖模型的結構將不會真的有幫助嗎?我的意思是,如果我做兩階段綁定:先綁定一個空表,然後綁定該表以便用數據填充它等等? – 2012-03-20 21:35:09
另外從您的經驗來看,嘗試其他MVVM框架或模板引擎(如backbone,jQuery.tmpl等)還是性能幾乎相同?換句話說,它是一個普通的JavaScript/Browser/Dom問題,還是僅僅是Knockout會變慢?當然,我會自己嘗試至少一個其他框架,但嘗試所有這些框架需要很長時間,所以我要求有經驗的人給我一個建議:) – 2012-03-20 21:39:05
@Alexey Raga - 只要您在客戶端進行綁定您的表現將受到瀏覽器的限制。如果有人使用IE8(緩慢的JavaScript引擎),而且模型非常龐大,那麼需要花費數分鐘才能呈現它。如果jQuery.tmpl速度提高50%,那麼對於你來說,你認爲「顯着提高性能」你沒有給出任何限制嗎?... – 2012-03-21 11:30:45