14

jQuery のメソッド.text()とメソッドをいじって、いくつかの単純な jsPerf テスト.html()を実行していたところ、テキストの取得が大幅に高速化されていることに驚きました。.html()

  • $div.text()– 88,496 オペレーション/秒
  • $div.html()– 592,028 オペレーション/秒

結果が同じ場合.text()よりもはるかに遅いのはなぜですか? そのような違いを説明するためにスキップする.html()操作は何を.text()実行しますか?.html()

各メソッドには異なる目的があることを知っています。それらが同じ目的で使用される場合が気になります。

4

1 に答える 1

24

これは、必要な解析の量に関係しています。.text()内側の HTML を解析して内側のタグを取り除く必要があるため、処理が遅くなります。.html()そこにあるものは何でもグラブするだけです(または、コンテンツを設定している場合は消去します)。

hereのソース.text()(123 ~ 144 行) とhereのソース.html()(404 ~ 441 行)を確認できます。単純に値を取得する (設定しない) 場合、.text()再帰があります.html()が、単純なreturn elem.innerHTML;ため、はるかに高速です。セッターとして使用する場合でも、.html()より簡単です。

また、注意: セッターとして両方を使用し、プレーン テキストのみを渡す場合でも、.html()より高速です。ブラウザは、elem.nodeTypeいつ使用するかを決定する必要があります.text()。これには事実上、文字列の解析が必要です。

于 2014-07-25T19:19:28.447 に答える