tree shaking对打包体积优化及作用

tree shaking对打包体积优化及作用

目录

背景

有啥用?

实践

前置准备

打包

sideEffects

副作用

sideEffects的使用

优化体积

背景

大家平时在查 webpack构建体积优化 ,可能都会查到 tree-shaking 这个东西,很多人看到这个东西,就会把它背下来,用来应付以后面试官可能会问到的情况。

但是,又有多少人去真的了解一下 tree-shaking 呢?自己去实践一下看 tree-shaking 到底起了哪些作用?对于我们的打包体积的优化又有多少呢?

有啥用?

Tree Shaking中文含义是摇树,在webpack中指的是打包时把无用的代码摇掉,以优化打包结果。

webpack5已经自带了这个功能了,当打包环境为production时,默认开启tree-shaking功能。

实践 前置准备

准备两个文件main.js、util.js

util.js

function a () { console.log('a') } function b () { console.log('b') } export default { a, b }

main.js

import a from './util' // 使用a变量,调用文件里面的a函数,不使用b函数 console.log(a.a()) console.log('hello world') // 不可能执行的代码 if (false) { console.log('haha') } // 定义了但是没用的变量 const m = 1 打包

前面说了webpack5在环境production下打包的话,默认开启tree-shaking,那我们运行npm run build进行一下打包,看看打包后的代码长啥样:

(()=>{"use strict"; const o=function(){console.log("a")}; console.log(o()) console.log("hello world")} )();

结论:可以看到打包后,把b函数、不可能执行的代码、定义未用的变量通通都剔除了,这在一个项目中,能减少很多的代码量,进而减少打包后的文件体积。

sideEffects 副作用

先来讲讲一个东西——副作用,是什么东西呢?副作用指的是:除了导出成员之外所做的事情,我举个例子,下面的a.js是没副作用的,b.js是有副作用的:

a.js

function console () { console.log('console') } export default { console }

b.js

function console () { console.log('console') } // 这个就是副作用,会影响全局的数组 Array.prototype.func = () => {} export default { console }

有无副作用的判断,可以决定tree-shaking的优化程度,举个例子:

我现在引入a.js但是我不用他的console函数,那么在优化阶段我完全可以不打包a.js这个文件。

我现在引入b.js但是我不用他的console函数,但是我不可以不打包b.js这个文件,因为他有副作用,不能不打包。

sideEffects的使用

sideEffects可以在package.json中设置:

// 所有文件都有副作用,全都不可 tree-shaking { "sideEffects": true } // 没有文件有副作用,全都可以 tree-shaking { "sideEffects": false } // 只有这些文件有副作用, // 所有其他文件都可以 tree-shaking, // 但会保留这些文件 { "sideEffects": [ "./src/file1.js", "./src/file2.js" ] } 优化体积

当我把sideEffects设置成true之后,整个打包体积增加了100k,说明默认的false还是有用的。。

以上就是tree shaking对打包体积优化及作用的详细内容,更多关于tree shaking打包体积优化的资料请关注易知道(ezd.cc)其它相关文章!

推荐阅读

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机

    优化PostgreSQL中的批量更新性能

    优化PostgreSQL中的批量更新性能,数据,表格,在Ubuntu 12.04上使用PG 9.1. 我们目前需要24小时才能运行大量UPDATE数据库上的语句,其形式

    Mac上使用Source Tree的一些总结

    Mac上使用Source Tree的一些总结,版本,自己的,作为一名Max/Xcode/iOS的初学者,学习仅有3个月时间,很多东西还不是很懂。在公司做项目集成代

    512内存的电脑优化|笔记本内存512

    512内存的电脑优化|笔记本内存512,,1. 笔记本内存512够用,因为运行非常流畅,苹果笔记本 16g512的运行内存是16g内存,机身内存是512g内存,运行

    Windows7下固态硬盘的优化技术

    Windows7下固态硬盘的优化技术,,当微软开发Windows Vista时,固态硬盘没有那么热,所以没有进行优化。Windows 7是不同的。微软从一开始就把SS

    记一次服务端系统性能优化

    记一次服务端系统性能优化,在线,设备, 首先简单介绍一下业务场景,物联网设备,关注公众号,免费领取环保袋。12月8号,也就是昨天上午,突然接

    幻灯片放映慢优化可以加快速度

    幻灯片放映慢优化可以加快速度,,用于制作幻灯片的一些技术更复杂,这些幻灯片在一些旧机器上运行缓慢或缓慢。在这种情况下,我们应该如何优化

    电脑cpu调整软件|电脑优化cpu的软件

    电脑cpu调整软件|电脑优化cpu的软件,,1. 电脑优化cpu的软件出现这个问题归根到底是因为你是用的模拟器,而模拟器是比较卡顿的,尤其在配置比

    bios优化设置|bios的优化设置

    bios优化设置|bios的优化设置,,1. bios的优化设置开机按del键,在bios设置菜单中选择loadfall-safe defaults,在弹出的确认提示中按y键即可

    hp超级本envy优化|hp envy bios

    hp超级本envy优化|hp envy bios,,hp超级本envy优化笔记本开机时显示报错码3f0表现为系统卡顿,原因和解决方法如下3、电脑同时开启了多个应