vue+webpack 前端性能優(yōu)化

背景

? ? ?對于程序開發(fā)者而言,開發(fā)一個項目不僅僅注重效率和功能,前端的性能問題也是非常重要的。這直接影響用戶的體驗,從而間接的也反應該項目質量的好壞。
? ? ?影響項目性能的原因有很多,如:資源文件的大小,業(yè)務的繁雜程度等,所以前端優(yōu)化的方式也很多。這些東西很零碎,容易被人遺忘。所以這篇文章中對我平時用的優(yōu)化方式總結一下,可能不是太全面,大家有其它的優(yōu)化方式可以留言,互相交流下喲。不說了,麻溜的寫。。

優(yōu)化一: vue-router路由懶加載

? ? ?懶加載:也叫延遲加載,即在需要的時候進行加載,隨用隨載。
? ? ?使用懶加載的原因: vue是單頁面應用,使用webpcak打包后的文件很大,會使進入首頁時,加載的資源過多,頁面會出現(xiàn)白屏的情況,不利于用戶體驗。運用懶加載后,就可以按需加載頁面,提高用戶體驗。

懶加載的寫法:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export default new Router({
  mode: 'history',
  routes: [
   {
      path: '/',
      component: resolve => require(['@/components/DefaultIndex'],resolve),
      children: [
        {
          path: '',
          component: resolve => require(['@/components/Index'],resolve)
        },
        {
          path: '*',
          redirect: '/Index'
        }
      ]
})

非懶加載的路由配置:

import Vue from 'vue'
import Router from 'vue-router'
import DefaultIndex from '@/components/DefaultIndex'
import Index from '@/components/Index'
Vue.use(Router)
export default new Router({
  mode: 'history',
  routes: [
   {
      path: '/',
      component: 'DefaultIndex ',
      children: [
        {
          path: '',
          component: 'Index'
        },
        {
          path: '*',
          redirect: '/Index'
        }
      ]
})

優(yōu)化二:webpack壓縮圖片(減少圖片大?。?/h2>

? ? ?一般在vue項目中用webpack打包時,會根據(jù)webpack.base.conf.jsurl-loader中設置limit大小來對圖片處理,對小于limit的圖片轉化為base64格式,其余的不做操作。所以對有些較大的圖片資源,在請求資源的時候,加載會很慢,可以用image-webpack-loader來壓縮圖片。

安裝:
npm install image-webpack-loader --save-dev
配置:

? ? ? 在webpack.base.conf.js文件中引入配置(此項目我用的是腳手架搭建的,所以是webpack.base.conf.js

1: 引入:
require("image-webpack-loader")
2:配置:
  module: {
    rules: [
    ...(config.dev.useEslint ? [createLintingRule()] : []),
    {
      test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
      loader: 'url-loader',
      options:   {
       loader: 'image-webpack-loader',
       options: {
        bypassOnDebug: true,
      }
    }
  },
或者也可配置為:
{
  test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
  use:[
    {
    loader: 'url-loader',
    options: {
      limit: 10000,
      name: utils.assetsPath('img/[name].[hash:7].[ext]')
      }
    },
    {
      loader: 'image-webpack-loader',
      options: {
        bypassOnDebug: true,
      }
    }
  ]
}

優(yōu)化三:打包后的js過大,將js打包多個文件

? ? ?由于webpack打包后的js過大,以至于在加載資源時間過長。所以將文件打包成多個js文件,在需要的時候按需加載。

優(yōu)化方案:
entry:{ 
 main:'xxx.js'
} 
plugins:{
 new commonsChunkPlugin({
 name:'commons',
 minChunks:function(module){
  // 下邊return參考的vue-cli配置
  // any required modules inside node_modules are extracted to vendor
  return (
   module.resource &&
   /\.js$/.test(module.resource) &&
   module.resource.indexOf(
   path.join(__dirname, '../node_modules')
   ) === 0
  )
 }
}) ,
// 以下才是關鍵
new commonsChunkPlugin({
 name:'charts',
 chunks:['commons'] 
 minChunks:function(module){
  return (
   module.resource &&
   /\.js$/.test(module.resource) &&
   module.resource.indexOf(
   path.join(__dirname, '../node_modules')
   ) === 0 && ['jquery.js', 'highcharts.js','echarts'].indexOf( module.resource.substr(module.resource.lastIndexOf('/')+1).toLowerCase() ) != -1
  )
 }
}) 
}

優(yōu)化四:去掉不必要的插件

? ? ?1:打包時,將一些不必要的插件可以去掉,以防止打包一些無用的資源,導致打包后的文件過大,影響性能。
? ? ?2:在引入第三方插件的時候,如果該插件的組件過大,可以按需引入,如element-ui。
? ? ?3:使用webpack.optimize.UglifyJsPlugin插件壓縮混淆js代碼,使用方法如下:


plugins: [//webpack.config.jsnew webpack.optimize.UglifyJsPlugin({    warnings: false,
    compress: {
        join_vars: true,
        warnings: false,
    },
    toplevel: false,
    ie8: false,
]

優(yōu)化五: gzip壓縮

? ? ?web前端項目,靜態(tài)資源放在cdn上比較多,gzip的壓縮是非常必要的,它直接改變了js文件的大小,減少兩到三倍。
參考加速nginx: 開啟gzip和緩存,nginxgzip配置非常簡單,在你對應的域名底下,添加下面的配置,重啟服務即可。gzip_comp_level的值大于2的時候并不明顯,建議設置在1或者2之間。

# 開啟gzip
gzip on;
# 啟用gzip壓縮的最小文件,小于設置值的文件將不會壓縮
gzip_min_length 1k;
# gzip 壓縮級別,1-10,數(shù)字越大壓縮的越好,也越占用CPU時間,后面會有詳細說明
gzip_comp_level 2;
# 進行壓縮的文件類型。javascript有多種形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建議開啟
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";

? ? ?這種方法我 沒有使用過,有用過的親,可以留言,溝通一下下。

優(yōu)化六: 服務器緩存

? ? ?為了提高服務器獲取數(shù)據(jù)的速度,nginx緩存著靜態(tài)資源是非常必要的。如果是測試服務器對html應該不設置緩存,而js等靜態(tài)資源環(huán)境因為文件尾部會加上一個hash值,這可以有效實現(xiàn)緩存的控制。

location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { 
  access_log   off; 
  expires      30d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
  access_log   off;
  expires      24h;
}
location ~* ^.+\.(html|htm)$ {
  expires      1h;
}
好了,就總結到這里了,這些優(yōu)化的方法希望可以幫助到你們,其中優(yōu)化五和優(yōu)化六,我也沒有使用過,具體的可以再詳細的百度一下。 你們如果有其它好的優(yōu)化方式,可以和我分享一下。?( ′???` )比心
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容