电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Vue 打包體積優(yōu)化方案小結(jié)

瀏覽:2日期:2023-01-19 15:02:25

Vue-cli3 打包體積優(yōu)化方案

前言:

公司項(xiàng)目完成后 ,打包完成后有1.18MB,其實(shí)感覺還行了,但是還可以有優(yōu)化的地方,對(duì)于咱們有精益求精(有沒有還是有點(diǎn)*數(shù)的)的精神下再去優(yōu)化,可以先在項(xiàng)目中安裝webpack-bundle-analyzer可以看到各個(gè)文件的大小

npm install webpack-bundle-analyzer -save-dev

在vue.config.js中進(jìn)行配置

module.exports = { chainWebpack: config => { config .plugin(’webpack-bundle-analyzer’) .use(require(’webpack-bundle-analyzer’).BundleAnalyzerPlugin) }}

執(zhí)行npm run build 或者 npm run serve 會(huì)出現(xiàn)這花里胡哨的界面用來分析文件大小

Vue 打包體積優(yōu)化方案小結(jié)

分析

還沒進(jìn)行優(yōu)化前vendor~app.xxxx.js 有1.18MB,咱們可以查看各個(gè)bundle大小,針對(duì)性的進(jìn)行優(yōu)化

Vue 打包體積優(yōu)化方案小結(jié)

優(yōu)化

CDN加載

對(duì)于vue、vue-router、vuex、axios等都可以在生產(chǎn)環(huán)境用CDN加載

const externals = { ’vue’: ’Vue’, ’vue-router’: ’VueRouter’, ’vuex’: ’Vuex’, ’axios’: ’axios’}const cdn = { css: [], js: [ ’https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js’, ’https://cdn.jsdelivr.net/npm/vue-router@3.0.1/dist/vue-router.min.js’, ’https://cdn.jsdelivr.net/npm/vuex@3.0.1/dist/vuex.min.js’, ’https://cdn.jsdelivr.net/npm/axios@0.18.0/dist/axios.min.js’, ]}module.exports = { chainWebpack: config => { config .plugin(’webpack-bundle-analyzer’) .use(require(’webpack-bundle-analyzer’).BundleAnalyzerPlugin) config.plugin(’html’).tap(args => { if (process.env.NODE_ENV === ’production’) { args[0].cdn = cdn } return args }) },configureWebpack: config => { if (process.env.NODE_ENV === ’production’) { return { externals: externals, }; } },}

接著修改pubilc/index.html文件

<!DOCTYPE html><html lang='en'><head> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='viewport' content='width=device-width,initial-scale=1.0'> <link rel='icon' href='http://www.hdgsjgj.cn/bcjs/<%= BASE_URL %>favicon.png' rel='external nofollow' > <!-- 使用CDN的CSS文件 --> <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %> <link href='http://www.hdgsjgj.cn/bcjs/<%= htmlWebpackPlugin.options.cdn.css[i] %>' rel='external nofollow' rel='external nofollow' rel='preload' as='style'> <link href='http://www.hdgsjgj.cn/bcjs/<%= htmlWebpackPlugin.options.cdn.css[i] %>' rel='external nofollow' rel='external nofollow' rel='stylesheet'> <% } %> <!-- 使用CDN的JS文件 --> <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> <link href='http://www.hdgsjgj.cn/bcjs/<%= htmlWebpackPlugin.options.cdn.js[i] %>' rel='external nofollow' rel='preload' as='script'> <% } %> <title>上海比戶</title></head><body> <noscript> <strong></strong> </noscript> <div id='app'></div> <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> <script src='http://www.hdgsjgj.cn/bcjs/<%= htmlWebpackPlugin.options.cdn.js[i] %>'></script> <% } %></body></html>

路由懶加載

當(dāng)打包應(yīng)用的時(shí)候,JavaScript包會(huì)變的特別大,影響頁面加載,如果這時(shí)我們?cè)谠L問路由的時(shí)候去加載該模塊,那會(huì)變的十分高效,把靜態(tài)引入方式改為動(dòng)態(tài)引入方式

import ComponentA from ’../page/components/ComponentA’;routeList = [ { path: ’/comA’, component: ComponentA },]//改為routeList = [ { path: ’/comA’, component: () => import(’../page/components/ComponentA’) },]

由于我的項(xiàng)目一開始就用了路由懶加載,所以在打包文件上看不出體積大小的變化,但是大概會(huì)有個(gè)300k的大小減少

在vue cli3中,我們還需要手動(dòng)移除prefetch,Preload,因?yàn)樵趘ue cli 官方文檔上提到,可以去了解下,我這大致概括了下

就是當(dāng)首屏加載的時(shí)候,會(huì)一次性下載完所以的路由文件,這會(huì)導(dǎo)致首屏的時(shí)候請(qǐng)求內(nèi)容變多,首屏加載變慢,修改如下

