<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 代碼優化 > * 優化原則: > > > > > JS與其他語言不同在于它的執行效率很大程度是取決于`JS engine`的效率。除了`引擎實現`的優劣外,`引擎`自己也會為一些特殊的`代碼模式`采取一些優化的策略。例如`FF`、`Opera`和`Safari`的`JAVASCRIPT`引擎,都對字符串的拼接運算(`+`)做了特別優化。所以應該根據不同引擎進行不同優化。 > > > > 而如果做跨瀏覽器的web編程,則最大的問題是在于IE6(JScript 5.6),因為在不打hotfix的情況下,JScript引擎的垃圾回收的bug,會導致其在真實應用中的performance跟其他瀏覽器根本不在一個數量級上。因此在這種場合做優化,實際上就是為JScript做優化,所以第一原則就是只需要為IE6(未打補丁的JScript 5.6或更早版本)做優化。 > > > * JS優化總是出現在大規模循環的地方: > > > > 這倒不是說循環本身有性能問題,而是循環會迅速放大可能存在的性能問題,所以第二原則就是以大規模循環體為最主要優化對象。 > > > > 以下的優化原則,只在大規模循環中才有意義,在循環體之外做此類優化基本上是沒有意義的。 > > > > 目前絕大多數JS引擎都是解釋執行的,而解釋執行的情況下,在所有操作中,函數調用的效率是較低的。此外,過深的prototype繼承鏈或者多級引用也會降低效率。JScript中,10級引用的開銷大體是一次空函數調用開銷的1/2。這兩者的開銷都遠遠大于簡單操作(如四則運算)。 > > > * 盡量避免過多的引用層級和不必要的多次方法調用: > > > > 特別要注意的是,有些情況下看似是屬性訪問,實際上是方法調用。例如所有DOM的屬性,實際上都是方法。在遍歷一個NodeList的時候,循環 條件對于nodes.length的訪問,看似屬性讀取,實際上是等價于函數調用的。而且IE DOM的實現上,childNodes.length每次是要通過內部遍歷重新計數的。(My god,但是這是真的!因為我測過,childNodes.length的訪問時間與childNodes.length的值成正比!)這非常耗費。所以 預先把nodes.length保存到js變量,當然可以提高遍歷的性能。 > > > > 同樣是函數調用,用戶自定義函數的效率又遠遠低于語言內建函數,因為后者是對引擎本地方法的包裝,而引擎通常是c,c++,java寫的。進一步,同樣的功能,語言內建構造的開銷通常又比內建函數調用要效率高,因為前者在JS代碼的parse階段就可以確定和優化。 > > > * 盡量使用語言本身的構造和內建函數: > > > > 這里有一個例子是高性能的String.format方法。 String.format傳統的實現方式是用String.replace(regex, func),在pattern包含n個占位符(包括重復的)時,自定義函數func就被調用n次。而這個高性能實現中,每次format調用所作的只是一次Array.join然后一次String.replace(regex, string)的操作,兩者都是引擎內建方法,而不會有任何自定義函數調用。兩次內建方法調用和n次的自定義方法調用,這就是性能上的差別。 > > > > 同樣是內建特性,性能上也還是有差別的。例如在JScript中對于arguments的訪問性能就很差,幾乎趕上一次函數調用了。因此如果一個 可變參數的簡單函數成為性能瓶頸的時候,可以將其內部做一些改變,不要訪問arguments,而是通過對參數的顯式判斷來處理,比如: > > > > > ~~~ > > function sum() { > > var r = 0; > > for (var i = 0; i < arguments.length; i++) { > > r += arguments[i]; > > } > > return r; > > } > > ~~~ > > > > 這個sum通常調用的時候個數是較少的,我們希望改進它在參數較少時的性能。如果改成: > > > > ~~~ > > function sum() { > > switch (arguments.length) { > > case 1: return arguments[0]; > > case 2: return arguments[0] + arguments[1]; > > case 3: return arguments[0] + arguments[1] + arguments[2]; > > case 4: return arguments[0] + arguments[1] + arguments[2] + arguments[3]; > > default: > > var r = 0; > > for (var i = 0; i < arguments.length; i++) { > > r += arguments[i]; > > } > > return r; > > } > > } > > ~~~ > > > > 其實并不會有多少提高,但是如果改成: > > > > ~~~ > > function sum(a, b, c, d, e, f, g) { > > var r = a ? b ? c ? d ? e ? f ? a + b + c + d + e + f : a + b + c + d + e : a + b + c + d : a + b + c : a + b : a : 0; > > if (g === undefined) return r; > > for (var i = 6; i < arguments.length; i++) { > > r += arguments[i]; > > } > > return r; > > } > > ~~~ > > > > 就會提高很多(至少快1倍)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看