国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

webpack學(xué)習(xí)(四)— code splitting

lsxiao / 2704人閱讀

摘要:支持定義分割點,通過進(jìn)行按需加載。若按照中做,則會造成通用模塊重復(fù)打包。下文將詳細(xì)說明。同樣是利用和來處理的。如下在中添加入口其中模塊為通用功能模塊在中對應(yīng)和這樣則會打包出和兩個文件。為通用功能模塊。希望有更好方案的同學(xué)能夠不吝賜教。

什么是code splitting

首先說,code splitting指什么。我們打包時通常會生成一個大的bundle.js(或者index,看你如何命名)文件,這樣所有的模塊都會打包到這個bundle.js文件中,最終生成的文件往往比較大。code splitting就是指將文件分割為塊(chunk),webpack使我們可以定義一些分割點(split point),根據(jù)這些分割點對文件進(jìn)行分塊,并實現(xiàn)按需加載。

code splitting的意義

第三方類庫多帶帶打包。由于第三方類庫的內(nèi)容基本不會改變,可以將其與業(yè)務(wù)代碼分離出來,這樣就可以將類庫代碼緩存在客戶端,減少請求。

按需加載。webpack支持定義分割點,通過require.ensure進(jìn)行按需加載。

通用模塊多帶帶打包。我們代碼中可能會有一些通用模塊,比如彈窗、分頁、通用的方法等等。其他業(yè)務(wù)代碼模塊常常會有引用這些通用模塊。若按照2中做,則會造成通用模塊重復(fù)打包。這時可以將通用模塊多帶帶打包出來。

下文將詳細(xì)說明。

如何進(jìn)行code spliting 第三方類庫

我們項目中常常會用到一些第三方的類庫,比如jquery,bootstrap等??梢耘渲枚嗳肟趤韺⒌谌筋悗於鄮Т虬?,如下:

//在entry中添加入口
entry: {
    index: "./index",
    vendor: ["jquery", "bootstrap"]
},

//在plugins中配置
plugins: [
    new webpack.optimize.CommonsChunkPlugin("vendor", "vendor.bundle.js"),
]

說明
CommonsChunkPlugin提供兩個參數(shù),第一個參數(shù)為對應(yīng)的chunk名(chunk指文件塊,對應(yīng)entry中的屬性名),第二個參數(shù)為生成的文件名。
這個插件做了兩件事:

vendor配置的模塊(jquery,bootstrap)打包到vendor.bundle.js中。

index中存在的jquery, bootstrap模塊從文件中移除。這樣index中則只留下純凈的業(yè)務(wù)代碼。

按需加載

以基于backbone的單頁面應(yīng)用為例,可以在router中進(jìn)行配置實現(xiàn)按需加載,如下:

router.js

var Router = Backbone.Router.extend({
    routes: {
        "a": "a",
        "b": "b"
    },
    
    a: function() {
        require.ensure(["./a"], (require) => {
            let a = require("./a");
            //do something
        })
    },
    
    b: function() {
        require.ensure(["./b"], (require) => {
            let b = require("./b");
            //do something
        })
    }
})

說明
如上方式將打出兩個文件,a.jsb.js(當(dāng)然名字會有所不同),且為按需加載。只有在訪問a時,a.js才會被加載,b同理。但是這種做法存在兩個問題:

若路由分配不合理,會打包出很多很小的文件,每個文件或許只有幾k,卻多了很多網(wǎng)絡(luò)請求,得不償失。

會造成通用模塊的重復(fù)打包,比如a模塊和b模塊都引用了c模塊,

a
import "c" from "./c"

b
import "c" from "./c"

這樣我們會發(fā)現(xiàn)打包出的a.jsb.js中都包含c模塊的代碼,造成了代碼冗余。

對于問題1,可以通過webpack提供的插件來解決:

//在plugins中添加該插件:
plugins: [
    new webpack.optimize.AggressiveMergingPlugin()
]

對于問題2:
可以按照下文中所說方式解決。

通用模塊打包

這個問題我再網(wǎng)上查閱了一些資料,沒有發(fā)現(xiàn)特別好的方案,以下所述為自己的一些嘗試,但是也并非最優(yōu)解,希望有更好解決方案的同學(xué)能夠指出。

