2

例えば:

for (var idx = 0, len = lines.length; idx < len; idx += 1) {
  /^regexp?/i.test(lines[idx]);
}

以下はより効率的でしょうか?

var pattern = /^regexp?/i;
for (var idx = 0, len = lines.length; idx < len; idx += 1) {
  pattern.test(lines[idx]);
}

私の理解では、最初のケースでは反復ごとに新しい RegExp オブジェクトが作成され、必要以上のメモリが消費されます。私の理解は正しいですか、それとも JavaScript エンジンは上記の例を同等にする最適化を実行しますか?

4

2 に答える 2

5

キャッシュされた正規表現は高速になります。の要素がlines多いほど、同じ正規表現オブジェクトを再作成するのに時間がかかります。

于 2013-05-10T00:12:54.257 に答える
1

あなたの仮定は正しいです。複数のオブジェクトを作成すると、1つだけを作成するよりもパフォーマンスが低下するはずです。正規表現の作成をループの外に移動することをお勧めします。特定のエンジンがいくつかの最適化を行ったとしても、考えられるすべてのエンジンでコードを効率的に実行する必要があります。

于 2013-05-10T00:12:37.540 に答える