最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應(yīng)速度

 更新時間:2021年07月07日 11:45:32   作者:鬼眼望天  
網(wǎng)站頁面的響應(yīng)速度與用戶體驗息息相關(guān),直接影響到用戶是否愿意繼續(xù)訪問你的網(wǎng)站,所以這篇文章主要給大家介紹了關(guān)于Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應(yīng)速度的相關(guān)資料,需要的朋友可以參考下

前言

影響網(wǎng)頁響應(yīng)速度的因素有很多,例如:請求內(nèi)容太大、http請求次數(shù)太多、服務(wù)器本身處理請求太久、JS腳本執(zhí)行耗時過長、瀏覽器回流重繪等。網(wǎng)站頁面的響應(yīng)速度與用戶體驗息息相關(guān),直接影響到用戶是否愿意繼續(xù)訪問你的網(wǎng)站。對于Vue項目而言,最普遍的問題可能在于打包后的文件太大,導(dǎo)致加載時間過長。服務(wù)器請求處理太久和js腳本執(zhí)行耗時過長,這兩個跟代碼的質(zhì)量和服務(wù)器配置關(guān)系太重,需要根據(jù)具體的項目和代碼進(jìn)行優(yōu)化,今天我們只從請求次數(shù)和打包后的單文件過大兩個層面去優(yōu)化網(wǎng)頁響應(yīng)速度(這個適用于所有前端項目)。

一.請求內(nèi)容太大

在項目打包后,我們經(jīng)常會發(fā)現(xiàn)打包后的文件 vendors 和 app 文件尤其過大,其中app.js文件里放的是項目中各個頁面的邏輯代碼,vendor.js放的是各個頁面各個組件公用的一些代碼。隨著項目復(fù)雜度的增加,該文件的大小也與日俱增。在帶寬有限的情況下,往往下載這兩個文件就會等很長時間。

解決方案:

  • 路由懶加載:分割代碼塊

Vue支持異步組件,即可以在使用組件的地方使用一個Promise,Promise最終會通過resolve回傳一個組件對象。而webpack的動態(tài)import的方式可以讓代碼分塊進(jìn)行打包,并且返回一個Promise(正是異步組件所需要的)。在路由配置表里使用import可以將各個頁面組件分割成不同的代碼塊,然后當(dāng)路由被訪問的時候才加載對應(yīng)的組件,這樣就避免將所有內(nèi)容打包在一個chunk里,從而“按需加載”,大大提高響應(yīng)速度。如下圖所示引入路由組件:

CDN引入

業(yè)務(wù)代碼是經(jīng)常更新迭代的,為了讓瀏覽器盡可能長的時間緩存我們的靜態(tài)文件,如果把類庫代碼和業(yè)務(wù)代碼打包在一起,那么類庫代碼會跟著業(yè)務(wù)代碼的更新而更新,而不能長時間的利用瀏覽器里緩存。我們希望利用緩存,減少瀏覽器流量,提高用戶瀏覽器加載速度,所以單獨拆分出來進(jìn)行打包。一般第三方包都會有script引入方案,只需要打包的時候忽略制定第三方包,然后在模板上加上相應(yīng)的導(dǎo)入鏈接。

首先沒有vue.config.js需要在項目根目錄創(chuàng)建

具體代碼如下:

const cdn = {
    // 忽略打包的第三方庫
    externals: {
      vue: 'Vue',
      "element-ui": "ELEMENT",
      'vue-router': 'VueRouter',
      vuex: 'Vuex',
      axios: 'axios',
      moment: "moment",
      echarts: "echarts"
    },
  
    // 通過cdn方式使用
    js: [
      'https://cdn.bootcss.com/vue/2.6.10/vue.runtime.min.js',
      'https://cdn.bootcss.com/vue-router/3.1.2/vue-router.min.js',
      'https://cdn.bootcss.com/vuex/3.1.1/vuex.min.js',
      'https://cdn.bootcss.com/axios/0.19.0/axios.min.js',
      'https://cdn.bootcss.com/moment.js/2.24.0/moment.min.js',
      'https://cdn.bootcss.com/echarts/3.7.1/echarts.min.js',
      "https://cdn.bootcdn.net/ajax/libs/element-ui/2.8.2/index.js",
    ],
  
    css: ["https://unpkg.com/element-ui@2.8.2/lib/theme-chalk/index.css"],
  }

