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個の値を含む)の場合、レンダリングは自分のマシンで2分以上かかります。パフォーマンスを大幅に向上させるために...またはノックアウトをあきらめ、ちょうどサーバ側でHTMLを構築し、ちょうどそれをブラウザにプッシュするより速くなります方法があるかどう
私は...疑問に思って
レンダリング「ちょうど」300kbのビューモデルは30秒近くかかります。
「ドキュメント」はユーザーによって定義されているため、> 2メガバイトのシナリオもあります(私はなぜそれを行うのかわかりません)。
JavaScriptで大規模なビューモデルを使用している人はいますか?
ありがとうございました。私のビューモデルがどのように構造化されているのかは、あなたの答えによれば実際には役に立たないでしょうか?私は、2フェーズのバインディングを行う場合、最初に空のテーブルをバインドしてから、そのテーブルをバインドしてデータなどを挿入しますか? –
また、あなたの経験から、他のMVVMフレームワークやテンプレートエンジン(バックボーン、jQuery.tmplなど)を試してみるのは理にかなっていますか?言い換えれば、それは一般的なJavaScript/Browser/Domの問題ですか、それとも緩やかなKnockoutですか?もちろん、私は自分で少なくとも1つの他のフレームワークを試してみるでしょうが、それらのすべてを試すには多くの時間がかかりますので、経験豊かな人から助言を求めています:) –
@Alexey Raga - あなたのパフォーマンスはブラウザによって制限されます。誰かがIE8(遅いJavaScriptエンジン)を使用していてモデルが巨大であれば、レンダリングするのに数分かかるでしょう。 jQuery.tmplが50%高速であれば、パフォーマンスを大幅に向上させると考えていたことはありませんか? –