同樣是利用entrycommonsChunkPlugin來處理的。如下:

//在entry中添加入口
entry: {
    index: "./index",
    common: ["./c", "./d"],  //其中c,d模塊為通用功能模塊
    vendor: ["jquery", "bootstrap"]
},

//在plugin中
plugins: [
    new webpack.optimize.CommonsChunkPlugin(["common", "vendor"], "[name].js")  //[name]對應(yīng)"common"和"vendor"
]

這樣則會打包出common.jsvendor.js兩個文件。common為通用功能模塊。

但是這種方式在項目依賴復(fù)雜情況下的效果還是不太理想,無法做到某段代碼只加載一次。
希望有更好方案的同學(xué)能夠不吝賜教。

(本文完)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88023.html

相關(guān)文章

  • webpack2.x 代碼分離文檔 翻譯

    摘要:代碼分離代碼分離是最受矚目的功能。下面有兩種代碼分離的技術(shù)。使用實現(xiàn)代碼分離是使用的方式實現(xiàn)靜待資源異步調(diào)用。通過添加,我們可以在代碼中打一個分離點,可以以此建立一個獨立的包,包含這個點的所有代碼。 代碼分離(Code Splitting) 代碼分離是webpack最受矚目的功能。它允許你把你的代碼分成不同的部分分開打包,然后實現(xiàn)在需要的時候再進(jìn)行加載(按需加載提高速度)————例如用...

    Scott 評論0 收藏0
  • webpack Code Splitting淺析

    摘要:不知大家是不是跟大雄一樣之前從未看過編譯產(chǎn)出的代碼。前文大雄給了一個粗陋的動態(tài)加載的方法說白了就是動態(tài)創(chuàng)建標(biāo)簽。大雄看完至少大概知道了原來編出來的代碼是那樣執(zhí)行的原來可以那么靈活的使用。 Code Splitting是webpack的一個重要特性,他允許你將代碼打包生成多個bundle。對多頁應(yīng)用來說,它是必須的,因為必須要配置多個入口生成多個bundle;對于單頁應(yīng)用來說,如果只打包...

    Amos 評論0 收藏0
  • 2017-06-28 前端日報

    摘要:前端日報精選我是如何實現(xiàn)的在線升級熱更新功能的張鑫旭鑫空間鑫生活翻譯表單的運(yùn)用第期晉升評審的套路異步編程的四種方式黃博客精選組件設(shè)計和分解思考掘金中文譯使登錄頁面變得正確掘金前端從強(qiáng)制開啟壓縮探究插件運(yùn)行機(jī)制掘金個常用的簡 2017-06-28 前端日報 精選 我是如何實現(xiàn)electron的在線升級熱更新功能的? ? 張鑫旭-鑫空間-鑫生活【翻譯】React 表單: Refs 的運(yùn)用【...

    QLQ 評論0 收藏0
  • Webpack 的 Bundle Split 和 Code Split 區(qū)別和應(yīng)用

    摘要:當(dāng)然,上面的定時器完全可以換成其他諸如按鈕點擊之類的事件來觸發(fā)。 Webpack Bundle Split 和 Code Split 話說之前也是對 chunk 這個概念有些模糊,并且很多時候網(wǎng)上的文章大部分在將代碼分離動態(tài)加載之類的。寫這篇文章的目的也是想讓其他那些跟我一樣曾經(jīng)對這個概念不是很清楚的童鞋有個清晰的認(rèn)識。廢話不多說,擼起袖子直接干! Lets Dive in! Webp...

    jimhs 評論0 收藏0
  • 翻譯webpack3.5.5 - code splitting - 上半部分

    摘要:澄清一個共同的誤解代碼分離不僅僅是抽出公共代碼把它們放進(jìn)一個共享的塊中。讓我們來使用來移除這個重復(fù)的部分。插件將會注意到我們已經(jīng)將分割成一個單獨的塊。并且從我們的主中刪除了這部分。 對于大型web app來說,如果把所有的文件都打包到一個文件中是非常低效的,特別是當(dāng)一些代碼塊只在某些特定的條件下被調(diào)用。webpack可以讓你的代碼庫分割成不同的塊(chucks),僅僅在需要的時候再加載...

    Bryan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<