0

私は現在、Django/Python バックエンドでかなり大規模な分析プログラムを開発しており、jQuery を使用しています。

すべての統計が " " の概念に基づいているとしましょうPerson。概要統計を見た後、誰かが個人を開いてPersonその統計を見たいと思うかもしれません。

現在、私は AJAX リクエストをサーバーに送り返します。Django はその人を取得し、DOM ツリー全体をレンダリングして返します。jQuery は返されたものを受け取り、<div>それをドキュメントの DOM ツリーに、開いている他のユーザーと一緒に追加します。

したがってPerson、すべての要素が同じ要素を持つ独自の div を持ち、それらの情報だけが含まれます。あなたが見ている現在の人はdisplay:block;display:none;他の人です。より詳細な情報を取得するためにサーバーに戻る必要がある要素 (より詳細な情報を表示するためのボタンなど) は、Django のテンプレート システムでコーディングされ、getMoreInformation('myUUID');. また、必要に応じて AJAX が適切な人物の情報を見つけて変更できるように、要素 ID で UUID を頻繁に使用していることにも注意してください。

私は最近 Knockout.js を発見しましたが、このような状況で使用する方が良いかどうか疑問に思っており、速度などに懸念があります。

Knockout.js は、個々の DOM 要素ではなく、バックエンドのデータと Javascript での表現方法 (モデルからモデル) との間の 1 対 1 の関係を提供するため、「正しいこと」のようです。関数に渡される ID。言うまでもなく、DOM ツリー内の要素の量が大幅に削減されます。

ただし、私の主な対象ユーザーは IE8 であり、Knockout.js にパフォーマンス上の問題があることを懸念しています。現在、調査対象の人々に関連する div を非表示にして表示するだけですが、Knockout.js はすべての を調べ、data-bindJavascript を使用してそれらのコンテンツを置き換える必要があります。

このような状況で Knockout.js を使用する場合のパフォーマンス上の懸念は何ですか? それとも、問題にならないほど最小限のものでしょうか? ベンチマークを見つけるのに苦労していますが、Knockout.js に移行したときに UI が遅くなった経験をした人はいますか? (DOM 要素が少ない + Knockout.js と、「現実世界」のアプリケーションで Knockout.js を使用しない DOM 要素が多いことは、私がここで探しているもののようなものです。)

4

2 に答える 2

1

これにはノックアウトが最適だと思います。可視バインディングを使用して設定display: noneできるので、悪くはないことを覚えておいてください。また、バインディングは要素に直接アクセスでき、DOM にクエリを実行する必要がないため、パフォーマンスに関しては、jQuery と同等かそれ以上になる可能性があります。

ただし、サーバーが html を返す場合は、かなりの作業が必要になる場合があります。代わりに、JSON としてデータを返し、ブラウザーで UI を構築する必要があります。また、ビューに読み込まれた後に個々の値を更新する必要がない限り、データの個々のビットを観測可能にする必要さえないでしょう。

ノックアウトに切り替えることで DOM 要素が多かれ少なかれ増えると考える理由がわかりません。Knockout は、レンダリング前に DOM に存在する必要のないテンプレートを使用します。現在の実装では、HTML のチャンクを DOM に挿入していますが、他のすべてが等しい場合、それらは同じである必要があります。

于 2013-01-11T19:47:35.453 に答える
0

コメントしたかったのですが、コメントが長すぎたので、ここに答えがあります

データ視覚化Webアプリケーションのパフォーマンスの最適化

同様の考えを持った後、データ視覚化ツールを変更しました。

以前は、すべてのやり取りでサーバーを頻繁に呼び出していました。

これで、サーバーは大量のデータを送信し、残りはjsが実行します。

データの受信時にインデックスを設定し(最大170kbは解凍済み)、ユーザーの操作に応じてdomが変更されます(表示なし:すべての場所でなし、コンテンツが変更または切り離されます。データはhtml要素ではなくjavascript配列に格納されます)

結果は驚くほど速いです(私は驚きました)。

要素をDOMに追加する方法に注意して、最小限のDOMにアクセスするための適切に構造化されたオブジェクトを作成する必要があります。

ノックアウトについてはわかりませんが、大きくて具体的でパフォーマンスを求める場合は、アルゴリズムを自分で実行する方がよいでしょう(イベントがトリガーされたときにそのまま使用されるインデックス付き配列にデータを処理するのはそれほど難しいことではありません-つまり、1つのループでレセプション、これ以上)

于 2013-01-11T19:51:18.927 に答える