webpack的性能优化

webpack项目优化主要分为两个方面的优化,生产环境的代码优化和开发环境的项目构建优化

生产环境的代码优化

  • 第一、首屏加载速度 --- 由于spa应用(单页应用)的特点,其首次加载白屏问题是不可避免的,我们只能通过一些方法减少白屏时间或者优化白屏时的用户体验
    1. 减少白屏时间
    • 将项目中的第三方安装包通过CDN引入

      index.html

           <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
           <script src="https://cdn.bootcss.com/vue-router/3.0.2/vue-router.min.js"></script>
           <script src="https://cdn.bootcss.com/element-ui/2.6.1/index.js"></script>
           <script src="https://cdn.bootcss.com/lodash.js/4.17.11/lodash.min.js"></script>
      

      webpack的配置文件

           config.externals = {
                'vue': 'Vue',
                'vue-router': 'VueRouter',
                'element-ui': 'ELEMENT',
                'lodash': '_'
           }
      
    • 提取提取公共依赖(new webpack.optimize.CommonsChunkPlugin("common.js"))
    • 配置html、css代码压缩
    • 开启gzip压缩(需要服务器也进行gzip的配置)
    • 优化白屏时的用户体验
  1. 项目打包之后vendor或者app.css文件较大
    • 将我们不经常改变版本的第三方安装包(vue、vue-router、vux、axios、loadsh等)通过cdn的方式引入
    • 将我们使用的第三方组件库的css文件也通过cdn引入
  2. 代码分片实现路由懒加载
    • require.ensure([dependencies], callback,errorCalback,chunkName)
      path: 'home',
      getComponent: (nextState, cb) => {
        require.ensure([], require => {
          cb(null, require('./home'))
        })
      }
      
    • es6 的import()进行动态加载
    • Vue 的异步组件和 Webpack 的代码分割功能
      const Foo = () => import('./Foo.vue')
      { path: '/foo', component: Foo }
      
  3. 优化devtool减少文件体积
    • 关闭生产环境的SourceMap(生产环境的SourceMap真心没有什么用处,如果纠结的话可以选择开启低级别的SourceMap)具体配置参考

    https://webpack.js.org/configuration/devtool/#root

开发环境的项目构建优化

  1. Dllplugin提高项目构建速度
  2. 热替换
         devServer: {
              contentBase: path.resolve(__dirname, 'dist'),//需要监听的文件路径
              host: '192.168.56.1',//服务器地址
              compress: true,//开启  服务器压缩
              port: 3001 // 端口
         }
    
  3. 配置合适的 delvtool


  4. HappyPack 配置更多的电脑资源用于项目构建
      const HappyPack = require('happypack');
      exports.module = {
           rules: [
                {
                     test: /.js$/,
                     use: 'happypack/loader'
                }
           ]
      };
      exports.plugins = [
           new HappyPack({
                loaders: [ 'babel-loader?presets[]=es2015' ]
           })
      ];
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天终于过上一个周末了,终于不用陪女朋友逛街,看电影,吃吃吃的我立刻打开电脑撸了一把代码,爽的一匹。 嘿嘿...
    Yubble阅读 3,237评论 0 1
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 10,709评论 4 31
  • 原文http://www.cnblogs.com/libin-1/p/6596810.html 版本号 vue-c...
    tengrl阅读 9,152评论 0 0
  • 前言:在现实项目中,我们可能很少需要从头开始去配置一个webpack 项目,特别是webpack4.0发布以后,零...
    97e7dbf546de阅读 5,668评论 0 14
  • 前端将大型项目分成一个个单独的模块,一般封装好的每个模块都会实现一个目的明确的完成的功能。如何处理这些模块以及模块...
    pixels阅读 8,718评论 1 14

友情链接更多精彩内容