zoukankan      html  css  js  c++  java
  • webpack打包优化

    此次优化主要使用了happypackcache-loader两个打包的插件

    happypack

    在使用 Webpack 对项目进行构建时,会对大量文件进行解析和处理。当文件数量变多之后,Webpack 构件速度就会变慢, Happypack 作用在 loader 上, 可以将文件解析任务分解成多个子进程并发执行。子进程处理完任务后再将结果发送给主进程。所以可以大大提升 Webpack 的项目构件速度。

    ⚠️在测试 Demo 或者小型项目中,使用 happypack 对项目构建速度的提升不明显,甚至会增加项目的构建速度, 在比较复杂的大中型项目中,使用 happypack 才能看到比较明显的构建速度提升

    • 使用
     npm install happypack --save-dev (安装)
    
    //在webpack.base.config.js文件里面
    const HappyPack = require('happypack');
    
    module.exports = {
        ...
        module: {
            rules: [
                test: /.js$/,
                // 用下面的方式替换成 happypack/loader,并使用 id 指定创建的 HappyPack 插件
                use: ['happypack/loader?id=babel'],
                include: [resolve('src')]
            ]
        },
        plugins: [
            ...,
            new HappyPack({
                /*
                 * 必须配置
                 */
                // id 标识符,要和 rules 中指定的 id 对应起来
                id: 'babel',
                // 需要使用的 loader,用法和 rules 中 Loader 配置一样
                // 可以直接是字符串,也可以是对象形式
                loaders: ['babel-loader']
            })
        ]
    }
    
    • 效果
      bulid time 减少了大约 10%-20%左右

    cache-loader

    在一些性能开销较大的 loader 之前添加cache-loader,会将结果缓存到磁盘里, 因为要写入到磁盘上,所以第一次的 build 会比原本还要多花一些时间,但是第二次 build 就会减少很多的时间。

    ⚠️ 请注意,保存和读取这些缓存文件会有一些时间开销,所以请只对性能开销较大的 loader 使用此 loader,经对比发现,对babel-loader和ts-loader使用cache-loader, 效果明显。

    • 使用
     npm install cache-loader --save-dev (安装)
    
    //在webpack.base.config.js文件里面
    module.exports = {
      ...
      module: {
        rules: [
          {
            test: /.js$/,
            // 直接将cache-loader放在需要缓存的loader前面即可
            use: ['cache-loader', 'babel-loader'],
            include: [resolve('src')],
          },
        ],
      },
    };
    
    • 效果
      除开第一次build需要花费较长时间外,后面bulid time 减少了大约 20%-40%左右

    ▶◀除此之外,还修改了原来的打包方式, 原打包方式是会直接删除release文件夹,release文件夹里面包含了dist文件夹, node_modules,server.js等文件,这些都是部署到服务器需要的文件, 删除后会重新生成新的文件, 然后一些第三方的依赖包也要重新下载,这就浪费了很多时间,因为大部分的第三方依赖包是没有什么变化的,所有我们应该保留release文件里面的node_modules文件, 每次只需要下载新的依赖包就可以了,这样会节省很多时间。

    //修改前的package.json, 删除了整个release文件夹
    "package": "rimraf release && yarn run build && gulp && (cd release && yarn install --prod && tar cvfz package.tar.gz * && mkdir package && mv package.tar.gz package)",
    
    //修改后的package.json, 删除了rimraf release, 保留了release文件夹
    "package": "yarn run build && gulp && (cd release && yarn install --prod && tar cvfz package.tar.gz * && mkdir package && mv package.tar.gz package)",
    
    //修改前的gulpfile.js, 清除整个release文件夹
    gulp.task('clean', () => del.sync(['release']))
    
    //修改后的gulpfile.js, 删除了release文件夹里面的除了node_modules以外的所有内容,这些被删除的文件会在build后重新生成。
    gulp.task('clean', function() {
      return del.sync(['release/**', '!release', '!release/node_modules', '!release/node_modules/**']);
    });
    
      • 效果
        效果比较明显,bulid time 减少了大约 20%-30%左右
  • 相关阅读:
    [转]Java连接oracle数据库实例
    class.forname().newInstance()
    使用jdbc调用Oracle报错:ORA00911 无效字符
    使用HttpWebRequest需要设置Accept和UserAgent属性
    IIS应用程序池(进程池)假死问题解决办法
    windows调试工具集
    广东电信最新DNS更新了
    Web2.0样式
    一个开源的flash幻灯片展示源码文件
    Microsoft Visio2003 简体中文版 下载
  • 原文地址:https://www.cnblogs.com/qilj/p/12447464.html
Copyright © 2011-2022 走看看