10

私の前提が間違っていました。AngularJS は確かに速度を低下させていましたが、それは以下に説明する問題によるものではありませんでした。ただし、これを証明することができたのは、私の質問に対する flim の回答 (Angular スコープから要素を除外する方法) でした。

AJAX で取得したデータから d3+Raphael を使用してグラフを生成するサイトを構築しています。これにより、ユーザーがレンダリングするグラフの種類に応じて、DOM に多数の SVG または VML 要素が生成されます (たとえば、円グラフにはほとんど含まれず、折れ線グラフと積み上げ棒グラフには多く含まれます)。

AngularJS によって制御されるテキスト フィールドにテキストを入力すると、Firefox がクロールされるという問題が発生しています。いくつかの文字を入力し、それらが突然表示されるまで 2 ~ 3 秒待ってから、さらに数文字入力します (Chrome はこれを少しうまく処理しているようです)。

ページにグラフがない場合 (ユーザーがグラフを生成するのに十分なデータを提供していない場合)、これらのテキスト フィールドの内容を編集してもかまいません。AngularJSが DOM を更新しようとしたときに問題が発生し、何百もの SVG または VML 要素を調べる必要があると思います。

ただし、グラフには、AngularJS 自体が心配する必要のあるものは何も含まれていません。(ただし、注意を払う必要があるグラフの前後に UI 要素があります。)

私は2つの解決策を考えることができます:

  1. グラフの DIV を AngularJS コントローラーの外に置き、CSS を使用して実際に必要な場所に配置します

  2. AngularJS に (どうにかして) グラフの DIV を気にしないように指示します。ビューとモデルの同期を維持するときにスキップする

2 番目のオプションは、ドキュメント レイアウトを正常/セマンティックに保つため、私には好ましいと思われます。これを行う方法はありますか?(または、私が考えていなかったさらに良い解決策はありますか?)

4

1 に答える 1

17

ng-non-bindable を試しましたか? http://docs.angularjs.org/api/ng.directive:ngNonBindable

<ANY ng-non-bindable>
   ...
</ANY>
于 2013-06-17T07:59:19.757 に答える