写点什么

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

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

关注

评论 1 条评论

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

Flink 最佳搭档:开发部署平台 Zeppelin 的自白

Apache Flink

JVM系列之:详解java object对象在heap中的结构

程序那些事

Java JVM GC JOL

架构师都该懂的 CAP 定理

闻人

架构 分布式 架构师

MySQL库表设计小技巧

Simon

MySQL 数据库设计

有趣的“第二个系统”

架构精进之路

提升认知 研发体系

架构师第七周总结

傻傻的帅

架构师

凡架构必拆分,分则有度

菜根老谭

微服务 康威定律 架构思维 分治思维

压测脚本

LEAF

智能标注原理揭秘,一文读懂人工智能如何解决标注难题

百度大脑

人工智能 百度 学习 AI 百度大脑

「架构师训练营」第 7周作业 - 性能测试

森林

k8s极简史:K8s多集群技术发展的历史、现状与未来

华为云开发者联盟

Kubernetes 容器 云原生 华为云

Flink 1.11 Unaligned Checkpoint 解析

Apache Flink

flink

Java 面向对象知识整理

多选参数

Java 编程

金融科技的碎片化思考(上)

曲水流觞TechRill

金融科技 FinTech

Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车

newbe36524

容器 微服务 Reactive .net core ASP.NET Core

来自前端童鞋对后端的吐槽@#$%^

Java小咖秀

程序员 程序人生 大前端

计算机网络基础(七)---网络层-ICMP协议

书旅

计算机网络 网络协议 网络层

itchat替代品,追妹子神器,个人微信给多个好友(群)发消息,定时提醒妹子喝水

Java_若依框架教程

技术 后端 itchat 微信消息 定时提醒

最新:英特尔断供浪潮系内部供应链调整,现已恢复供货

Geek_116789

实操案例:字符串哈希表操作

华为云开发者联盟

程序员 编程语言 C语言 哈希表 字符串

网传Intel断供浪潮,英特尔:供应链调整

Geek_116789

报告|50%CRM品牌陷入竞争旋涡,破圈迫在眉睫

人称T客

波士顿动力狗 SPOT 权威购买指北

早睡蟒

Python 人工智能 学习 波士顿动力 机械狗

Oracle JDK7 bug 发现、分析与解决实战

vivo互联网技术

数据库周刊33丨5大国产数据库中标中国移动;Oracle7月CPU安全预警;腾讯Tbase新版本发布;“2020数据技术嘉年华”有奖话题遴选;阿里云技术面试题;APEX 实现数据库自动巡检;MYSQL OCP题库……

墨天轮

MySQL 数据库 oracle 阿里云 面试

tomcat 使用apr

zack

tomcat

「架构师训练营」第 7 周作业 - 总结

森林

企业架构框架之DoDAF

冯文辉

企业架构

Flask 的 url 处理器

Leetao

Python flask Web框架

什么?不写代码也能做功能开发!- RUOYI教程

Java_若依框架教程

Java 技术 后端 开发 框架

一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

楼下小黑哥

nginx redis 分布式 session

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