webpack优化篇(四十二): 使用高版本的 webpack 和 Node.js

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack优化篇(四十二): 使用高版本的 webpack 和 Node.js相关的知识,希望对你有一定的参考价值。

说明

玩转 webpack 学习笔记

使用 webpack 4

相比 webpack 3 构建时间降低了 60%-98%!

使用 webpack4:优化原因

  • V8 带来的优化(for of 替代 forEach、Map 和 Set 替代 Object、includes 替代 indexOf)
  • webpack4 默认使用更快的 md4 hash 算法
  • webpacks AST 可以直接从 loader 传递给 AST,减少解析时间
  • 使用字符串方法替代正则表达式

具体的可以参考:https://github.com/webpack/webpack/releases,然后找到 v4.0.0

map perfermance

map 速度提升对比

对比版本如下:这里需要使用 nvm 工具,可以参考我之前的文章:怎么使用 nvm 控制 nodejs 版本切换?

"use strict";

const runCount = 100;
const keyCount = 10000;

let map = new Map();

let keys = new Array(keyCount);
for (let i = 0; i < keyCount; i++) keys[i] = ;

for (let key of keys) map.set(key, true);

let startTime = process.hrtime();

for (let i = 0; i < runCount; i++) 
    for (let key of keys) 
        let value = map.get(key);
        if (value !== true) throw new Error(); 
    


let elapsed = process.hrtime(startTime);
console.log(elapsed)
let [seconds, nanoseconds] = elapsed;
let milliseconds = Math.round(seconds * 1e3 + nanoseconds);

console.log(`$process.version $milliseconds ms`);



对比 includes 跟 indexOf

编写 compare-includes-indexof.js 文件

const ARR_SIZE = 1000000;
const hugeArr = new Array(ARR_SIZE).fill(1);

// includes
const includesTest = () => 
    const arrCopy = [];
    console.time("includes");
    let i = 0
    while (i < hugeArr.length) 
        arrCopy.includes(i++)
    
    console.timeEnd("includes");


// indexof
const indexOfTest = () => 
    const arrCopy = [];
    console.time("indexOf");
    let i = 0
    for (let item of hugeArr) 
        arrCopy.indexOf(item)
    

    console.timeEnd("indexOf");


includesTest();
indexOfTest();

以上是关于webpack优化篇(四十二): 使用高版本的 webpack 和 Node.js的主要内容,如果未能解决你的问题,请参考以下文章

webpack优化篇(四十一):体积分析:使用 webpack-bundle-analyzer

webpack优化篇(四十七):缩小构建目标

webpack优化篇(四十):速度分析:使用 speed-measure-webpack-plugin

webpack优化篇(四十四):多进程并行压缩代码

webpack优化篇(四十五):进一步分包:预编译资源模块

webpack优化篇(四十六):充分利用缓存提升二次构建速度