国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

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

發(fā)布時(shí)間:2021-08-17 12:16 來(lái)源: 閱讀:0 作者:鬼眼望天 欄目: JavaScript 歡迎投稿:712375056

目錄

    前言

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

    一.請求內容太大

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

    解決方案:

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

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

    cdn/' target='_blank'>CDN引入

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

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

    具體代碼如下:

    const cdn = {
        // 忽略打包的第三方庫
        externals: {
          vue: 'Vue',
          "element-ui": "ELEMENT",
          'vue-router': 'VueRouter',
          vuex: 'Vuex',
          axios: 'axios',
          moment: "moment",
          echarts: "echarts"
        },
      
        // 通過(guò)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 模板相應位置上加上(添加位置自己看著(zhù)來(lái))

    //下列是css ,script的話(huà)注釋換一下,仔細看很好理解,config配置是添加一個(gè)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還會(huì )有另外一個(gè)好處,就是可以提高打包速度。

    壓縮請求資源

    一般我們部署到服務(wù)器會(huì )使用nginx來(lái)做代理服務(wù)器,所有的請求都通過(guò)nginx轉發(fā)。我們可以通過(guò)配置nginx,開(kāi)啟gzip。

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

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

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

    安裝依賴(lài):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請求次數太多

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

    解決方案:

    vue.config.js配置

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

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

    總結

    到此這篇關(guān)于Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁(yè)響應速度的文章就介紹到這了,更多相關(guān)Vue項目打包、合并及壓縮內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(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í)歡迎投稿傳遞力量。

    日韩精品久久久久久久电影蜜臀| 琪琪777午夜理论片在线观看播放| 在线精品自偷自拍无码中文| 中文字幕久热精品视频在线| 成全视频在线观看免费看下载| 久久久久成人精品无码中文字幕|