Javascript的壓縮最佳化

來源:互聯網
上載者:User
移除注釋和空白

注釋的作用就不解釋了,使用者訪問你的網站,把一個帶注釋的代碼拿過去,而不會執行注釋的這段東西,豈不是白白浪費了這段代碼所帶來的網路頻寬。於是乎我們壓縮就應該把注釋給Del掉。

空白則是為了代碼美觀,易於程式員查看調試,對於解譯器來說,空白是無意義的,反而得花時間去掃描它,所以壓縮應該也要去除這些無意義的空白,包括縮排,空格,空行等。

做完這一步,只是第一層次的壓縮。為了使得JS檔案盡量的小,我們還得採用一些新思路。

最佳化代碼

我們是不是經常使用"abcd"+"efgh"這樣的字串拼接呢?於是我們考慮在壓縮的時候直接就壓縮成"abcdefgh"這樣對比一下,少了
兩個雙引號跟一個加號,如果使用字串拼接比較頻繁的話,這個最佳化會節省不少空間,並且提高了JS的執行效率(因為兩個字串拼接,解譯器需要重新去申請
記憶體空間,然後把兩端字串複製進去)。

對象的屬性訪問是不是也很頻繁呢?例如o["name"]等,又或者是定義了對象{"name":"Object"};這樣的話我們可以最佳化一下就是變成o.name以及{name:"Object"}節省幾個字元。

還有例如var a = new Array()最佳化成var a = []等(Object就是使用{}代替);連續的多個var定義可以用,來最佳化成一條語句定義。

同時也能適當的提高JS的執行效能!外語屋

千萬不要小看這幾個位元組,往往一個大型應用有多少使用者在下載你這個JS檔案,累積起來這個數字就很龐大了。

變數替換

要進一步縮小檔案大小的話,我們就要去分析一些JS的詞法文法,替換變數。簡單據個例子:

var myObj = 1;
myObj++;
myObj--;
alert(myObj);

變數替換的意思就是把原先的變數名換成更加短的變數名:

var A = 1;
A++;
A--;
alert(A);

自己比較一下就知道節省了多少個位元組,並且代碼被有效保護起來了,誰知道你的A是什麼含義,對吧?內陸運輸

當然了,我記得好像有看過更加牛逼的替換,印象中是最後再將全部字元轉化成16進位的\x的格式,有知道怎麼做的同志告知一下。

undefined最佳化

在你的代碼中是否經常出現 if (a != undefined)呢?很多包含undefined的語句,我們會看到這個單詞很長很不爽,又不能直接把它替換成一個短一點的單詞。於是後來看到了一種方法,在此之前我們先看看一個例子。

function f1(name){
    alert(name);
}

f1();

我們可以發現調用f1時不帶參數,f1的name參數將會是undefined值。好,於是我們對undefined進行最佳化跟縮短了。

舉個例子,如果是下邊這樣的代碼:

(function(name, undefined){//在這裡undefined是一個變數!不信的話可以對此函數傳入多一個值試試
    /* 在這裡就是我們的代碼地區 */
    if (name != undefined)
        alert(name);
})('name');/* 有效參數為函數定義時的參數少一個以上,這樣保證了第二個參數沒有傳入值,從而使其變成了undefined值 */

我們壓縮的時候就會把所有的undefined替換成一個變數A,這樣是不是縮短了很多位元組呢?像Jquery等架構都做了這個最佳化,jQuery的源碼的結構就是:

/*!
 * jQuery JavaScript Library v1.6.2
 * http://jquery.com/
 *
 * Copyright 2011, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2011, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Thu Jun 30 14:16:56 2011 -0400
 */
(function(window,  undefined) {
    /* jQuery Code */

    window.jQuery = window.$ = jQuery;
})(window);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.