2013-05-10 26 views
1

例如:在循環中使用JavaScript regexp文字會消耗不必要的內存嗎?

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]); 
} 

我理解的是一個新的正則表達式對象將在第一種情況下每次迭代被創建,消耗更多的內存比是必要的。我的理解是正確的,還是JavaScript引擎執行的優化使上面的例子等價?

回答

4

緩存的正則表達式will be fasterlines中的元素越多,浪費的時間就越多,重新創建相同的正則表達式對象。

+1

+1對於jsperf測試 – 2013-05-10 00:15:25

1

你的假設是正確的,創建幾個對象的性能肯定不如創建一個對象。將正則表達式創建移出循環是一種很好的做法。即使某些引擎做了一些優化,你也希望你的代碼能夠在每個可能的引擎中高效運行。