当前位置:首页 > 科技  > 软件

大厂喜欢问的TreeShaking到底是啥?好在哪呢?五分钟弄懂!

来源: 责编: 时间:2024-03-28 09:26:40 254观看
导读背景大家平时在查 webpack构建体积优化 ,可能都会查到 tree-shaking 这个东西,很多人看到这个东西,就会把它背下来,用来应付以后面试官可能会问到的情况。但是,又有多少人去真的了解一下 tree-shaking 呢?自己去实践一下看

背景

大家平时在查 webpack构建体积优化 ,可能都会查到 tree-shaking 这个东西,很多人看到这个东西,就会把它背下来,用来应付以后面试官可能会问到的情况。6WS28资讯网——每日最新资讯28at.com

但是,又有多少人去真的了解一下 tree-shaking 呢?自己去实践一下看 tree-shaking 到底起了哪些作用?对于我们的打包体积的优化又有多少呢?6WS28资讯网——每日最新资讯28at.com

有啥用?

Tree Shaking中文含义是摇树,在webpack中指的是打包时把无用的代码摇掉,以优化打包结果。6WS28资讯网——每日最新资讯28at.com

而webpack5已经自带了这个功能了,当打包环境为production时,默认开启tree-shaking功能。6WS28资讯网——每日最新资讯28at.com

实践

前置准备

准备两个文件main.js、util.js6WS28资讯网——每日最新资讯28at.com

  • 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进行一下打包,看看打包后的代码长啥样:6WS28资讯网——每日最新资讯28at.com

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

结论:可以看到打包后,把b函数、不可能执行的代码、定义未用的变量通通都剔除了,这在一个项目中,能减少很多的代码量,进而减少打包后的文件体积。6WS28资讯网——每日最新资讯28at.com

sideEffects

副作用

先来讲讲一个东西——副作用,是什么东西呢?副作用指的是:除了导出成员之外所做的事情,我举个例子,下面的a.js是没副作用的,b.js是有副作用的:6WS28资讯网——每日最新资讯28at.com

  • 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的优化程度,举个例子:6WS28资讯网——每日最新资讯28at.com

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

sideEffects的使用

sideEffects可以在package.json中设置:6WS28资讯网——每日最新资讯28at.com

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

优化体积

当我把sideEffects设置成true之后,整个打包体积增加了100k,说明默认的false还是有用的。。6WS28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-79983-0.html大厂喜欢问的TreeShaking到底是啥?好在哪呢?五分钟弄懂!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们一起深入理解Flink State

下一篇: 高并发轻松应对:.NET Core实战解析异步配置提高并发响应

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人“珍藏”是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,“7
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
Top