JavaScriptでの検索とindexOfパフォーマンスの基本的な比較

合理的である場合、 正規表現の代わりに正規 検索を使用することをお勧めします。後者ははるかに遅いためです。 しかし、どれほど遅くなり、いつより効率的になるのか見たことはありません。 しかし、かゆみは休息を与えないので、私はそれらを比較し、実際にどのような数字が見えるかを見ることにしました...





そのため、通常のページを使用して、その中の行を検索します。 私は自分のドキュメントを受け取り、その中の「run_test」ボタンでIDを探しました。 それは角質に見えます:

for (i=0;i<100000;i++) { string .indexOf( 'run_test' ); }



for (i=0;i<100000;i++) { string .search( 'run_test' ); }



* This source code was highlighted with Source Code Highlighter .








for (i=0;i<100000;i++) { string .indexOf( 'run_test' ); }



for (i=0;i<100000;i++) { string .search( 'run_test' ); }



* This source code was highlighted with Source Code Highlighter .










しかし、IDを取得するのは簡単ではなかったので、比較のためにシンプルでjQueryの要素選択を考えて追加しました

for (i=0;i<100000;i++) { $( '#run_test' ); }



for (i=0;i<100000;i++) { document .getElementById( 'run_test' ); }



* This source code was highlighted with Source Code Highlighter .








for (i=0;i<100000;i++) { $( '#run_test' ); }



for (i=0;i<100000;i++) { document .getElementById( 'run_test' ); }



* This source code was highlighted with Source Code Highlighter .










さて、私はさまざまなブラウザでこれを試しました:

画像



結果を見て、結論を導き出します。



第1に、直接検索は通常のシーズンより1桁以上高速です。つまり、検索の代わりに2〜3個、または12個のindexOfが「正当化」されますが、実際にはロードされたサイクルに数千個がなければ、そのような最適化は効果がありません。



第二に、Chromeは本当に軽快です:)そしてFFがindexOfで同じ数字を示していて、ループ内で外界から事実上切断された場合、Chromeは楽しい方法でgifをひねり続け、一般にそのような単純なものを読み込むことができませんでした。 Operaは妥当な妥協案を選んでいるようで、通常はイベントを満たして写真を点滅させますが、定期的には特に速度を落とすわけではありません。

FFにはまだ奇妙な点があります-最初のいくつかのテストでは正規表現の速度は良好ですが、速度は2倍以上低下します。 たぶん、彼はこのスクリプトがロードしすぎると決めたのでしょうか?



次はjQueryです。 最終的に、idはgetElementByIdを介して特定されますが、この前にいくつかのチェックが行われ、すべて正規表現になります。 もちろん、ほぼ20マイクロ秒の天気はそうではありませんが、これはメソッドのチェーンを支持するもう1つの議論です。

IEの数は70前後です...このようなプリミティブテストでは、明確なことは言うまでもありませんが、パフォーマンスが比較的急激に低下し、複雑さがわずかに増加することは、通常、アーキテクチャが過度に複雑であることを示します。 この愚かなレッスンをあきらめなければ、平均的な複雑さのテストのために棚の存在を確認する必要があります-これは不必要に多数のオプションを意味します または横行成長があります:) IE彼は-彼はできます! :)



getElementByIdが非常にゆったりしていることが判明したことに少し驚いた。



おまけとして-元のスクリプトに触れ見ることができます。 追加やコメントを歓迎します。



All Articles