私はknockout.jsに大きく依存している大きくて複雑なページを持っています。パフォーマンスが問題になり始めていますが、コールスタックを調べてボトルネックを見つけようとすることは、実際の課題です。
別の質問( Knockout.js-foreach and with )で、受け入れられた回答にコメントがあることに気付きました:
...そしてオーバーヘッドのために高いパフォーマンスが必要な場合は
with
を使用しないことをお勧めします...
ステートメントが真実であると仮定すると、これは知っておくと本当に便利なものであり、そのようなパフォーマンスのヒントのソースを見つけていません。
したがって、私の質問は次のとおりです。
クラシックパフォーマンスチューニングに入る前に、アプリケーションのパフォーマンスを支援するために適用できる一般的なガイドライン/トップのヒントはありますか?
私が考えているヒントを1つの回答でレイアウトするのは多すぎると思います。
このトピックに関する一連のブログ投稿を開始しました。最初の投稿は here です。
この投稿では、if/with
作業(テンプレートとして子をコピーし、バインディングがトリガーされるたびにテンプレートを使用して再レンダリングします)。これらのバインディングが予想よりも頻繁に再レンダリングを引き起こす可能性がある方法を説明します。
この回答は今後の投稿で更新します。
私が見つけた最大の落とし穴の1つ(および他の場所で説明されていない)は、ノックアウトがeveryバインディングを再評価することですエレメントのanyバインディングが変更されるたびにエレメントが変更されます。
これは通常大したことではありませんが、高価になる傾向があるバインディング(例:template
)の場合、重大なパフォーマンスの問題が発生する可能性があります。
コンテンツ/子(template
、foreach
など)をレンダリングするバインディングを仮想要素にアタッチします( コンテナーレス制御フロー構文 を使用)。要素のバインディングのみ。
マッピングは、このテストに従って、jquertマップとノックアウトマップの違いを確認するのにも役立つと思います knockout-map-vs-jquery-map
ObservableArraysの使用を開始すると、マッピングが重要になります