真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【翻譯】SenchaCmd中腳本壓縮方法之比較

概述

這么多年來(lái),Web開(kāi)發(fā)人員都被告知應(yīng)優(yōu)化他們生產(chǎn)環(huán)境的代碼。傳統(tǒng)的方法是將應(yīng)用程序的所有腳步進(jìn)行壓縮以減少應(yīng)用程序的大小,以便讓?xiě)?yīng)用程序加載更快。而Sencha Cmd這么多年以來(lái)已經(jīng)將這個(gè)過(guò)程自動(dòng)化了。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到瑯琊網(wǎng)站設(shè)計(jì)與瑯琊網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋瑯琊地區(qū)。

然而,許多客戶,還不知道可通過(guò)調(diào)整Sencha Cmd的壓縮代碼來(lái)進(jìn)行一些額外的處理。盡管Sencha Cmd默認(rèn)是適應(yīng)YUI壓縮來(lái)進(jìn)行壓縮的,但還可以通過(guò)配置使用Google Closure或UglifyJS來(lái)進(jìn)行壓縮。下面將會(huì)介紹這些,并去測(cè)試哪一個(gè)壓縮工具提供了最大的壓縮效果。

要注意的是,本文的本意并不是讓你使用某個(gè)特定的工具,至于選擇哪一種,不選擇哪一種,是有許多的因素決定的,本文只是嘗試提供一些參考意見(jiàn)。

為什么要修改默認(rèn)設(shè)置?

雖然腳本壓縮的處理機(jī)制相當(dāng)復(fù)雜,但總的來(lái)說(shuō)還是相當(dāng)簡(jiǎn)單的:代碼會(huì)被標(biāo)記后解析為一個(gè)抽象語(yǔ)法樹(shù)(abstract syntax tree,AST),然后通過(guò)腳本程序進(jìn)行修改并壓縮后輸出。

【翻譯】Sencha Cmd中腳本壓縮方法之比較

雖然這些獨(dú)立的工具是如何工作的(如使用什么算法等)已經(jīng)超出了本文的范圍,但還是讓我們?cè)诟叩膶蛹?jí)上來(lái)快速體驗(yàn)一下YUI壓縮、Closure和UglifyJS。

YUI壓縮

YUI壓縮是一個(gè)使用JAVA編寫(xiě)的命令行工具,它既可以處理Javascript,也可以處理CSS壓縮,對(duì)于大多數(shù)項(xiàng)目來(lái)說(shuō),它是一個(gè)理想的工具。YUI壓縮雖然很受歡迎,但已經(jīng)不再更新了。

如前文所述,Sencha Cmd默認(rèn)是使用YUI壓縮來(lái)處理應(yīng)用程序的生成過(guò)程的。

Google Closure編譯器

Google Closure編譯器也是使用JAVA創(chuàng)建的,不過(guò)它只能處理javascript壓縮(不包含CSS)。Closure可以直接從命令行運(yùn)行,它還包含其他的一些服務(wù)(UI和API),并通過(guò)代碼注釋和編譯標(biāo)志為壓縮處理提供了更多的控制權(quán)。

UglifyJS

UglifyJS是這些工具中唯一使用javascript編寫(xiě)的工具,因此非常適合應(yīng)用于Node.js環(huán)境中。如Closure一 樣,UglifyJS只提供javascript壓縮(不包括CSS)。UglifyJS是以命令行工具方式運(yùn)行的,并允許通過(guò)大量的編譯標(biāo)志來(lái)精細(xì)的控 制壓縮過(guò)程。

注意:Sencha Cmd是使用JAVA創(chuàng)建的,而UglifyJS的運(yùn)行需要使用到Rhino,而不是Node.js。

要記住的是,因?yàn)槊恳粋€(gè)工具會(huì)產(chǎn)生不同的壓縮輸出,因而很難預(yù)測(cè)哪一個(gè)是最理想的結(jié)果。為了說(shuō)明這一點(diǎn),下面將通過(guò)一個(gè)示例應(yīng)用程序來(lái)測(cè)試這些壓縮工具如何去處理這些代碼。

案例研究:Ext JS 6示例應(yīng)用程序

最簡(jiǎn)單的用來(lái)說(shuō)明這一概念的方式就是使用Sencha Cmd來(lái)生產(chǎn)一個(gè)示例應(yīng)用程序:

sencha -sdk ~/path/to/ext generate app Foo ./foo

因?yàn)镾encha Cmd自身能搭建一個(gè)完整的示例應(yīng)用程序,因而我們不需要做任何事情。在Firefox打開(kāi)應(yīng)用程序,在“開(kāi)發(fā)”模式中應(yīng)用程序的加載數(shù)據(jù)統(tǒng)計(jì)如下:

【翻譯】Sencha Cmd中腳本壓縮方法之比較

這里沒(méi)有太多驚喜,在“開(kāi)發(fā)”模式中的Ext JS 應(yīng)用程序依賴于Ext.Loader來(lái)同步加載每一個(gè)Javascript依賴,雖然只花費(fèi)了0.29秒來(lái)等待24個(gè)HTTP請(qǐng)求,但可以想象得出一個(gè)企業(yè)應(yīng)用程序可能需要花費(fèi)更多的時(shí)間。

在運(yùn)行”sencha app build”將示例應(yīng)用程序轉(zhuǎn)為“生產(chǎn)”模式后,網(wǎng)絡(luò)統(tǒng)計(jì)已經(jīng)有所改變了:

【翻譯】Sencha Cmd中腳本壓縮方法之比較

