写点什么

Sucrase:一款比 Babel 更快的现代 JS 编译器

  • 2019-07-02
  • 本文字数:1372 字

    阅读完需:约 5 分钟

Sucrase:一款比 Babel 更快的现代 JS 编译器

Sucrase是一款 JavaScript/TypeScript 编译器,目标是提供比标准Babel编译器更快的构建速度。更快的构建意味着更快的迭代,特别是在大型代码基上进行测试的时候。一些测量结果显示,与 Babel 相比,Sucrase 速度提高了 4 至 20 倍。开发人员可以在开发过程中享受这种改进的开发者体验,同时仍然可以在生产环境中使用 Babel。


Sucrase 将自己描述为一个为提升构建速度而推出的“超高速 Babel 替代方案”。在某些限制性的假设前提下,Sucrase 可能比 Babel 提供了显著的速度优势。开发人员可以在Sucrase网站上提供 TypeScript 代码,并通过观察 Sucrase 和 Babel 编译器的结果来评估的 Sucrase 在速度方面的提升。一个默认的示例使用了 20 行代码,速度提升在 4 倍到 7 倍之间变化。Sucrase 在 GitHub 项目主页上提供了一个带有 661K 行代码的大型 TypeScript 代码库示例,其编译速度是 Babel 的 20 倍:



这些速度提升是通过缩减编译器目标范围和牺牲可维护性来实现的。Sucrase 对目标范围缩减的解释如下:


Sucrase 并没有编译大量兼容 Internet Explorer 的 JS 特性,而是假设你正在使用最新的浏览器或 Node.js 版本进行开发,因此它主要编译非标准语言扩展:JSX、TypeScript 和 Flow。


Sucrase 不支持 Node 6 或 Internet Explorer,并且声称只能勉强支持CommonJS和遗留的 TypeScript 和 Babel 5 模块互操作性。由于新的浏览器原生支持大量 JavaScript 语言新特性,并且假设这些特性会被用在开发和测试上下文中,所以 Sucrase 编译器可以专注于更小范围的一组语言特性。除了前面提到的 JSX、TypeScript 和 Flow 之外,它还考虑了其他一些 JavaScript 特性:



还包括特定的转换,用于处理 ES 模块(导入/导出)和使用 React(react-hot-loader)进行开发。上面没有提到的任何 JavaScript 语法都将按原样进行“传递”,并且需要 JavaScript 运行时的支持。开发人员应该检查他们只使用了现代浏览器支持的语言特性(例如,阶段4 ECMAScript特性的子集)。由于 Sucrase 不会检查代码库是否存在错误,所以应该将它与linter或 typechecker 结合在一起使用。


在架构方面,为了获得更好的性能,Sucrase 的语法树转换是复杂且耦合的。因此,Sucrase 不支持插件,并且很难使用新的语言扩展和即将到来的语言特性进行扩展。


Sucrase 试图提供更好的开发者体验,特别是在大型代码库上。因为在大型代码库中,构建速度可能很慢,用于解决构建速度问题的缓存本身可能很脆弱,有时候缓存本身也需要一个缓慢的构建过程。对于测试来说,这个问题特别严重。测试是一个快速迭代的过程,完全可以从改进的编译速度中获益。


然而,Sucrase 并不打算取代 Babel。文档中提到:


在生产环境中使用 Sucrase 之前要仔细考虑好。Sucrase 在开发过程中非常有用,但在其他情况下,Babel 或 tsc 更适合于生产环境的构建。


Sucrase 采用了 MIT 开源许可,它的很大一部分其实是Babel解析器的一个分支,也是基于 MIT 许可。Sucrase 项目欢迎开发者以 bug 报告、拉取请求、文档、测试或其他形式为项目提供帮助。贡献者必须遵循贡献指南


原文链接


Sucrase, a Faster Babel for Modern JS Runtimes


2019-07-02 08:005956
用户头像

发布了 731 篇内容, 共 454.0 次阅读, 收获喜欢 2003 次。

