2013-02-18 102 views
2

this後,據說預編譯正則表達式將提高腳本性能。作者通過performance test來證明。然而,據我所知,這個職位正在談論你反覆使用正則表達式的情況。如果腳本中有很多正則表達式,但每個只使用一次,會怎麼樣?預編譯正則表達式會在性能方面帶來好處,在整個腳本中只使用一次?Javascript - 預編譯的正則表達式

+0

通過在頁面加載時預先進行編譯並且用戶期望有一點緩慢,您可能會獲得一些預期收益。但這只是將工作轉移到另一個時間,它不會節省任何東西,而且差異可能不會被察覺。 – RobG 2013-02-18 23:50:52

回答

1

如果僅使用一次 - 那麼只需使用regexp文字。

你的觀點是有效的 - 它只有在你使用相同的正則表達式時纔有意義。

+0

這是我懷疑的。但是我現在正在失去前面提到的那篇文章的觀點。因爲它只是一切,不管它是正則表達式,字符串,函數還是任何其他值:如果重複使用它,將其分配給變量會更有效。我錯過了什麼? – tch3r 2013-02-18 23:59:00

+2

@ user2061071:不是賦值,但*編譯*步驟很昂貴。雖然它對於函數也是有效的,因爲它是一個聲明步驟,如果你將一個匿名函數存儲在一個變量中,你可能會避免。 – zerkms 2013-02-19 00:01:49

1

我不相信你鏈接的性能測試是決定性的。如果你看結果,差異是可以忽略的,因爲正則表達式不夠複雜。看看this測試更好一點的答案。

無論哪種方式,如果正則表達式多次使用,存儲正則表達式值只會提高性能。這種性能提升僅歸因於正則表達式本身的初始編譯開銷。如果將正則表達式存儲在一個變量中,那麼它將仍然是第一次編譯,就像第一次編譯文字一樣。當存儲的正則表達式使用第二個時間並且它已經被編譯,而文字正則表達式將不得不被再次編譯時,會發生差異。

+0

有編譯時間和對象創建時間(雖然這不重要)。一個文字正則表達式只會被編譯一次,但如果它被使用了一個循環,則會爲每個循環傳遞創建一個新的正則表達式* object *。爲避免這種情況,請將其存儲在循環外的變量中。 – Doin 2016-12-18 14:45:50

0

我認爲這取決於瀏覽器的實現,我們不能確定地說一種方法更好。

查看firefox和chrome中的不同結果。

enter image description here

我很困惑,爲什麼鉻,使非編譯正則表達式更快的結果,雖然。