很顯然,現(xiàn)在只加載了很小的腳本資源,而整體的加載時(shí)間已經(jīng)降至0.02秒了。這一切都得感謝javascript壓縮的魔力。

顯然,使用javascript壓縮是很重要的,不過(guò),通過(guò)調(diào)整Sencha Cmd的設(shè)置可以獲得更好的結(jié)果嗎?如果要修改Sencha Cmd所使用的壓縮工具,可編輯app.json文件:

    {        //...

        /**
         * override objects for setting build environment specific
         * settings.
         */
        "production": {            "compressor" : {                //"type" : "yui"    //the default...
                //"type" : "uglify" //or...
                "type" : "closure"
            }
        },        //...
    }1234567891011121314151617

現(xiàn)在運(yùn)行“sencha app build”,將會(huì)使用配置的壓縮工具。接下來(lái),讓我們來(lái)看看使用不同壓縮工具后的示例應(yīng)用程序是如何的:

壓縮工具文件大小(字節(jié))與源文件比較(%)
(none)5,166,339100.0%
YUI1,109,53421.48%
Closure1,081,24220.93%
UglifyJS1,069,12620.69%
YUI (gzip)343,6966.65%
Closure (gzip)323,6156.26%
UglifyJS (gzip)329,1826.37%

在以上表格中,可以看到壓縮文件的大小,另外一部分是使用gzip壓縮后的輸出文件(通過(guò)gzip終端命令使用默認(rèn)設(shè)置的運(yùn)行結(jié)果)。從結(jié)果可以看到,使用UglifyJS可以輸出最小的文件,而如果考慮gzip壓縮,則Closure更佳。

【翻譯】Sencha Cmd中腳本壓縮方法之比較

【翻譯】Sencha Cmd中腳本壓縮方法之比較

如果調(diào)整gzip的設(shè)置,可能會(huì)獲得更好的結(jié)果。

注意事項(xiàng)

由于Closure贏了,我們是否只是有Closure呢?可悲的是,其實(shí)并不是那么明確的。

如果采用額外的步驟來(lái)衡量所生產(chǎn)應(yīng)用程序過(guò)程的總時(shí)間(包括生產(chǎn)CSS主題和其他步驟),就會(huì)注意到一些重要的事情。

示例應(yīng)用程序使用的是Ext JS 5.0.1.1255,是在MacBook Pro(2011年初,OSX 10.10.1, 2GHz Intel i7, 8GB RAM)上使用Sencha Cmd 5.1.0.26進(jìn)行壓縮的。如果在你的機(jī)器上可能會(huì)有不同的結(jié)果。要注意的是,我修改過(guò)生成設(shè)置,以避免主題為舊的瀏覽器進(jìn)行切片.

 sencha -ti app build -c

以上命令會(huì)為我們提供執(zhí)行的總時(shí)間(-ti 標(biāo)志),b并會(huì)刪除之前生成的輸出(-c 標(biāo)志)以保證壓縮是一個(gè)干凈壓縮。為每一個(gè)壓縮工具運(yùn)行一次生產(chǎn),就可以看到為什么YUI壓縮是默認(rèn)選擇了:

  • YUI: 0:00:33

  • Closure: 0:00:54

  • UglifyJS: 0:15:40

Closure花費(fèi)了近兩倍的時(shí)間去壓縮生成的輸出,而UglifyJS則需要31x這么長(zhǎng)的時(shí)間!這里要點(diǎn)就是,是否值得為幾千字節(jié)的問(wèn)題而花費(fèi)大量增加的生產(chǎn)時(shí)間。

歸根結(jié)底,一些公司的首要目標(biāo)只是減少javascript的大小,而并注重哪幾千字節(jié)。不過(guò),對(duì)于高流量應(yīng)用程序,則會(huì)讓他們更關(guān)注這些微小的細(xì)節(jié),因?yàn)轫?yè)面的速度和總體帶寬可能會(huì)大大影響利潤(rùn)。

最后,你可能會(huì)問(wèn)任何壓縮過(guò)的javascript代碼執(zhí)行上是否會(huì)更快。這幾乎是不可能的事,現(xiàn)有的JSPerf測(cè)試表明,執(zhí)行速度幾乎是沒(méi)有任何差別的。

自定義JS壓縮

Sencha Cmd目前還不允許去配置YUI壓縮的配置,不過(guò)YUI本身也沒(méi)有提供更多的配置。Sencha Cmd目前允許用戶配置Closure去如何壓縮代碼。

再次打開(kāi)app.json,在文件中科直接通過(guò)“compressor”對(duì)象來(lái)配置Closure的壓縮選項(xiàng):

{    //...

    "production": {        "compressor" : {            "type" : "closure",            //all other keys are passed as options
            "ambiguateProperties" : true,            "foldConstants"       : true
        }
    },    //...}123456789101112131415

Sencha Cmd目前還沒(méi)有實(shí)現(xiàn)UglifyJS的自定義配置,不過(guò)該功能已包含在路線圖中。

小結(jié)

壓縮javascript是既定的提高Web應(yīng)用程序性能的最佳做法。Sencha Cmd默認(rèn)情況下會(huì)自動(dòng)進(jìn)行處理,不過(guò),使用更先進(jìn)的設(shè)置來(lái)對(duì)生成的產(chǎn)品進(jìn)行額外的優(yōu)化,是值得的。

**作者: Arthur Kay
Arthur Kay is a Senior Software Engineer at Sencha. He studied Music and Computer Science at Loyola University Chicago and has been involved with the Web since the late 1990s.**


本文名稱:【翻譯】SenchaCmd中腳本壓縮方法之比較
本文地址:http://weahome.cn/article/pecgpg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部