关注

评论 1 条评论

发布
用户头像
js 编译器只是影响开发时间的一些体验吧?如果没有特别的需求需要更换,应该还是会用稳定的 babel,毕竟开启热更新的 webpack 项目每次差异编译也不会超过一秒钟.
2019-07-08 18:18
回复
没有更多了
发现更多内容

湖北文旅虚拟数字代言人“胡贝儿”首秀,赛博大象助力地方文旅元宇宙落地

科技热闻

一文看懂倚天云实例|科普漫画

云布道师

倚天实例

WebUI自动化测试框架搭建之需求整理、详细设计和框架设计

Python 自动化测试 unittest 测试框架 selenium

会声会影软件2023新功能详情介绍

茶色酒

会声会影2023

设备在线/离线状态的缓存方案——实践类

阿里云AIoT

缓存 物联网 存储 数据格式 测试技术

我直接就是一个下载推特GIF动图的大动作!巨简单!

frank

twitter

理论+实战,详解Sharding Sphere-jdbc

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 3 月 PK 榜

不为人知的网络编程(十五):深入操作系统,一文搞懂Socket到底是什么

JackJiang

ChatGPT 不是黑魔法,“替代搜索引擎”言之尚早

Zilliz

搜索引擎 ChatGPT

全球律师事务所 Ogletree Deakins 借助 F5 云服务快速实现远程办公

F5 Inc

云计算 远程办公 云服务 律师

火山引擎DataLeap:揭秘字节跳动数据血缘架构演进之路

字节跳动数据平台

云服务 数据血缘 企业号 2 月 PK 榜

IoT物联网平台通信用Topic梳理——实践类

阿里云AIoT

物联网

构建隐私计算三大生态,百度点石为政务数据要素市场护航

百度安全

隐私计算 百度安全

[C语言]支持IPv6的地址查询的函数getaddrinfo()——实践类

阿里云AIoT

人工智能 网络协议 C语言

hometown-h5-template 一个开箱即用的前端H5解决方案 🎉

HoMeTown

架构 Vue 前端 vite ts

IoT平台业务通信Topic设计最佳实践(共享场景为例)——实践类

阿里云AIoT

物联网 网络性能优化

软件测试/测试开发 | Frida 实现 Hook 功能的强大能力

测试人

软件测试 自动化测试 测试开发

技术分享| 如何使用Prometheus实现系统监控报警邮件通知

anyRTC开发者

Linux 运维 Prometheus 服务器 系统监控报警邮件通知

爱立信钱包平台 (Ericsson Wallet Platform) 与 F5 合作推动金融包容性和赋权

F5 Inc

架构 安全 金融 移动支付

IoT场景中查看设备当前运行状况实现方案——实践类

阿里云AIoT

物联网 存储

如何在OpenCV Python中从立体图像创建深度图?

吴脑的键客

OpenCV 计算机视觉

2个月内如何在千人团队落地压测平台?

老张

项目管理 性能测试 全链路压测 压测平台

灵眸大赏第一天议程公布|超30+企业,共话“2023年增长”趋势

Morketing

活动 营销

NFT艺术品铸造竞拍商城dapp系统开发合约定制

开发微hkkf5566

IoT平台实现RRPC同步调用最佳实战——实践类

阿里云AIoT

物联网 API 应用服务中间件

灰度直方图及直方图均衡化

timerring

图像处理 数字图像处理

2023年中国人工智能产业趋势报告

易观分析

人工智能 科技 ChatGPT

coreldraw2023新功能新图标功能介绍

茶色酒

CorelDraw2023

Asian Paints 利用 F5 Silverline Web Application Firewall 实现转型

F5 Inc

数字化转型 托管 云端

Serverless 时代开启,云计算进入业务创新主战场

阿里巴巴云原生

阿里云 Serverless 云原生

Sucrase:一款比 Babel 更快的现代 JS 编译器_语言 & 开发_Bruno Couriol_InfoQ精选文章