写点什么

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

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

    阅读完需:约 5 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

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:005681
用户头像

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

关注

评论 1 条评论

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

Game On Serverless:SAE 助力广州小迈提升微服务研发效能

阿里巴巴云原生

阿里云 Serverless 云原生 SAE 合作

react源码解析12.状态更新流程

buchila11

React

吃透负载均衡

高性能架构探索

负载均衡 架构 分布式 微服务 签约计划第二季

lock-free在召回引擎中的实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

有了代码变更分解提交工具SmartCommit,再也不担心复合提交了

华为云开发者联盟

代码 复合提交 SmartCommit 代码提交 代码提交原子性

手把手带你漫游语音识别世界|入门到实战

攻城先森

音视频 语音识别 内容合集 签约计划第二季

【LeetCode】寻找旋转排序数组中的最小值Java题解

Albert

算法 LeetCode 12月日更

前端工程建设那些事

梁龙先森

内容合集 签约计划第二季

让容器跑得更快:CPU Burst 技术实践

阿里巴巴云原生

阿里云 容器 云原生 cpu CPU调度

react源码解析11.生命周期调用顺序

buchila11

React

Scrapy Spider中间件,你学会了吗?本篇博客有一案例

梦想橡皮擦

12月日更

React进阶(五):导航守卫

No Silver Bullet

React 路由 12月日更

带波浪效果的CollapsingToolbarLayout + RecycleView

阿策小和尚

28天写作 Android 小菜鸟 12月日更

阿里云田涛涛解读未来自动化运维新思路:CloudOps

阿里云弹性计算

CloudOps 云上运维

亿级流量实验平台设计与实现

高性能架构探索

架构 分布式 微服务 签约计划第二季 实验平台

彻底搞通服务发现的原理和实现

高性能架构探索

架构 分布式 微服务 服务发现 签约计划第二季

给弟弟的信第13封|一个北京姑娘的艰辛生活

大菠萝

28天写作

面试官:如何实现 List 集合去重?

王磊

java面试

C++ 开发笔记

行者孙

内容合集 签约计划第二季

深入理解Flutter相机插件【Flutter专题22】

坚果

flutter 28天写作 签约计划第二季 12月日更

JerryScript:物联网开发者的得力工具

华为云开发者联盟

物联网 LiteOS JerryScript 引擎 物联网应用

前端开发:正确安装nvm的方法(非常详细)

三掌柜

28天写作 28 12月日更 12月

效能研发:做一款GraphQL代码生成器

梁龙先森

签约计划第二季

面试官:react中的setState是同步的还是异步的

全栈潇晨

React

面试官:useLayoutEffect和useEffect的区别

全栈潇晨

React

前端架构师修炼指南精选

杨成功

前端 架构师 内容合集 签约计划第二季

Flyway让数据库版本管理更简单

恒生LIGHT云社区

数据库 sql SqlServer

netty系列之:小白福利!手把手教你做一个简单的代理服务器

程序那些事

Java Netty 代理 程序那些事 12月日更

实用机器学习笔记十四:多层感知机

打工人!

人工智能 机器学习 算法 学习笔记 12月日更

流量控制-从原理到实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

Linux中国对话龙蜥社区4位理事:龙蜥操作系统捐赠的背后,是谁在推动?

OpenAnolis小助手

Linux 国产操作系统 龙蜥社区

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