2017-07-07 42 views
2

在到目前爲止,我已經嘗試了所有瀏覽器(火狐,Chrome,EDGE),它一直顯著更快地做到以下幾點:爲什麼使用str.chatAt(0)而不是str [0]進行優化?

str.charAt(0) 

除了這些之外的兩種方法,我發現來完成同樣的事情:

str[0] 
str.substring(0, 1) 

雖然我可以理解.substring()是顯著較慢(速度的10%),是不是[]用字符串只是一個不同的語法.charAt()(75速度的百分比)?

+0

還有'str.subtr(0,1)',每個[* Array.prototype.substr *](https://tc39.github.io/ecma262/#sec-string.prototype.substr)哪個與* substring *有點不同。 – RobG

回答

2

使用索引並將字符串視爲一個數組曾經是首選的方法。 charAt僅在ES5中引入,在IE9之前您必須使用string[index]。除非您需要支持舊版本的瀏覽器,否則charAt方法是推薦使用的更清晰的方法。

推測,速度來自其可預測性,瀏覽器可以比使用索引查找更好地優化它。但正如您在基準測試中看到的那樣,瀏覽器都會以不同的方式優化。

您將在不同的瀏覽器中看到大量不同的數字。在Chrome中,charAt速度更快,但在Microsoft Edge和Internet Explorer中速度相當慢,而且[index]勝出(特別是在IE11中)。檢查出this JSPerf test並在不同的瀏覽器中運行它。

除非你處理數以億計的字符串,否則你不會注意到任何使用any-all的任何放緩。在Chrome中,速度差異尤其是百分比的一小部分。

+0

謝謝,我剛纔自己跑了測試。我剛剛在Firefox中嘗試過,括號中的符號贏得了(小幅).31%。更令人驚訝的是,在Firefox中,兩種情況都超過了20億次操作/秒,而Chrome則達到8.44億次操作/秒。 – DonovanM

相關問題