Vue-Cli項(xiàng)目優(yōu)化操作的實(shí)現(xiàn)
起源
由Vue-Cli(2.X)生成的Vue項(xiàng)目中存在著首屏加載過慢,編譯資源過大等問題,主要針對這些問題對項(xiàng)目進(jìn)行相應(yīng)的優(yōu)化,提升項(xiàng)目響應(yīng)速度,優(yōu)化項(xiàng)目性能。
操作
路由懶加載
在Vue-router官方文檔中有針對懶加載的介紹,主要是將整個(gè)大的js進(jìn)行切片,對當(dāng)前路由的資源進(jìn)行一個(gè)按需加載。在Vue-cli生成的路由組件引用方法是這樣的
import HelloWorld from '@/components/HelloWorld'
只需將組件的引用方式改為
const HelloWorld = () => import ('@/components/HelloWorld')
然后重新編譯即可
開啟預(yù)加載/優(yōu)先加載
使用webpack插件 PreloadWebpackPlugin 進(jìn)行預(yù)加載prefetch和優(yōu)先加載preload。 主要做的是用preload加載vendor、manifest與app三個(gè)js而用prefetch去加載所有路由對應(yīng)的文件。 首先要 安裝插件
npm install --save preload-webpack-plugin
在 webpack.prod.conf.js 中修改,加入預(yù)加載的代碼 (注意放在 new HtmlWebpackPlugin() 的下面)
new PreloadWebpackPlugin({ rel: 'prefetch', }), new PreloadWebpackPlugin({ rel: 'preload', as(entry) { if (/\.css$/.test(entry)) return 'style' return 'script'; }, include: ['app', 'vendor', 'manifest'] })
開啟GZip
gzip,使用gzip壓縮資源可以更快地加載資源??蛻舳薶ttp請求頭聲明瀏覽器支持的壓縮方式,服務(wù)端配置啟用壓縮,壓縮的文件類型,壓縮方式。當(dāng)客戶端請求到服務(wù)端的時(shí)候,服務(wù)器解析請求頭,如果客戶端支持gzip壓縮,響應(yīng)時(shí)對請求的資源進(jìn)行壓縮并返回給客戶端,瀏覽器按照自己的方式解析,在http響應(yīng)頭,我們可以看到 content-encoding:gzip ,這是指服務(wù)端使用了gzip的壓縮方式。
啟用gzip,在nginx的site-conf中開啟gzip
server { gzip on; gzip_types text/xml text/css text/plain text/javascript application/javascript application/x-javascript; }
webpack處理,需要先安裝插件
npm install --save-dev compression-webpack-plugin
然后在config的index.js中 ,將productionGzip改為true,開啟Gzip壓縮。
PS:如果編譯報(bào)錯,則安裝 compression-webpack-plugin@1.1.12 版本
對第三方工具庫進(jìn)行額外處理
本項(xiàng)目中Vender中主要是Vue,Vue-router,axios等固定依賴的代碼,工具庫的代碼一般不會改動,所以可以將這些工具庫的代碼抽出來,單獨(dú)走CDN加載以減少編譯JS文件的大小。 具體操作 : 選擇相應(yīng)的工具庫版本的cdn,加入到index.html中
<script src="http://cdn.bootcss.com/vue/2.2.5/vue.min.js"></script> <script src="http://cdn.bootcss.com/vue-router/2.3.0/vue-router.min.js"></script> <script src="http://cdn.bootcss.com/vuex/2.2.1/vuex.min.js"></script> <script src="http://cdn.bootcss.com/axios/0.15.3/axios.min.js"></script>
之后去到webpack中修改相應(yīng)的打包配置
externals: { 'vue': 'Vue', 'vue-router': 'VueRouter', 'vuex': 'Vuex', 'axios': 'axios' }
ps:倘若main.js中有關(guān)于公共庫的引用 請記得清除掉 這時(shí)再去編譯 打包 就會發(fā)現(xiàn)編譯的Vender.js小了很多
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue3結(jié)合TypeScript項(xiàng)目開發(fā)實(shí)踐總結(jié)
本文主要介紹了Vue3結(jié)合TypeScript項(xiàng)目開發(fā)實(shí)踐總結(jié),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Nuxt3+ElementPlus構(gòu)建打包部署全過程
網(wǎng)上大部分關(guān)于Nuxt打包部署教程可謂是可以用五花八門來形容,這對于第一次接觸的朋友簡直是無從下手,這篇文章主要給大家介紹了關(guān)于Nuxt3+ElementPlus構(gòu)建打包部署的相關(guān)資料,需要的朋友可以參考下2023-01-01vue-cli項(xiàng)目根據(jù)線上環(huán)境分別打出測試包和生產(chǎn)包
這篇文章主要介紹了vue-cli項(xiàng)目根據(jù)線上環(huán)境打出測試包和生產(chǎn)包的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05vue項(xiàng)目如何修改title旁邊的icon圖片
這篇文章主要介紹了vue項(xiàng)目如何修改title旁邊的icon圖片,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12vue-router實(shí)現(xiàn)tab標(biāo)簽頁(單頁面)詳解
這篇文章主要為大家詳細(xì)介紹了vue-router實(shí)現(xiàn)tab標(biāo)簽頁的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10