module.exports = {
    publicPath: '/CRM/dist/',
    // publicPath: './',
    chainWebpack: config => {
        config.plugin('html').tap(args => {
            args[0].cdn = cdn
            return args
          })
          config.plugins.delete('prefetch')
    },
    //打包忽略第三方庫
    configureWebpack: { 
        externals: cdn.externals
    },
}

然后在 pulic/index.html 模板相應(yīng)位置上加上(添加位置自己看著來)

//下列是css ,script的話注釋換一下,仔細(xì)看很好理解,config配置是添加一個cdn變量,然后在模板中遍歷添加
 <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
    <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="external nofollow"  rel="stylesheet">
    <!-- <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>" crossorigin="anonymous"></script> --> 
  <% } %>

使用CDN還會有另外一個好處,就是可以提高打包速度。

壓縮請求資源

一般我們部署到服務(wù)器會使用nginx來做代理服務(wù)器,所有的請求都通過nginx轉(zhuǎn)發(fā)。我們可以通過配置nginx,開啟gzip。

server {
        gzip on;
        gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
}

通過上面的配置,每次瀏覽器向服務(wù)器請求資源時,服務(wù)器就會先把資源進(jìn)行壓縮后再返給瀏覽器,瀏覽器接收到后再解壓處理。這樣就可以很大的提高靜態(tài)資源的下載速度。

但還有一點,就是這樣的話,瀏覽器每次向服務(wù)器請求時,服務(wù)器都會執(zhí)行一次壓縮操作,當(dāng)請求量很大時,壓縮這個操作也會影響到服務(wù)器的響應(yīng)速度,所以我們可以直接在打包時,就將文件打包成壓縮包。這樣不用服務(wù)器頻繁的去打包:

安裝依賴:compression-webpack-plugin

npm install compression-webpack-plugin --save-dev

vue.config.js修改:

const CompressionPlugin = require('compression-webpack-plugin');
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;
module.exports = {
    publicPath: './',
    productionSourceMap: false,
    configureWebpack: {...},
    chainWebpack: config => {
        config.resolve.alias.set('@', resolve('src'));
        if (process.env.NODE_ENV === 'production') {
            config.plugin('compressionPlugin')
            .use(new CompressionPlugin({
                filename: '[path].gz[query]',
                algorithm: 'gzip',
                test: productionGzipExtensions,
                threshold: 10240,
                minRatio: 0.8,
                deleteOriginalAssets: true
            }));
        }
    },
};

nginx配置

server {
        gzip_static on;
        gzip on;
        gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
}

一.http請求次數(shù)太多

所有的事情都有個度,也就是我們所說的物極必反。我們采用按需加載,代碼分割打包后,當(dāng)項目越來越大,模塊越來越多的時候,項目打包后,我們就會發(fā)現(xiàn)會生成很多的文件。對于前端性能而言,雖然每個文件更小了,但可能意味著更多的網(wǎng)絡(luò)連接建立和關(guān)閉的開銷,因此在前端優(yōu)化的實踐中,通常需要在文件數(shù)量和單個文件大小之間取得平衡。這里,我們可以利用webpack提供的插件 MinChunkSizePlugin, 通過合并小于 minChunkSize 大小的 chunk,將 chunk 體積保持在指定大小限制以上

解決方案:

vue.config.js配置

module.exports = {
    publicPath: './',
    productionSourceMap: false,
    configureWebpack: {
        plugins: [
            new webpack.optimize.MinChunkSizePlugin({
              minChunkSize: 10000 // Minimum number of characters
            })
        ]
    },
}

通過以上這些操作,我們可以將打包后的文件控制在合理的大小和數(shù)量范圍之內(nèi),再配合ngnix配置,開啟gzip,基本上就可以解決大部分vue單頁面應(yīng)用,首次加載等待時間過長的問題。

總結(jié)

