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

    文章

    519

    浏览量

    53879
  • Rust
    +关注

    关注

    1

    文章

    229

    浏览量

    6614

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

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

收藏 人收藏

    评论

    相关推荐

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

    HPMicro Arduino支持包v0.1.0发布,适配功能揭晓!
    的头像 发表于 07-11 08:18 525次阅读
    HPMicro Arduino支持包v0.1.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 1031次阅读
    携手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 1166次阅读
    先楫半导体携手OpenHarmony正式<b class='flag-5'>发布</b>HPMicro ohos v<b class='flag-5'>1.0.0</b>

    Vue团队发布Rust编写JavaScript打包工具Rolldown

    据悉,Rolldown作为Rollup.js的替代品,由字节跳动的OXc工具集支持,具有与Rollup兼容的APIs以及插件接口。该产品预计将成为未来Vite项目的首选打包工具
    的头像 发表于 03-11 09:58 776次阅读

    RZ/G柔性软件包v2.0.1发布说明

    电子发烧友网站提供《RZ/G柔性软件包v2.0.1发布说明.pdf》资料免费下载
    发表于 02-21 10:48 0次下载
    RZ/G柔性软件包v2.0.1<b class='flag-5'>发布</b>说明

    16位单片机RL78系列Rev.1.20发布说明

    电子发烧友网站提供《16位单片机RL78系列Rev.1.20发布说明.pdf》资料免费下载
    发表于 02-19 10:15 0次下载
    16位单片机RL78系列Rev.1.20<b class='flag-5'>发布</b>说明

    AI导航器V1.0.0 发布说明

    电子发烧友网站提供《AI导航器V1.0.0 发布说明.pdf》资料免费下载
    发表于 02-19 09:47 0次下载
    AI导航器V<b class='flag-5'>1.0.0</b> <b class='flag-5'>发布</b>说明

    QE for Motor V1.3.0发布说明

    电子发烧友网站提供《QE for Motor V1.3.0发布说明.pdf》资料免费下载
    发表于 02-19 09:35 0次下载
    QE for Motor V1.3.0<b class='flag-5'>发布</b>说明

    RZ/V2L DRP-AI支持包版本.7.41发布说明

    电子发烧友网站提供《RZ/V2L DRP-AI支持包版本.7.41发布说明.pdf》资料免费下载
    发表于 02-01 10:07 0次下载
    RZ/V2L DRP-AI支持包版本.7.41<b class='flag-5'>发布</b>说明

    RZ/V多操作系统包V1.12发布说明

    电子发烧友网站提供《RZ/V多操作系统包V1.12发布说明.pdf》资料免费下载
    发表于 02-01 09:47 0次下载
    RZ/V多操作系统包V1.12<b class='flag-5'>发布</b>说明

    嵌入式目标V6.06.00发布说明

    电子发烧友网站提供《嵌入式目标V6.06.00发布说明.pdf》资料免费下载
    发表于 02-01 09:26 0次下载
    嵌入式目标V6.06.00<b class='flag-5'>发布</b>说明

    e² studio 2024-01发布说明

    电子发烧友网站提供《e² studio 2024-01发布说明.pdf》资料免费下载
    发表于 01-30 09:47 1次下载
    e² studio 2024-01<b class='flag-5'>发布</b>说明

    CS+适用于CC V8.11.00发布说明

    电子发烧友网站提供《CS+适用于CC V8.11.00发布说明.pdf》资料免费下载
    发表于 01-29 11:46 0次下载
    CS+适用于CC V8.11.00<b class='flag-5'>发布</b>说明

    电容式触摸的QE V3.3.0发布说明

    电子发烧友网站提供《电容式触摸的QE V3.3.0发布说明.pdf》资料免费下载
    发表于 01-29 10:58 0次下载
    电容式触摸的QE V3.3.0<b class='flag-5'>发布</b>说明

    AMD CES 2024发布会时间定档1月8日

    据外媒报道,全球领先的芯片制造商AMD正式宣布,将于美国东部标准时间1月8日上午10点(北京时间1月8日23:00)举行CES 2024发布会。这一消息引起了业界和消费者的广泛关注。
    的头像 发表于 01-08 15:05 1793次阅读