2009-06-08 4 views

答えて

12

答えを得る最も良い方法は、2分を取って、何千回も繰り返すループを書くことですファイヤーバグをチェックしてどちらが速いかを確認してください;)

MXHRで作業しているときに、多くの文字列を最適化しなければならなかったし、私の経験上、プレーンなStringメソッドは現在のブラウザのRegExpsよりもはるかに高速です。可能な限り短い文字列でRegExpsを使用し、可能であればStringメソッドでできることはすべて実行してください。

例えば、私は私の現在のコードでは、この小さな番号を使用します。

var mime = mimeAndPayload.shift().split('Content-Type:', 2)[1].split(";", 1)[0].replace(' ', ''); 

それは地獄のように醜いですが、それを信じるかどうか、それは、高負荷の下で同等の正規表現よりも大幅に高速です。

+1

Firebugによるテストを検討しましたが、JSの時間測定を実際に信頼していませんでした。 ) – BYK

+0

Firebugを信用しない - 日付オブジェクトのいくつかを作成して比較する – annakata

+0

まあ、私はJS Dateオブジェクト自体を信用しませんパフォーマンスを測定しようとしましたが、正確にはミリ秒であると主張していましたが、常に秒の倍数を返していました。これが私がそれを信用しない理由です。 – BYK

1

split()を使用するほうがはるかに高速になると思います。これは、多くの仕様、行数と長さ、正規表現の複雑さなどによって異なります。

+0

感謝回答。私はまた、ネイティブメソッドがより速くなることを期待しましたが、この質問IMOの経験より優れたものはありません。とにかくありがとう=) – BYK

+1

その答えは経験に基づいています:) dfltrが言ったように、あなたはあなたの特別なケースについて実験する必要があります。 – RedFilter

+0

問題は、文字列のサイズがわからないことと、regexpを使用すると、正規表現は簡単な\ n | \ r正規表現になります。これ以上の提案はありますか? =)(それは見積もりだと思って申し訳ありません) – BYK

9

これは後半2年半ですが、うまくいけば、これは将来の視聴者のための問題に関するいくつかの光を当てることができます:http://jsperf.com/split-join-vs-regex-replace(機能ベンチマークコード自体だけでなく、複数のブラウザのベンチマーク結果を含む)に時間を割いて