7

tl; dr :(テーブルのセルとして)バックボーンビューがたくさん(現時点では100以上、場合によっては1000/2000以上)あるのは重すぎるのではないかと思います。

私が取り組んでいるプロジェクトは、計画ビューを中心に展開しています。1日の6時間をカバーするユーザーごとに1つの行があり、各時間は15分で4つのスロットに分割されます。この計画は、スロットをクリックしたときに「予約」を追加するために使用され、正しいスロットのホバリングを処理する必要があります。また、予約ができない場合も処理する必要があります。ユーザーが「使用できない」スロットをクリックしないようにします。

スロットをクリックできない理由はたくさんあります。現時点でユーザーが利用できないか、ユーザーが予約中です。または、アプリは2つの予約の間に遅延スロットを「強制」する必要があります。予約(div)はスロット(テーブルのセル)にレンダリングされ、ディメンションを操作することで、適切な数のスロットをホバリングします。

この画面はすべてバックボーンで処理されます。そのため、ホバーしているスロットごとに、ここで予約できるかどうかを確認する必要があります。現時点ではdata、スロットの属性をいじってこれを使用しています。予約オブジェクトが追加されると、カバーされるスロットは「(とりわけ)予約オブジェクト(バックボーンビューオブジェクト)で拡張されます。

しかし、場合によっては、今はよくわからず、混乱し、予約ビューが削除されたときに、スロットが「クリーンアップ」されません。前のスロットはclass正しくリセットされません。それはおそらく私が間違ったかひどくしたことですが、これはさらに重くなるでしょう。ここでは別のクラスのバックボーンビューを使用する必要があると思いますが、ビューオブジェクトのスロット数とその数が多くなり、パフォーマンスの問題が発生する可能性があります。私はjsperfについてのマッシュを知らないので、その電車に飛び乗る前にいくつかのフィードバックが欲しいです。これを行う方法に関する他のアドバイスも大歓迎です。

御時間ありがとうございます。これが十分に明確でない場合は、教えてください、言い換えてみます。

4

3 に答える 3

8

非常に複雑なbackbone.jsアプリがあり、一度に数千のビューが表示される可能性があります。私たちのボトルネックは主に、適切に削除されていないビューからのメモリリーク、またはビューを不必要に再レンダリングするイベント駆動型レンダリングにあります。とはいえ、実際の視聴回数はそれほど影響を与えていないようです。バックボーンビューは非常に軽量であるため、イベントがあまり多くバインドされていない限り、それほど大きな問題にはなりません。

パフォーマンスの問題が発生する可能性がありますが、ビューはおそらく問題ではありません。

ただし、何千ものビューを使用する場合は、最初のレンダリングを1つの大きな「.html()」呼び出しに隠しておくことをお勧めします。これを行うには、各ビュー要素にビューのcidに基づいたIDを指定し、次にビューのhtml文字列を連結し、その後、各ビューでsetElementを使用してその要素を再度検索します。

于 2012-08-01T20:22:34.150 に答える
2

多分これは少し助けになります:
https ://stackoverflow.com/a/7150279/1067061

ところで:私はあなたのアバターが好きです;)

于 2012-08-01T13:37:39.520 に答える
0

バックボーンはすべてを処理しますが、ブラウザにとって最もパフォーマンスの低い方法です。速度が十分でない場合は、テンプレートの作成と破棄を停止する必要があります。テンプレートをキャッシュしても、ほとんど役に立ちません。

に対してrender関数を呼び出す代わりに、変数をjqueryセレクターに保存し、モデルが変更されたら、キャッシュされたセレクターを使用してDOMを更新します。これにより、パフォーマンスが大幅に向上します。

$title = null,
init = function(){ $title = this.$el.find('h1'); },
onTitleChange = function(event){ $title.html(event.value) }

私はパフォーマンスの高いバックボーンビューに取り組んでいます。120FPS以上で1,000,000モデルのコレクションをレンダリングできます。コードはGithubにあります。https://github.com/puppybits/BackboneJS-PerfView実行できる最適化は他にもたくさんあります。PrefViewをチェックアウトすると、ほとんどの最適化に関するコメントがあります。

于 2013-10-22T03:49:45.690 に答える