到此這篇關(guān)于Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應(yīng)速度的文章就介紹到這了,更多相關(guān)Vue項目打包、合并及壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue?和?Django?實現(xiàn)?Token?身份驗證的流程

    Vue?和?Django?實現(xiàn)?Token?身份驗證的流程

    這篇文章主要介紹了Vue?和?Django?實現(xiàn)?Token?身份驗證?,Vue.js?和?Django?編寫的前后端項目中,實現(xiàn)了基于?Token?的身份驗證機(jī)制,其他前后端框架的?Token?實現(xiàn)原理與本文一致,需要的朋友可以參考下
    2022-08-08
  • uniapp中使用u-loadmore,loadText內(nèi)容不隨status改變刷新方式

    uniapp中使用u-loadmore,loadText內(nèi)容不隨status改變刷新方式

    這篇文章主要介紹了uniapp中使用u-loadmore,loadText內(nèi)容不隨status改變刷新方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Vue?axios庫發(fā)送請求的示例介紹

    Vue?axios庫發(fā)送請求的示例介紹

    axios是基于promise的HTTP庫,可以使用在瀏覽器和node.js中,它不是vue的第三方插件,vue-axios是axios集成到Vue.js的小包裝器,可以像插件一樣安裝使用:Vue.use(VueAxios,?axios),本文給大家介紹Vue?axios和vue-axios關(guān)系,感興趣的朋友一起看看吧
    2022-08-08
  • vue 實現(xiàn)axios攔截、頁面跳轉(zhuǎn)和token 驗證

    vue 實現(xiàn)axios攔截、頁面跳轉(zhuǎn)和token 驗證

    這篇文章主要介紹了vue 實現(xiàn)axios攔截、頁面跳轉(zhuǎn)和token 驗證,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 解決vue net :ERR_CONNECTION_REFUSED報錯問題

    解決vue net :ERR_CONNECTION_REFUSED報錯問題

    這篇文章主要介紹了解決vue net :ERR_CONNECTION_REFUSED報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue子組件向父組件通信與父組件調(diào)用子組件中的方法

    Vue子組件向父組件通信與父組件調(diào)用子組件中的方法

    這篇文章主要介紹了Vue子組件向父組件通信與父組件調(diào)用子組件中的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • vue基于Element按鈕權(quán)限實現(xiàn)方案

    vue基于Element按鈕權(quán)限實現(xiàn)方案

    這篇文章主要介紹了vue基于Element按鈕權(quán)限實現(xiàn)方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Vue3常用的通訊方式總結(jié)與實例代碼

    Vue3常用的通訊方式總結(jié)與實例代碼

    Vue.js中一個很重要的知識點是組件通信,不管是業(yè)務(wù)類的開發(fā)還是組件庫開發(fā),都有各自的通訊方法,下面這篇文章主要給大家介紹了關(guān)于Vue3常用的通訊方式的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 解決vue 格式化銀行卡(信用卡)每4位一個符號隔斷的問題

    解決vue 格式化銀行卡(信用卡)每4位一個符號隔斷的問題

    這篇文章主要介紹了vue 格式化銀行卡(信用卡)每4位一個符號隔斷的問題,本文給大家分享了解決方法,需要的朋友可以參考下
    2018-09-09
  • vue通過數(shù)據(jù)過濾實現(xiàn)表格合并

    vue通過數(shù)據(jù)過濾實現(xiàn)表格合并

    這篇文章主要為大家詳細(xì)介紹了vue通過數(shù)據(jù)過濾實現(xiàn)表格合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論

怀仁县| 海丰县| 华容县| 北川| 大邑县| 寻乌县| 井冈山市| 红原县| 庆安县| 淮北市| 舟曲县| 漾濞| 措勤县| 武功县| 泾川县| 四子王旗| 杭锦后旗| 天祝| 雅江县| 新乡市| 霍州市| 乐都县| 蒲城县| 镇平县| 阳城县| 平江县| 顺平县| 高安市| 南汇区| 阿坝县| 淳化县| 曲麻莱县| 龙泉市| 岳普湖县| 邳州市| 台江县| 玉山县| 通山县| 仲巴县| 南靖县| 台北市|