module.exports = { chainWebpack: config => { config .plugin(’webpack-bundle-analyzer’) .use(require(’webpack-bundle-analyzer’).BundleAnalyzerPlugin) config.plugin(’html’).tap(args => { if (process.env.NODE_ENV === ’production’) { args[0].cdn = cdn } return args }) // 移除 prefetch 插件 config.plugins.delete(’prefetch’) // 移除 preload 插件 config.plugins.delete(’preload’); }, configureWebpack: config => { if (process.env.NODE_ENV === ’production’) { return { externals: externals, }; } },}

element-ui 按需加載

看element-ui/lib 這個(gè)包就占了總包大小的三分之二,554k,總包也就700多k,所以如果把element-ui 按需加載,那就可以減少體積,按需加載這就不說了吧,都會(huì)~:stuck_out_tongue_closed_eyes:

但是需要在 babel.config.js文件中添加(vue cli3 中需要安裝 babel-plugin-component)

module.exports = { presets: [’@vue/app’], //加上這~ plugins: [ [ ’component’, { libraryName: ’element-ui’, styleLibraryName: ’theme-chalk’ } ] ]};

gzip

安裝 compression-webpack-plugin

nmp i compression-webpack-plugin -D

在vue.config.js中引入

const CompressionPlugin = require(’compression-webpack-plugin’);module.exports = { chainWebpack: config => { config .plugin(’webpack-bundle-analyzer’) .use(require(’webpack-bundle-analyzer’).BundleAnalyzerPlugin) config.plugin(’html’).tap(args => { if (process.env.NODE_ENV === ’production’) { args[0].cdn = cdn } return args }) // 移除 prefetch 插件 config.plugins.delete(’prefetch’) // 移除 preload 插件 config.plugins.delete(’preload’); }, configureWebpack: config => { if (process.env.NODE_ENV === ’production’) { return { externals: externals, plugins: [ //gzip壓縮 new CompressionPlugin({ test: /.js?¨E92E.html|.html?¨E92E.html|.css/, //匹配文件名 threshold: 10240, //對(duì)超過10k的數(shù)據(jù)壓縮 deleteOriginalAssets: false //不刪除源文件 }) ], performance: { hints: false } }; } },}

可以在上面的圖看到,進(jìn)行g(shù)zip壓縮后的文件最大的也只有140k了

但是還需要在服務(wù)端配置

scss文件引入

我們通常會(huì)把scss文件抽離出來,一些共用樣式,主題等,然后會(huì)在每個(gè)需要的組件中引入會(huì)顯得繁瑣,我們可以借助scss-loader進(jìn)行預(yù)處理

例如我們有 resetTable.scss 文件,可以在vue.config.js中引入

module.exports = { chainWebpack: config => { config .plugin(’webpack-bundle-analyzer’) .use(require(’webpack-bundle-analyzer’).BundleAnalyzerPlugin) config.plugin(’html’).tap(args => { if (process.env.NODE_ENV === ’production’) { args[0].cdn = cdn } return args }) // 移除 prefetch 插件 config.plugins.delete(’prefetch’) // 移除 preload 插件 config.plugins.delete(’preload’); }, configureWebpack: config => { if (process.env.NODE_ENV === ’production’) { return { externals: externals, plugins: [ //gzip壓縮 new CompressionPlugin({ test: /.js?¨E92E.html|.html?¨E92E.html|.css/, //匹配文件名 threshold: 10240, //對(duì)超過10k的數(shù)據(jù)壓縮 deleteOriginalAssets: false //不刪除源文件 }) ], performance: { hints: false } }; } }, // scss設(shè)置 css: { loaderOptions: { sass: { //我是放在 assets/commcss 目錄下 data: ’@import '@assets/commcss/resetTable.scss';’ } }, },}

上面這圖就是完整的vue.config.js配置啦~

總結(jié):

​ 以上就是目前我在項(xiàng)目中優(yōu)化的點(diǎn),但肯定還有其他的優(yōu)化地方,可以相互討論

到此這篇關(guān)于Vue 打包體積優(yōu)化方案小結(jié)的文章就介紹到這了,更多相關(guān)Vue 打包體積優(yōu)化內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | CE认证_产品欧盟ROHS-REACH检测机构-商通检测 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 贝朗斯动力商城(BRCPOWER.COM) - 买叉车蓄电池上贝朗斯商城,价格更超值,品质有保障! | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 直线模组_滚珠丝杆滑台_模组滑台厂家_万里疆科技 | 山东艾德实业有限公司| 家乐事净水器官网-净水器厂家「官方」| 奥因-光触媒除甲醛公司-除甲醛加盟公司十大品牌 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 家用净水器代理批发加盟_净水机招商代理_全屋净水器定制品牌_【劳伦斯官网】 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | 学生作文网_中小学生作文大全与写作指导 | 房间温控器|LonWorks|海思 | 耐火砖厂家,异形耐火砖-山东瑞耐耐火材料厂 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 开云(中国)Kaiyun·官方网站 - 登录入口 | 凝胶成像仪,化学发光凝胶成像系统,凝胶成像分析系统-上海培清科技有限公司 | 冷油器-冷油器换管改造-连云港灵动列管式冷油器生产厂家 |