返回顶部
首页 > 资讯 > 前端开发 > JavaScript >tree shaking对打包体积优化及作用
  • 673
分享到

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

2024-04-02 19:04:59 673人浏览 安东尼
摘要

目录背景有啥用?实践前置准备打包sideEffects副作用sideEffects的使用优化体积背景 大家平时在查 webpack构建体积优化 ,可能都会查到 tree-shakin

背景

大家平时在查 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打包体积优化的资料请关注编程网其它相关文章!

--结束END--

本文标题: tree shaking对打包体积优化及作用

本文链接: https://lsjlt.com/news/153631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • tree shaking对打包体积优化及作用
    目录背景有啥用?实践前置准备打包sideEffects副作用sideEffects的使用优化体积背景 大家平时在查 webpack构建体积优化 ,可能都会查到 tree-shakin...
    99+
    2024-04-02
  • tree shaking对打包体积优化及作用实例分析
    这篇“tree shaking对打包体积优化及作用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“tree&...
    99+
    2023-07-02
  • Vite打包优化之缩小打包体积实现详解
    目录正文分析文件依赖指定文件按需加载路径别名&文件尾缀静态资源的打包最小化拆分包关闭一些打包配置项低版本浏览器兼容使用CDN开启Gzip如何测试网页性能?最后正文 说到前端性...
    99+
    2023-01-04
    Vite缩小打包体积 Vite打包优化
  • Android与iOS包体优化及一键自动打包脚本
    目录系统信息介绍安卓APK优化包体大小一、原理与介绍二、Flutter代码配置三、Android代码配置四、多渠道调试与打包指令安卓一键打包脚本一、简单介绍二、项目路径结构三、脚本内...
    99+
    2024-04-02
  • 如何在ASP应用程序中实现对象的优化打包管理?
    在ASP应用程序中,对象的优化打包管理是一个非常重要的主题。通过优化打包管理,我们可以提高应用程序的性能和可维护性,同时减少代码冗余和内存占用。在本文中,我们将深入探讨如何在ASP应用程序中实现对象的优化打包管理,并演示一些代码示例。 一、...
    99+
    2023-11-13
    并发 对象 打包
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作