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

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

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

背景

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

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

有啥用?

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

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

实践

前置准备

准备两个文件main.js、util.js6tC28资讯网——每日最新资讯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进行一下打包,看看打包后的代码长啥样:6tC28资讯网——每日最新资讯28at.com

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

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

sideEffects

副作用

先来讲讲一个东西——副作用,是什么东西呢?副作用指的是:除了导出成员之外所做的事情,我举个例子,下面的a.js是没副作用的,b.js是有副作用的:6tC28资讯网——每日最新资讯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的优化程度,举个例子:6tC28资讯网——每日最新资讯28at.com

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

sideEffects的使用

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

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

优化体积

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

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

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

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

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

标签:
  • 热门焦点
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top