初探webpack4--简单理解打包优化

webpack打包优化技巧
  优化打包速度:
  影响打包速度: 文件多、依赖多

  1、减少文件搜索范围
    (1) 优化resolve.extensions配置
      在导入语句没带文件后缀时,webpack会自动带上后去尝试询问文件是否存在在配置resolve.extensions时你需要要遵守一下几点,以做到尽可能的优化构建性能:后缀尝试列表要尽可能的小,不要把项目中不可能存在的情况写到后缀尝试列表中频率出现最高的文件后缀要优先放在最前面,以做到尽快的退出寻找过程在源码中写导入语句时,尽可能的带上后缀,避免寻找过程
    (2)优化resolve.modules配置
      resolve.modules 用于配置webpack去哪些目录下寻找第三方模块
      resolve.modules 默认值是[‘node_modules‘],会采用向上递归搜索的方式查找 所以直接设置 绝对路径可以减少搜索步骤

      function resolve (dir) {
        return path.join(__dirname, ‘..‘, dir)
      }

      resolve: {
        modules: {
          resolve(‘node_modules‘)
        }
      }
    (3)优化resolve.alias 配置
      resolve.alias配置项通过别名来把原导入路径映射成一个新的导入路径
      使用好的别名可以减少递归操作
    (4)缩小文件匹配范围
      Include: 需要处理的文件的位置
      EXclude: 排除不需要处理的文件的位置

  2、设置noParse
      modules 中的一个参数
        防止webpack解析哪些任何与给定正则表达式相匹配的文件,忽略的文件中不应该含有的import require define的调用,或任何其他导入机制,忽略大型的library可以提高构建性能      

        eg: modules: {

          noParse:/jquery|lodash/

        }
      给babel-loader设置缓存
        babel-loader提供了cacheDirectory特定选项(默认false),设置时给定目录将用于缓存加载器的结果
        use: {
          loader: ‘babel-loader?cacheDirectory=true‘
        }
  3、使用happyPack
    基本原理:在webpack构建过程中,我们需要使用loader对js,css,图片,字体等文件做转换操作,并且转换的文件数据量也是非常大的,且这些转换操作不能并发处理文件,而是需要一个个文件进行处理happyPack的基本原理是将这部分任务分解到多个子进程中并行处理,子进程处理完成后把结果发送到主进程中,从而减少总的构建时间
    (1)安装:
      npm install happypack --save-dev
    (2)配置webpack.common.config.js
      引入happyPack
        const HappPack = require(‘happypack‘)
      Rules配置:
        {
          test: ‘/\.js$/‘,
          exclude: ‘node_module‘,
          loader: ‘happypack/loader?id=happyBabel‘
        }
      plugins配置
        plugins:{
          new HappyPack({
            id: ‘happyBabel‘,
            loaders: [
              {
                loader: [‘babel-loader?cacheDirectory=true‘]
              }

            ]
          })
        }

原文地址:https://www.cnblogs.com/webtaotao/p/12108297.html

时间: 2024-10-12 00:24:14

初探webpack4--简单理解打包优化的相关文章

小型Web页打包优化(下)

之前我们推送了一篇小型Web项目打包优化文章,(链接),我们使用了一段时间, 在这过程中我们也一直在思考, 怎么能把结构做的更好.于是我们改造了一版, 把可以改进的地方和可能会出现的问题, 在这一版中进行了优化.小伙伴们, 有没有迫不及待? 那好, 我们废话少说, 进入正题^_^ 一.背景 之前, 转转App端内有些Hybrid页面和一些端外的落地页, 一般是单个的一两个小页面, 不是所谓的大型的前端应用, 比较零散, 交互也比较简单.如果用vue或react, 有点杀鸡焉用宰牛刀的意思, 没有

Hadoop-- MapReduce简单理解

1.Hadoop和MapReduce概念 Mapreduce是一种模式. Hadoop是一种框架. Hadoop是一个实现了mapreduce模式的开源的分布式并行编程框架. 2.Hadoop框架 借助Hadoop 框架及云计算核心技术MapReduce 来实现数据的计算和存储,并且将HDFS 分布式文件系统和HBase 分布式数据库很好的融入到云计算框架中,从而实现云计算的分布式.并行计算和存储,并且得以实现很好的处理大规模数据的能力. 3.MapReduce 原理 3.1 map和reduc

(转)Deep learning:四十二(Denoise Autoencoder简单理解)

前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Bengio在08年提出,见其文章Extracting and composing robust features with denoising autoencoders.使用dAE时,可以用被破坏的输入数据重构出原始的数据(指没被破坏的数据),所以它训练出来的特征会更鲁棒.本篇博文主要是根据Benig

[转] Webpack 打包优化之体积篇

谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝座的 Gulp, 以及独树一帜的 fis3, 以及下一代打包神器 Rollup :在 browserify,grunt,gulp,rollup,webpack 可以一窥其中部分对比.在本文要探究的是,当前打包工具绝对霸者 Webpack. Webpack Package optimization W

Webpack 打包优化之体积篇

谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝座的 Gulp, 以及独树一帜的 fis3, 以及下一代打包神器 Rollup :在 browserify,grunt,gulp,rollup,webpack 可以一窥其中部分对比.在本文要探究的是,当前打包工具绝对霸者 Webpack. Webpack Package optimization W

设计模式的简单理解——单例模式

简单理解 单例模式是指进程生命期内,某个类型只实例化一个对象.这是一种通过语言特性实现的编程约束.如果没有约束,那么多人协同编码时,就会出现非预期的情况. 下面以内存池做例子,假设其类型名为MemoryPool.内存池的本意是统一管理全局内存,优化内存分配,提升性能,记录内存分配信息方便追溯问题,需要全局只有一个实例对象. 第一阶段:没有任何约束 因为没有任何约束,大家会各自实例化MemoryPool对象来使用.最终一片混乱,根本达不到最初使用内存池的目的. 第二阶段:编程语言外的约束 在Mem

深入理解MySQL优化原理

说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必.因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用. MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图

php类的封装、继承和多态的简单理解

.面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象: 我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象 一.封装性  封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作.  php提供了三种访问控制修饰符  public 表示全局,本类内部,类外部,子类都可以访问  protected 表示受保护的,只有本类或子类可以访问  pr

简单理解计算机通信

简单理解计算机通信 写在前面: 在计算机刚出现的时候,只能在本机进行一些运算处理,想将一台计算机中的数据转移到另一台计算机中,需要通过外部存储介质来传输,例如磁带.软盘.而网络技术的出现,使得计算机间可以通过一些传输介质(网线.光纤等),实现快速的数据传输和信息交互.如今,网络已无处不在,那么,计算机之间究竟是如何通信的呢?下面会通过一些基础的网络知识来简单理解计算机之间的通信过程. 网络通信模型: 网络通信模型是一种概念模型和框架,旨在使各种计算机在世界范围内互连为网络.其中有OSI七层模型和