0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

打包工具Rolldown 1.0.0-beta.1发布

OSC开源社区 来源:OSC开源社区 2024-12-31 10:00 次阅读

Rolldown 1.0.0-beta.1 发布了。

Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口,但在功能范围上更类似于 esbuild。

作为一款现代化的打包工具,Rolldown 为开发者提供了更高效、便捷的开发体验。

Rolldown 是尤雨溪公司投资的 Vite 基建开源项目,采用 Rust 从零开始构建了一个 API 与 Rollup 兼容的 JavaScript 打包器。

下文来自Rolldown 官方博客:《我们为什么需要打包器?》

01. 打包有用论

现代浏览器普遍支持原生 ESM 模块和 HTTP/2,所以部分开发者提倡即使在生产环境中,也采用非打包方案(unbundled)来发布 Web 应用。

但 Rolldown 团队认为,这种方案只适用小型应用,对于关注用户体验的性能敏感型应用,打包器仍不可或缺。

现代前端开发中,试图跳过构建步骤仍然不切实际。即使在完善的非打包部署模型中,构建步骤通常也无法避免。

举个栗子,Rails 8 默认的基于导入映射方案:所有 JS 资源仍需要构建,以便对资源指纹识别,并生成导入映射和模块预加载指令。这只是通过 importmap-rails 来“曲线救国”,从而不直接使用 JS 打包器。

此外,对于下列需求,非打包方案存在缺陷:

使用现代 JS 特性,比如 ES6+、TS 或 JSX。

使用打包器专属的优化,比如 tree-shaking(树摇)、代码分割或压缩。

使用依赖构建的库或框架。

发布源码未打包的 npm 依赖,导致请求过多。

JS 打包无用论的主要论点是构建时增加了复杂性,减慢了开发反馈循环。

02. 三大优化

本质上,打包器的存在是因为 Web 应用的独特限制:它们需要通过网络按需交付。

打包器可以通过三大方案来提高 Web 应用的性能:

1、减少网络请求和 waterfall(瀑布量)。 2、减少通过网络发送的总字节数。 3、提高 JS 的执行性能。

03. 减少网络请求

首先,使用 HTTP/2 协议并不意味着可以不再关心请求数量。

尽管 HTTP/2 理论上支持无限多路复用,但浏览器/服务器对每个连接最大并发流数量的默认限制大约为 100。

每个网络请求在服务器和客户端上都有固定开销,比如请求头处理、TLS 加密、多路复用等。更多请求意味着更多服务器负载,而实际并发性受限于服务器提供模块文件的速度。

即使使用 HTTP/2,包含数千个未打包模块的应用仍然会导致严重的网络瓶颈。

深度导入链还会导致网络瀑布(waterfall),即浏览器需要多次网络往返才能获取整个模块图。

这可以在通过 modulepreload 指令来稍微缓解,但是生成这些指令需要工具支持,并且在标签中使用数千个 modulepreload 指令会导致 HTML 本身膨胀,这又是另一个性能问题。

打包可以通过将数千个模块组合成服务器和浏览器都可以轻松处理的最佳数量的 chunk(组件块),减少此类开销。

打包还可以拍平导入链深度来减少 waterfall,并且可以提供生成 modulepreload 指令所需的数据。

本质上,打包将组合模块图的工作移到构建时,而不是为每个访问者带来运行时成本。这使得大型应用在网络较差时,初次访问的加载速度也能显著加快。

3.1 缓存策略的权衡

打包无用论的另一个观点是,非打包方案允许单独缓存每个模块,减少更新应用时缓存失效的数量。

然而,如上所述,这样做的代价是降低了初始加载速度。

次优的打包配置可能会导致级联块哈希验证,导致用户在应用更新时必须重新下载应用的主要内容。

但这问题不大:打包器还可以利用导入映射和高级分块控制,限制哈希无效并提高缓存命中率。

Vite / Rolldown 计划会提供改进的、缓存更友好的默认分块策略。

04. 减少总字节数

