10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

为什么说 Babel 将推动 JavaScript 的发展

  • 2015-05-26
  • 本文字数:1529 字

    阅读完需:约 5 分钟

Babel 是一个转换编译器,它能将 ES6 转换成可以在浏览器中运行的代码。Babel 由来自澳大利亚的开发者 Sebastian McKenzie 创建。他的目标是使 Babel 可以处理 ES6 的所有新语法,并为它内置了 React JSX 扩展及 Flow 类型注解支持。

codemix 创始人 Charles Pick 介绍,Babel 是所有ES6 转换编译器中与ES6 规范兼容度最高的,甚至超过了谷歌创建已久的 Traceur 编译器。Babel 允许开发者使用 ES6 的所有新特性,而且不会影响与老版本浏览器的兼容性。此外,它还支持许多不同的构建& 测试系统,使开发者很容易将它集成到自己的工具链中。

Charles 认为,Babel 从根本上讲是一个平台,这是它与 compile-to-JS 语言 CoffeeScript TypeScript 最大的不同。Babel 的插件系统允许开发者自定义代码转换器并插入到编译过程。这些转换器会接收一棵抽象语法树,并在代码转换成可执行的JavaScript 之前对其进行操作。codemix 已经尝试开发了静态& 运行时类型检查闭包消除 JavaScript“健康宏(hygienic macros)”等插件。

Babel 不仅跟踪 ES6 的进展情况,而且还是 ES7 或 ES2016 的试验场。比如,它已经支持 async/await ,使开发者更容易编写异步 JavaScript 代码,而且与使用回调或 Promises 相比,代码更简洁易懂。虽然主流浏览器可能还需要几年的时间才能支持这种异步 JavaScript 代码编写方式,但 Babel 使开发者现在就可以用上它。这得益于 Babel 与 JavaScript 技术委员会( TC39 )保持着高度一致,能够在 ECMAScript 新特性标准化之前为开发者提供现实世界可用的实现。而同时,这也有利于 JavaScript 的进一步发展,因为其团队可以在 ECMAScript 规范最后定稿前就获得来自现实世界的反馈。

Babel 还能提升 JavaScript 的执行速度。由于 JavaScript 文件加载和执行速度慢会严重影响用户体验,所以 JIT 没有时间在运行时执行所有技术上可行的优化。相比之下,Babel 是在编译时运行,没有这么严格的时间限制。借助强大的作用域跟踪和类型推断功能及插件系统,开发者可以构建转换器来执行此类优化,比如上文提到的闭包消除可以将闭包转换成平常的函数。Babel 本身也内置了一些优化,比如通过utility.deadCodeElimination转换器执行常量合并 / 常量传播。在接下来的几个月里,我们还有望看到如下插件:

  • 任意函数内联:将函数内联至调用点,实现性能最大化,避免多态和函数调用开销;
  • 函数复制:在 JavaScript 中,多态是导致代码执行慢的一个常见原因。因此,在函数无法内联的地方,应该生成一个函数副本,确保函数保持单态;
  • 循环内不变代码外提:将循环体内不变的代码移至循环体外;
  • 循环展开:如果循环次数 N 固定,则移除循环,将循环体复制 N 份。

codemix 后续将发布多个执行此类优化的插件,感兴趣的读者可以联系他们或者关注其 Twitter 。关于 JavaScript 引擎可以做哪些不同的优化,可以查看这里

Babel 插件并局限于性能提升,比如,还可以做下面这些事情:

  • i18n/ 翻译转换器:翻译特定字符串并替换;
  • 自定义日志系统:通过环境变量设置日志级别,控制日志粒度;
  • 面向可选模板系统(如 Mustache 或 Handlebars)的编译时转换器:将标签模板字符串直接转换成 JavaScript 代码;
  • 文档生成器:利用 Flow 类型注解和类型推断生成文档。

上述插件,有一部分已经实现

总之,Charles 认为,Babel 是一款优秀的软件,必将成为每个Web 开发者工具箱的一部分,而作为ECMAScript 的试验场,它在不远的将来很可能会成为推动ES6 和ESNext 应用和发展的主要动力。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-05-26 09:2114746
用户头像

发布了 1008 篇内容, 共 430.1 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

准备3个月,面试10分钟,Java中高级岗面试为何越来越难?

Java架构师迁哥

Kubernetes学习笔记之Calico CNI Plugin源码解析(二)

360技术

上架Steam一周的付费游戏,开源了!其实你能“薅”的不止一只羊

程序员生活志

入职阿里定级P7,2021年最新最全180道高级岗面试题及答案

Java架构师迁哥

程序员需要了解数据库知识么?

escray

学习 极客时间 朱赟的技术管理课 6月日更

2021年最新版Java后端最全面试攻略,全面对标BATJ

Java 程序员 架构 面试

深入分析Linux操作系统对于TCP/IP栈的实现原理与具体过程

奔着腾讯去

c++ socket 网络协议

大厂招聘程序员都是“有章可循”你Get到了吗?

Java架构师迁哥

阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验

尹文敏

云计算 阿里云 云原生

毕昇JDK:为啥是ARM上超好用的JDK

华为云开发者联盟

Java 华为 jdk Openjdk 毕昇 JDK

如何判断老板是在给员工画饼?

石云升

创业 职场经验 6月日更

一个超牛逼的 GitHub 项目,标星高达55.3Kstar,附项目源代码

Java架构师迁哥

开源之夏来啦,欢迎报名 Apache APISIX 项目!

API7.ai 技术团队

开源 后端 技术人生 API 网关

《原则》(九)

Changing Lin

6月日更

在外包5年,每天读写删改,突然发现跳不出来了

Java架构师迁哥

阿里工作8年,肝到P8就剩这份学习笔记了,已助朋友拿到10个Offer

Java 程序员 架构 面试

从零开始学习3D可视化之模型动画

ThingJS数字孪生引擎

可视化 模型 大屏可视化 数字时代 3D可视化

我人生的里程碑之【作为独立开发者,第一次承接外包项目的心得经历,也许说出你的心声哦!】

码界西柚

程序人生 6月日更

超全!阿里首发内部微服务架构笔记,再也不用为“微服务”苦恼了

Java架构师迁哥

涵盖了所有计算机底层知识总结与操作系统的实战教程,你确定不看看吗

Java架构师迁哥

用 CloudQuery 管理和操作数据库,更高效更安全

BinTools图尔兹

运维 dba 数据库管理工具

☕️【Java 技术之旅】带你一起攻克String类创建的难点分析

码界西柚

Java string pool string 6月日更

油管视频下载: 如何下载油管视频到本地

科技猫

分享 教程 经验 油管视频下载 下载油管视频

建信金科大咖访谈:ISO20000及ISO27001标准体系解读

金科优源汇

centos7使用

xujiangniao

Linux

面试官:如何给字符串设计索引?

一个优秀的废人

MySQL 索引 字符串 索引优化

创业邦南立新:搭建创新生态,是奔向万亿美金市值的必经之路

创业邦

24道几乎必问的JVM面试题,我只会7道,你能答出几道?

北游学Java

Java 面试 JVM

福利时刻 十年黑客大佬的Web安全渗透技术分享

学神来啦

Linux 黑客 安全 运维自动化

Flink + Iceberg 在去哪儿的实时数仓实践

Apache Flink

flink

本文是为了帮大家快速回顾了Java中高级知识点,只需收藏不用看!

Java架构师迁哥

为什么说Babel将推动JavaScript的发展_JavaScript_谢丽_InfoQ精选文章