- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- webpack代碼分片的實(shí)現
實(shí)現高性能應用其中最重要的一點(diǎn)就是盡可能地讓用戶(hù)每次只加載必要的資源,優(yōu)先級不要太高的資源則采用延遲加載等技術(shù)漸進(jìn)式地獲取,這樣可以保證頁(yè)面的首屏速度。代碼分片是webpck打包工具所特有的一項技術(shù),通過(guò)這項功能可以把代碼按照特定的形式進(jìn)行拆分,使用戶(hù)不必一次全部加載,而是按需加載。
雖然這個(gè)插件在webpack4當中已經(jīng)不推薦使用,但是我們還是要了解一下。這個(gè)插件可以將多個(gè)Chunk中的公共的部分提取出來(lái)。公共模塊提取可以為幾個(gè)項目帶來(lái)幾個(gè)收益:
該插件的默認規則是只要一個(gè)模塊被兩個(gè)入口chunk所使用就會(huì )被提取出來(lái),比如只要a和b用了react,react就會(huì )被提取出來(lái)。但是它仍有些不足之處:
這是webpack新增的一個(gè)功能,改進(jìn)了CommonChunkPlugin而重新設計和實(shí)現的代碼分片特性,不僅比CommonChunkPlugin功能更加強大,還更簡(jiǎn)單易用。代碼如下
module.exports = { entry: './foo.js', output: { filename: 'foo.js', publicPath: '/dist/' }, mode: 'development', optimization: { splitChunks: { chunks: 'all', } } } // foo.js import React from 'react'; import('./bar.js'); document.write('foo.js', React.version); // bar.js import react from 'react'; console.log('bar.js', React.version);
splitChunk默認情形下的提取條件:
splitChunk:{ chunks: 'async', minSize: { javascript: 30000, style: 50000, }, maxSize: 0, minChunks: 1, maxAsyncRequests: 5, maxInitialRequests: 3, automaticNameDelimiter: '~', name: true, cacheGroups:{ vendor: { test: /[\\/]node_modules[\\/]/, priority: -10, }, default: { minChunks: 2, priority: -20, reuseExistingChunk: true } } }
匹配模式
chunks的值有三個(gè),async(默認)、initial、all。async只提取異步chunks,initial只對入口chunk生效,all兩種模式同時(shí)開(kāi)啟(推薦使用)
匹配條件
minSize、minChunks、maxAsyncRequests、maxInitialRequests
命名
默認為true,它意味著(zhù)可以根據不能cacheGroups和作用范圍自動(dòng)為新生成的chunk命名,并以automaticNameDelimiter分隔。
cacheGroup
可以理解為分離chunks時(shí) 的規則,默認情況下兩種規則:vendors和default。vendors
用于提取所有node_modules中符合條件的模塊,default則作用于被多次引用的模塊??梢詫@些規則進(jìn)行增加或者修改,如果要禁用某種規則,也可以直接將其設置為false。當一個(gè)模塊同時(shí)符合多個(gè)cacheGroups時(shí),則更具其中的priority配置項確定優(yōu)先級。
資源異步加載主要解決的問(wèn)題是,當模塊數量過(guò)多,資源體積過(guò)大時(shí),可以把一些暫時(shí)使用不到的模塊延遲加載。這樣使頁(yè)面初次渲染的時(shí)候用戶(hù)下載的資源盡可能小,后續的模塊等到需要的時(shí)候在再去觸發(fā)加載,因此這種一般都叫做按需加載。
webpack中有兩種異步加載的方式,import(webapck2開(kāi)始)和require.ensure(webapck1),import和es6 module的區別就是,不需要頂層加載,即用即加載。因為只是簡(jiǎn)單的函數調用,這里不做其他闡述。
代碼分片有幾種方式---CommonChunkPlugin或SplitChunks,以及異步資源加載。借助這些方法可以有效的縮小資源體積,同時(shí)更好的利用緩存,給用戶(hù)更友好的體驗。
到此這篇關(guān)于webpack代碼分片的實(shí)現的文章就介紹到這了,更多相關(guān)webpack代碼分片內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站