首頁 > web前端 > js教程 > 主體

JS效能最佳化技巧實例分享

小云云
發布: 2018-03-13 15:58:19
原創
1289 人瀏覽過
  1. 腳本應該放在頁面元素程式碼之後

    無論目前JavaScript 程式碼是內嵌還是在外鏈檔案中,頁面的下載和渲染都必須停下來等待腳本執行完成。 JavaScript 執行過程耗時越久,瀏覽器等待回應使用者輸入的時間就越長。瀏覽器在下載和執行腳本時出現阻塞的原因在於,腳本可能會改變頁面或JavaScript的命名空間,它們會對後面頁面內容造成影響。

  2. 避免全域尋找

        function search() {
            //当我要使用当前页面地址和主机域名
            alert(window.location.href + window.location.host);
        }
        //最好的方式是如下这样  先用一个简单变量保存起来
        function search() {
            var location = window.location;
            alert(location.href + location.host);
        }
    登入後複製
  3. #類型轉換

    般最好用”" + 1来将数字转换成字符串,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:
    登入後複製

(“” + ) > String() > .toString() > new String() "

"
    var myVar = "3.14159",
    str = "" + myVar, //  to string  
    num=+myVar,       // to number
    i_int = ~ ~myVar,  //  to integer  
    f_float = 1 * myVar,  //  to float  
    b_bool = !!myVar,  /*  to boolean - any string with length 
                            and any number except 0 are true */
    array = [myVar];  //  to array
"
登入後複製
  1. 多個型別宣告

    在JavaScript中所有變數都可以使用單一var語句來聲明,這樣就是組合在一起的語句,以減少整個腳本的執行時間,就如上面程式碼一樣,上面程式碼格式也挺規範,讓人一看就明了。

    #透過範本元素clone,替代createElement
  2. 很多人喜歡在JavaScript中使用document.write來為頁面產生內容。容器元素,例如指定一個p或span,並設定他們的innerHTML來將自己的HTML程式碼插入頁面中。有效性,2:字串操作效率低,所以應該是用document.createElement()方法,而如果文件中存在現成的樣板節點,應該是用cloneNode()方法,因為使用createElement()方法之後,你需要設定多次元素的屬性,使用cloneNode()則可以減少屬性的設定次數-同樣如果需要建立很多元素,應該先準備一個樣板節點。套件

    閉包的案例

        var frag = document.createDocumentFragment();
        for (var i = 0; i < 1000; i++) {
            var el = document.createElement(&#39;p&#39;);
            el.innerHTML = i;
            frag.appendChild(el);
        }
        document.body.appendChild(frag);
        //替换为:
        var frag = document.createDocumentFragment();
        var pEl = document.getElementsByTagName(&#39;p&#39;)[0];
        for (var i = 0; i < 1000; i++) {
            var el = pEl.cloneNode(false);
            el.innerHTML = i;
            frag.appendChild(el);
        }
        document.body.appendChild(frag);
    登入後複製

  3. 在循環時將控制條件和控制變數合併起來

    document.getElementById(&#39;foo&#39;).onclick = function(ev) { };
    登入後複製

    當我們要添加什麼東西到這個在循環之前,我們發現有幾個操作在每次迭代都會出現。

  4. 避免與null進行比較
  5. 由於JavaScript是弱類型的,所以它不會做任何的自動類型檢查,所以如果看到與null進行比較的程式碼,請嘗試使用以下技術替換:

    1、如果值應為一個參考類型,使用instanceof操作符檢查其建構函式2、如果值應為一個基本型別,作用typeof檢查其型別3、如果是希望對象包含某個特定的方法名,則使用typeof運算元確保指定名字的方法存在於物件上

  6. #尊重物件的所有權
  7. 因為JavaScript可以在任何時候修改任意對象,這樣就可以以不可預期的方式覆寫預設的行為,所以如果你不負責維護某個對象,它的對像或者它的方法,那麼你就不要對它進行修改,具體一點就是說:

    1、不要為實例或原型添加屬性2、不要為實例或原型添加方法3、不要重定義已經存在的方法4、不要重複定義其它團隊成員已經實現的方法,永遠不要修改不是由你所有的對象,你可以透過以下方式為對象創建新的功能: 1、創建包含所需功能的新對象,並用它與相關對象進行交互2、創建自定義類型,繼承需要進行修改的類型,然後可以為自訂類型新增額外功能

  8. 使用直接量
  9. for ( var x = 0; x < 10; x++ ) {};
    登入後複製

    縮短否定偵測

    var x = 9;
    do { } while( x-- );
    登入後複製

  10. 釋放javascript物件
  11. 随着实例化对象数量的增加,内存消耗会越来越大。所以应当及时释放对对象的引用,让GC能够回收这些内存控件。 对象:obj = null 对象属性:delete obj.myproperty 数组item:使用数组的splice方法释放数组中不用的item

  12. 巧用||和&&布尔运算符

        function eventHandler(e) {
            if (!e) e = window.event;
        }
        //可以替换为:
        function eventHandler(e) {
            e = e || window.event;
        }
        
        
        
        if (myobj) {
            doSomething(myobj);
        }
        //可以替换为:
        myobj && doSomething(myobj);
    登入後複製
  13. switch语句相对if较快

  14. 每条语句末尾须加分号

相关推荐:

js性能优化技巧_javascript技巧

以上是JS效能最佳化技巧實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!