为什么ESbuilld打包构建比较快?

这篇具有很好参考价值的文章主要介绍了为什么ESbuilld打包构建比较快?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

语言优势

大多数前端打包工具是基于javascript实现的,而Esbuild选择使用Go语言编写。
在CPU密集的场景下,Go更加具有性能优势。
因为javascript本质上是一门解释型的语言,每次执行的时候都会先将源码翻译成机器码,一边调度执行;而Go是一种编译型语言,在编译阶段就已经将源码转移成机器码,启动的时候只需要直接执行这些机器码即可。也就意味着,Go语言编写的程序比js少了一个动态解释的过程。

多线程优势

Go天生具有多线程运行能力,而javascript本质上是一门单线程语言,直到引入WebWoker才可能在浏览器/node中实现多线程。
Rollup/Webpack并没有使用WebWoker提供的多线程能力,而ESbuild的实现尽可能的使用各个CPU核,特别是打包过程的解析/代码生成阶段已经实现完全并行的处理。
esbuild的模块打包器
并且Go语言多个线程之间还能共享相同的内存空间,而javascript的每个线程都有自己的内存堆,这意味着Go中多个处理单元,例如解释资源A的线程,可以直接读取资源B线程的运行结果,而js中相同的操作需要调用通讯接口woker.postMessage在线程间复制数据。

节制

ESbuild仅仅提供了构建一个现代Web应用所需的最小功能的集合

  • 支持 js、ts、jsx、css、json、文本、图片等资源
  • 增量更新
  • Sourcemap
  • 开发服务器支持
  • 代码压缩
  • Code split
  • Tree shaking
  • 插件支持
    并且有很多功能官网明确声明没有计划实现支持。

定制

在之前的打包工具中,我们使用了很多第三方插件来解决各种工程需求,比如:文章来源地址https://www.toymoban.com/news/detail-669615.html

  • 使用babel实现ES版本转译
  • 使用ESlint实现代码检查
  • 使用TSC实现ts代码转译
  • 使用less/stylus/sass等css预处理工具
    我们已经完全习惯了这种方式,但是esBuild使用了另一种做法,直接完全重写整套编译流程所用的所有的工具,也就是说需要重写js/ts/jsx/json等资源文件的加载/解析/链接/代码生成逻辑。
    开发成本很高,但是他可以以性能为最高级定制编译的各个阶段,比如说:
  • 重写ts转译工具,完全抛弃ts类型检查,只做代码转换
  • 大多数打包工具把词法分析、语法分析、符号声明等步骤拆解为多个高内聚低耦合的单元,可读性和可维护性比较高,但是esbuild坚持性能第一,将多个处理算法混合在一起降低编译过程数据流转所带来的性能损耗。
    结构一致性
    我们提到esbuilld选择重写js/ts/jsx/css等语言在内的转译工具,所以他比较能保持编译步骤之间的结构一致性,比如在Webpack中使用babel-loader处理javascript代码的时候,可能需要经过多次数据转换:
  • Webpack读入源码,此时是字符串形式
  • Babel解析源码,转换为AST形式
  • Babel将源码AST转换为低版本的AST,Babel将低版本AST generator为低版本源码,字符串形式
  • Webpack解析低版本源码
  • Webpack将多个模块打包为最终产物
    源码需要经历string=>AST=>AST=>string=>AST=>string,在字符串与AST之间反复横跳。
    而Esbuild重写大多数转译工具之后,能够在过个编译阶段共用相似的AST(到底是咋共用的,有待研究),尽可能减少字符串到AST的结构转换,提升内存使用效率。

到了这里,关于为什么ESbuilld打包构建比较快?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript——为什么静态方法不能调用非静态方法

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年02月11日
    浏览(60)
  • DevSecOps端到端的安全能力构建为什么重要?

    2012年,Gartner首次提出DevSecOps概念,旨在将安全性嵌入开发过程中的每个部分;十年后,DevSecOps已经成为端到端安全能力构建的事实标准。所以,在了解DevSecOps为什么重要以及如何落地之前,我们先从软件开发的角度弄明白什么是DevOps。 软件开发进入现代化之旅 回望过去,软

    2024年02月03日
    浏览(55)
  • 为什么 JavaScript 中的 0.1 + 0.2 不等于 0.3

    本文作者为 360 奇舞团前端开发工程师 在使用 JavaScript 处理运算时,有时会碰到数字运算结果不符合预期的情况,比如经典的 0.1 + 0.2 不等于 0.3。当然这种问题不只存在于 JavaScript,不过编程语言的一些原理大致相通,我以 JavaScript 为例解释这种问题,并说明前端如何尽可能

    2024年03月13日
    浏览(82)
  • 为什么web项目要打包才能部署到服务器上呢?

            在Web开发中,通常将项目部署到服务器的过程中,会将项目打包为一个可执行的文件或者一组静态资源。以下是一些原因: 1.部署环境的差异: 不同的服务器环境可能具有不同的配置和要求。为了确保应用程序在不同的服务器上可以正常运行,需要将项目打包为

    2024年02月16日
    浏览(56)
  • /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found__为什么了解内核、Linux系统构建、驱动的相关知识对应用开发有帮助

    某项目中,我要给别人封装一个深度学习算法的SDK接口,运行在RK3588平台上,然后客户给我的交叉编译工具链是  然后我用他们给我的交叉编译工具链报下面的错误: 正常这种时候要升级glibc库,不想升级,然后我发现他们给我的交叉编译工具链带着buildroot,那说明是他们自

    2024年02月11日
    浏览(52)
  • Netty为什么高效,为什么这么受欢迎?

    上篇文章通过 Java NIO 的处理流程与 Netty 的总体流程比较,并结合 Netty 的源码,可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功能的设计原理,学习 Netty 是如何实现其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的设计思想。 我们先看

    2024年02月12日
    浏览(70)
  • Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

    一、Redis是什么 Redis 是一种 基于内存的数据库 ,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于 缓存,消息队列、分布式锁等场景 。         Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

    2024年02月10日
    浏览(67)
  • AIMD 为什么收敛(tcp reno/cubic 为什么好)

    TCP 拥塞控制目标是缓解并解除网络拥塞,让所有流量公平共享带宽,合在一起就是公平收敛。 AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 为什么收敛?我一般会给出下面的老图: 虽然只展示了两条流的收敛,但 n 条流收敛的展示无非就是将

    2024年02月06日
    浏览(76)
  • tcp 为什么要三次握手,两次不行吗?为什么?

    TCP使用三次握手(Three-Way Handshake)的过程是为了确保双方建立起可靠的通信连接,并在连接的建立过程中协商必要的参数。两次握手是不够的,原因主要有以下几点: 防止已失效的连接请求被接受: 假设有A和B两台主机,A向B发送了一个连接请求,但由于某些原因导致连接建

    2024年02月20日
    浏览(64)
  • 为什么美国加息,会让硅谷银行破产?美联储为什么要加息?

    所有回答由 AI 生产 答 : 美国加息会导致国债利率上升,此时购买国债的银行获得的利息收益会比利率较低时少,因此国债的市场价格就会下降,从而导致银行持有的这些国债资产减值。 答 : 美国加息意味着美国央行(即联邦储备委员会)将提高其官方基准利率,这意味着

    2023年04月23日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包