博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack打包性能优化之路
阅读量:7235 次
发布时间:2019-06-29

本文共 3061 字,大约阅读时间需要 10 分钟。

性能优化的路没有穷尽,只有更快。打开页面越快越好,点击响应越快越好。在当今这个以快为主的时代,快才是王道。闲话扯完,说正事!!!

该优化方案以最近做的一个hybrid webapp为实例演示。

路由懒加载

(1)vue-router文件中的router使用懒加载方式。如下图所示

(2)在vue文件中,也采用类似方式引入其他vue组件

const showImage = () => import('@/components/common/showImage');复制代码

这个优化的方式在vue官网也有介绍,

启用gzip压缩和关闭sourcemap

所有现代浏览器都支持 gzip 压缩并会为所有 HTTP 请求自动协商此类压缩。启用 gzip 压缩可大幅缩减所传输的响应的大小(最多可缩减90%),从而显著缩短下载相应资源所需的时间、减少客户端的流量消耗并加快网页的首次呈现速度。 如下图所示

如果你使用的是vue-cli2生成的项目的话,在config文件夹下的index.js中可以找到这段代码。记得开启gzip压缩前要安装一个插件,如途中注释掉的一段代码所示。

生产环境去掉console代码,减少代码体积,使用uglifyjs压缩代码

图片优化

对于网页来说,在所下载的字节数中,图片往往会占很大比例。因此,优化图片通常可以卓有成效地减少字节数和改进性能:浏览器需要下载的字节数越少,对客户端带宽的争用就越少,浏览器下载内容并在屏幕上呈现内容的速度就越快。

尽量减少图片的使用,或者使用css3来代替图片效果。如果不行的话,小图片通过一定的工具合成雪碧图或者转成base64。

引用的库尽量按需加载。

(1)像一般的ui库element,vant等库都提供来按需加载的方式,避免全部引入,加大项目体积。 (2)以cdn方式载入需要的库,也可以减少打包后的体积。 在index.html文件中

引入mintui

复制代码

引入vue

复制代码

以这种外链方式引入mint-ui和vue后,需要做些别的配置

(1)在入口文件main.js 中就不需要引入vue和mintui了
(2)在build\webpack.base.conf.js中添加如下配置,意为打包的时候不打包vue和mint-ui。

externals:{  "mint-ui":"mintui",  "vue":"Vue"},复制代码

使用DllReferencePlugin

将平时不经常变动的文件抽离出来,统一打包,这样也可以减少后续打包的时间。

  • 在build文件夹中新建一个webpack.dll.conf.js.
const path = require('path')const webpack = require('webpack')const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')const UglifyJsPlugin = require('uglifyjs-webpack-plugin')module.exports = {  mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',  entry: {    vendor: [        //根据实际情况添加      'axios',      'vue/dist/vue.min.js',      'vue-router',      'vuex',      'mint-ui'    ]  },  output: {    path: path.resolve(__dirname, '../static/js'),    filename: '[name].dll.js',    library: '[name]_library'  },  module: {    rules: [      {        test: /\.vue$/,        loader: 'vue-loader'      },      {        test: /\.js$/,        loader: 'babel-loader',        exclude: /node_modules\/(?!(autotrack|dom-utils))/      }    ]  },  optimization: {    minimizer: [      new UglifyJsPlugin({        cache: true,        parallel: true,        sourceMap: false // set to true if you want JS source maps      }),      // Compress extracted CSS. We are using this plugin so that possible      // duplicated CSS from different components can be deduped.      new OptimizeCSSAssetsPlugin({})    ]  },  plugins: [    /*      @desc: https://webpack.js.org/plugins/module-concatenation-plugin/      "作用域提升(scope hoisting)",使代码体积更小[函数申明会产生大量代码](#webpack3)    */    new webpack.optimize.ModuleConcatenationPlugin(),    new webpack.DllPlugin({      path: path.join(__dirname, '.', '[name]-manifest.json'),      name: '[name]_library'    })  ]}复制代码
  • 在package.json中增加配置
"scripts": {    "build:dll": "webpack -p --progress --config build/webpack.dll.conf.js"  }复制代码

执行npm run build:dll命令就可以在根目录下生成vendor-manifest.json,static/js下生成vendor.dll.js

  • 在webpack.base.conf.js中增加如下
const manifest = require('../vendor-manifest.json')....plugins: [   //把dll的vendor-manifest.json引用到需要的预编译的依赖   new webpack.DllReferencePlugin({     manifest   })]复制代码
  • 在index.html底部添加
复制代码

目前在项目中做的优化就是这些,还是那句话,性能优化的路没有穷尽,只有更快。

参考文章

(1)

(2)
(3)

转载地址:http://ztlfm.baihongyu.com/

你可能感兴趣的文章
vijos- P1383盗窃-黑珍珠 (python + 代码优化)
查看>>
python之 前端HTML/CSS基础知识学习笔记
查看>>
终结者:负载均衡之Nginx(一)
查看>>
Python基础之控制流
查看>>
超慢速移动动画使用CSS3实现流畅效果
查看>>
为什么String类是不可变的?
查看>>
Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
查看>>
Hibernate(十五):QBC检索、本地SQL检索和HQL删除
查看>>
BZOJ 1091([SCOI2003]分割多边形-分割直线)
查看>>
<html>
查看>>
淘宝中间的一像素线(手机端)
查看>>
iOS开发 之 不要告诉我你真的懂isEqual与hash!
查看>>
vscode: Visual Studio Code 常用快捷键1
查看>>
多线程(7)多线程中的异常处理
查看>>
(转)基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式...
查看>>
java多线程之 ---- 线程死锁
查看>>
APP三种开发模式
查看>>
solr入门之solr的拼写检查功能的应用级别尝试
查看>>
《分水岭:看清中国科技和互联网未来五年的趋势》出版 腾讯科技出品
查看>>
UIButton的图片和文字相对位置调整
查看>>