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

    文章

    526

    浏览量

    56588
  • Rust
    +关注

    关注

    1

    文章

    241

    浏览量

    7675

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    索尼电影感直播远程调试服务工具V1.1.0版本升级

    索尼“电影感直播远程调试”服务工具(即“RASL”)自今年1发布以来,受到直播服务机构的广泛关注,纷纷试用、采买。通过该工具,工程师可远程完成相机核心参数的精细调节、画面实时对比、参
    的头像 发表于 04-07 11:34 424次阅读

    Nordic nRF Connect SDK裸机选项v1.0.0版本的亮点

    我们近期发布了nRF Connect SDK裸机选项的新版本(v1.0.0)。本次更新带来了令人兴奋的新功能和改进,希望您会喜欢。
    的头像 发表于 01-16 11:18 1785次阅读

    NVIDIA在CES 2026发布全新开放模型、数据和工具

    为扩展开放模型生态,NVIDIA 发布全新开放模型、数据和工具,推动各行业 AI 技术的发展。
    的头像 发表于 01-09 10:42 816次阅读

    重磅更新 | 先楫半导体HPM_APPS v1.10.1发布

    重磅更新 | 先楫半导体HPM_APPS v1.10.1发布
    的头像 发表于 12-26 08:33 1505次阅读
    重磅更新 | 先楫半导体HPM_APPS v1.10.1<b class='flag-5'>发布</b>

    宇树科技上新,首款轮式机器人G1-D发布

    11月13日,宇树科技在官网放出了一套人形机器人数彩训练全栈解决方案。该方案基于一款轮式机器人G1-D,由高性能人形机器人本体、系统化的数据采集工具和全面的模型训练及推理工具组成。相比智元机器人精灵G
    的头像 发表于 11-13 14:39 1.4w次阅读
    宇树科技上新,首款轮式机器人G<b class='flag-5'>1</b>-D<b class='flag-5'>发布</b>

    全新升级 | 匠芯创AiUIBuilder V2.0.0发布

    近日,匠芯创自主研发的GUI开发工具AiUIBuilderV2.0.0发布。作为一款基于LVGL的UI设计工具,AiUIBuilder致力于通过拖拽式操作,加速基于匠芯创嵌入式平台的图形应用开发
    的头像 发表于 10-29 10:03 1120次阅读
    全新升级 | 匠芯创AiUIBuilder V2.0.0<b class='flag-5'>发布</b>

    G2发布最新报告,Splashtop 荣膺多区域领导者,IT 远程解决方案获全球认可

    近日,全球权威软件评测平台G2发布了2025年秋季报告,Splashtop在端点管理、补丁管理、远程支持和远程桌面类别中表现亮眼,荣获多项荣誉。凭借在欧洲、中东和非洲(EMEA)、欧洲、英国和加
    的头像 发表于 10-20 17:02 1366次阅读
    G2<b class='flag-5'>发布</b>最新报告,Splashtop 荣膺多区域领导者,IT 远程解决方案获全球认可

    scons使用dist生成的工程缺少文件怎么解决?

    env工具:env_released_1.3.5 使用scons —dist指令打包工程,打开生成的工程,提示缺少文件路径 以下内容为评论
    发表于 10-09 06:02

    大家用的OTA升级打包工具都是用什么制作的,能否拿到QBoot的打包器源码拿来开发呢?

    大家用的OTA升级打包工具都是用什么制作的,能否拿到QBoot的打包器源码拿来开发呢?
    发表于 09-25 06:16

    dist打包好的工程,还能用env工具进行配置吗?

    就是我在BSP里面用scons —dist打包好一个工程后,把工程放到其它路径进行项目开发,中间需要用menuconfig进行配置,发现打不开了,想是不是打包出来的工程就无法配置了,请教一下各位这种情况一般是怎么处理的?是重新打包
    发表于 09-24 08:18

    聊聊 Webpack 那些安全事儿:打包风险与防护小技巧

    Webpack 作为前端工程化的核心工具,几乎成为现代 Web 应用打包的标配。它通过模块合并、代码压缩、依赖管理等功能提升开发效率,但也因配置复杂、代码混淆等特性,潜藏着诸多安全风险。本文结合实战
    的头像 发表于 09-02 10:22 989次阅读
    聊聊 Webpack 那些安全事儿:<b class='flag-5'>打包</b>风险与防护小技巧

    针对“您的应用使用了HarmonyOS beta版本的API”的解决方法##HarmonyOS应用上架##

    的内容,后来发现,是开发工具中包含了beta字样,如图所示: ​ 于是我去官网重新下载了一个开发工具,特意降低了一下版本,从5.0.5降低到了5.0.4 ​ 重新打包编译提交审核,顺利
    发表于 06-30 17:30

    dist打包好的工程,还能用env工具进行配置吗?

    就是我在BSP里面用scons —dist打包好一个工程后,把工程放到其它路径进行项目开发,中间需要用menuconfig进行配置,发现打不开了,想是不是打包出来的工程就无法配置了,请教一下各位这种情况一般是怎么处理的?是重新打包
    发表于 06-13 07:59

    打包机数据采集远程监控系统方案

    困难、故障响应滞后等问题,难以满足企业数字化转型和智能化生产的需求。痛点如下 1、数据采集困难:打包机的运行数据(如打包速度、打包压力、设备状态等)分散在各个设备上,缺乏有效的数据采集
    的头像 发表于 05-28 13:52 749次阅读
    <b class='flag-5'>打包</b>机数据采集远程监控系统方案

    PCBA包工包料:用专业力量为企业生产“减负增效”

    一站式PCBA加工厂家今天为大家讲讲什么是PCBA包工包料服务?PCBA包工包料服务的优势。随着电子制造行业的快速发展,越来越多的企业选择PCBA包工包料服务,以降低成本、提高生产效率,专注于
    的头像 发表于 05-26 09:34 759次阅读