打包还可以减少网络发送的 JS 体积。

首先,打包可以将多个模块提升到同一作用域,移除其中所有 import / export 语句。

其次,tree-shaking(消除死代码)是一种能且仅能通过静态分析源码来执行的构建时优化。

原生 ESM 会及早加载和执行所有内容,因此即使你只使用大模块的单个导出,也必须下载并执行整个模块。智能打包器可以从最终打包中移除未使用的 export,节省大量字节。

最后,在打包代码上执行压缩和 gzip 时,比单个模块效率更高。

综上所述,打包既可以减少用户下载的代码,也可以减少服务器使用的带宽。

05. 提高 JS 执行性能

JS 是一种解释型语言,现代 JS 引擎通常采用先进的 JIT 编译来提升运行速度。然而,解析和编译 JS 的成本也不低。

发送更少的 JS 代码不仅可以节省带宽,还意味着在浏览器中编译和执行的 JS 更少,应用的启动时间更短。

一些打包器/压缩器还可以执行诸如常量折叠/AOT(及早执行)之类的优化,使打包代码比手写的源码更高效。

高潮总结

由于 Web 应用依赖于网络交付,前端目前仍然需要一个高性能的打包器。

打包器起码有三大方案来优化性能,Rolldown 以 Vite 用户为起点,可以提供更加一致的打包体验,同时性能又比肩 esbuild + rollup。

来源:尤大为什么要投资打包器,Rolldown 公测版发布

阅读更多

前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导 最受欢迎前端框架——Vue创始人尤雨溪成立新公司VoidZero:声称打造下一代JavaScript工具链、已融资3200万

Vue诞生10年,创始人尤雨溪推动“锈化”——通过Rust提升Web基础设施性能

相关来源

https://x.com/rolldown_rs/status/1871953492979617976 https://github.com/rolldown/rolldown/releases/tag/v1.0.0-beta.1 https://rolldown.rs/guide/in-depth/why-bundlers https://mp.weixin.qq.com/s/okYoOQXN9Emo1kjfNXqpnQ https://mp.weixin.qq.com/s/i3MdBCwCBCG2Wue0ud1h7w

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • javascript
    +关注

    关注

    0

    文章

    525

    浏览量

    54126
  • Rust
    +关注

    关注

    1

    文章

    231

    浏览量

    6725

