1. 程式人生 > >《高效能javascript》學習筆記五

《高效能javascript》學習筆記五

五、字串和正則表示式的優化

1、字串拼接方式的分析

常見的拼接方式如上(因成書較早,不含es6模板字串的方法。)

(1)+操作符與+=操作符

有一個例子:str+='one'+'two;

在執行時,瀏覽器會經理四個步驟:

<1>、在記憶體中建立一個臨時字串;

<2>、連線後的字串'onetwo'被賦值給該臨時字串;

<3>、臨時字串與str當前的值連線;

<4>、結果賦值給str

以下程式碼可省略第一步、第二步:

str+='one';

str+='two';'

用這一句可以達到一樣的效果:str=str+'one'+'two。

因為字串拼接時,從左向右依次連線,避免使用了臨時字串。

注意,str='one'+str+'two'將會失去優化效果。因為在字串的拼接時,如果基礎字串位於最左側,就可以避免重複拷貝一個逐漸變大的基礎字串(str可能很長)

(2)陣列的join()方法

看一下以下操作:

這種方式的問題在於在迴圈過程中,重複的計算並修改了每次迴圈的的newStr的值,可以用陣列的join方法提升效能。

(3)字串的concat方法。

這是concat的幾種用法,書寫非常的簡潔,但是,concat要比簡單的+和+=稍慢。在實際開發中,在程式碼可讀性和效能上應找到一個平衡點。

2、正則表示式優化

(1)正則表示式的工作原理

<1>、編譯

當你建立了一個正則表示式物件,瀏覽器會驗證然後轉換為一個原生程式碼程式。(注意,避免重複建立相同的正則表示式)

<2>、設定起始位置

正則表示式進入使用狀態,會從目標字串的指定起始位置開始匹配。預設是字串的起始位置,exec和test方法可以指定起始位置。

當由第四步:回溯返回到這一步時,起始位置是最後一次匹配的起始位置的下一個字元的位置(即上一次匹配的起始位置的下一個字元開始匹配)。

<3>、匹配正則表示式

正則表示式開始工作時,它會逐個檢查文字和正則表示式模式,當出現匹配失敗,會嘗試回溯到之前嘗試匹配的位置上,然後嘗試其他可能的路徑。

<4>、匹配成功或失敗

如果正則表示式發現了一個匹配,那麼會表示為匹配成功。如果所有可能的路徑都匹配失敗,正則表示式引擎會回溯到第二步,從下一個字元開始嘗試,直到最後一個字元,如果還沒有匹配成功,則正則表示式宣佈匹配失敗。

(2)回溯的分析