原文标题:这款“锈化”的开源JS打包工具发布1.0 Beta——性能强劲、尤雨溪主导

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    先楫半导体HPM_SDK v1.7.0发布!这些更新你值得关注!

    先楫半导体HPM_SDK v1.7.0发布!这些更新你值得关注!
    的头像 发表于 02-08 13:42 223次阅读
    先楫半导体HPM_SDK v1.7.0<b class='flag-5'>发布</b>!这些更新你值得关注!

    Android16 Beta 1来袭,谷歌Pixel 6用户抢先体验

    提供的Android 16路线图,Beta 1版本于2025年1发布Beta 2、Beta
    的头像 发表于 01-24 10:36 475次阅读

    谷歌计划12月发布Gemini 2.0模型

    近日,有消息称谷歌计划在12月发布其下一代人工智能模型——Gemini 2.0。这一消息引发了业界的广泛关注,因为谷歌在人工智能领域一直保持着领先地位,而Gemini系列模型更是其重要的产品之一。
    的头像 发表于 10-29 11:02 839次阅读

    苹果推送iOS 18.2 Beta 1,Siri接入ChatGPT技术

    10月24日最新报道,苹果公司于今日向开发人员发布了iOS 18.2 Beta 1版本,此版本专为支持Apple Intelligence的设备设计,涵盖iPhone 15 Pro系列及iPhone
    的头像 发表于 10-24 14:24 843次阅读

    欢创播报 华为发布会撞期苹果iPhone16发布

    1 华为发布会撞期苹果iPhone16发布会 9月2日,华为宣布,其备受期待的品牌盛典及鸿蒙智行新品发布会将于9月10日举行,届时将展示华为的最新科技创新成果。华为消费者业务CEO余承
    的头像 发表于 09-05 11:33 612次阅读
    欢创播报  华为<b class='flag-5'>发布</b>会撞期苹果iPhone16<b class='flag-5'>发布</b>会

    求助,关于open-loop反馈参数beta问题求解

    。 在closeloop中,beta是feedback factor,等于R1/(R1+Rf),是一个常数,请问在open loop中 1/be
    发表于 08-14 06:24

    AMD的锐龙9000系列处理器将延后至8月发布

    国际媒体传来消息,AMD公司已正式向其全球合作伙伴宣布,原计划于7月31日面世的锐龙9000系列处理器将延后至8月发布。这一调整源自于AMD在最终品质检验阶段发现的首批生产批次未能全面符合其严苛的质量标准。
    的头像 发表于 07-25 14:24 808次阅读

    HPMicro Arduino支持包v0.1.0发布,适配功能揭晓!

    HPMicro Arduino支持包v0.1.0发布,适配功能揭晓!
    的头像 发表于 07-11 08:18 627次阅读
    HPMicro Arduino支持包v0.1.0<b class='flag-5'>发布</b>,适配功能揭晓!

    苹果发布macOS 14.6 Beta 2

    。此次Beta 2的内部版本号为23G5061b,其紧随前一版本发布仅两周之后,如此紧凑的更新周期,无疑是在为macOS 14.x系列的最终完善以及向全新macOS 15 Sequoia系统的平稳过渡按下加速键。
    的头像 发表于 07-02 11:10 1450次阅读

    HarmonyOS NEXT Developer Beta1最新术语表

    A abc文件 方舟字节码(ArkCompiler Bytecode)文件,是ArkCompiler的编译工具链以源代码作为输入编译生成的产物,其文件后缀名为.abc。在发布态,abc文件会被打包
    发表于 06-27 16:16

    HarmonyOS NEXT Developer Beta1中的Kit

    Kit工具箱的形式罗。 本文根据HarmonyOS NEXT Developer Beta1官方公开的开发文档整理而成。
    发表于 06-26 10:47

    苹果首款折叠屏MacBook或提前至2026年发布

    天风国际分析师郭明錤近日发布关于苹果首款折叠屏MacBook的最新调查报告。根据他的最新预测,这款备受期待的MacBook预计将在2026年发布,比之前的预测提前了一年。
    的头像 发表于 05-27 09:48 557次阅读

    累计300亿投入!华为乾崑ADS3.0发布,创新驱动,引领智驾新征程

    4月24日,华为宣布乾崑ADS3.0发布,带来四大升级,架构升级、主动安全升级、全场景贯通和泊车跨代领先。2023年,华为智能化部件实现300万套发货量,7款战略合作车型上市,累计研发投入超过300亿,研发人员达到7000人。
    的头像 发表于 04-28 18:12 9945次阅读
    累计300亿投入!华为乾崑ADS3.0<b class='flag-5'>发布</b>,创新驱动,引领智驾新征程

    携手OpenHarmony,先楫半导体HPMicro ohos v1.0.0 正式发布

    各位关注先楫的小伙伴们,基于OpenHarmony4.0-Release版本和hpm_sdkv1.4.0版本的HPMicroohosv1.0.0正式发布了。
    的头像 发表于 04-03 08:16 1252次阅读
    携手OpenHarmony,先楫半导体HPMicro ohos v<b class='flag-5'>1.0.0</b> 正式<b class='flag-5'>发布</b>

    先楫半导体携手OpenHarmony正式发布HPMicro ohos v1.0.0

    各位关注先楫的小伙伴们,基于OpenHarmony 4.0-Release版本和hpm_sdk v1.4.0 版本的 HPMicro ohos v1.0.0 正式发布了。
    的头像 发表于 04-02 10:45 1549次阅读
    先楫半导体携手OpenHarmony正式<b class='flag-5'>发布</b>HPMicro ohos v<b class='flag-5'>1.0.0</b>