写点什么

为什么说 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:2114395
用户头像

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

关注

评论

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

JavaScript刷LeetCode-字符串类解题技巧

Geek_07a724

JavaScript LeetCode

特征平台在数禾的建设与应用

阿里云大数据AI技术

sql 大数据 flink 企业号十月 PK 榜

js通过经纬度来计算两地之间的距离

源字节1号

微信小程序 软件开发 前端开发 后端开发

华为云CDN,如何赋能企业数字化发展?

IT科技苏辞

【融云出海白皮书免费看】出海洞察之沙特的「土豪行为」盘点

融云 RongCloud

白皮书 出海

华为云CDN,海量资源智能路由,让内容传输更快一步

IT科技苏辞

阿里技术专家压箱底好货:Redis深度历险笔记

小小怪下士

Java redis 程序员

华为云虚拟专用网络VPN,专为解决现代企业云链路痛点而生

科技怪授

网络 网络VPN

10-6-华为云OBS大数据存算分离方案,助力企业顺利实现数字化转型!

科技之光

前端监控系列4 | SDK 体积与性能优化实践

字节跳动终端技术

性能优化 前端监控 sdk 体积优化

Spring Boot「15」统一异常处理

Samson

Java spring 学习笔记 spring-boot 10月月更

企业为什么需要UI快速开发框架

力软低代码开发平台

华为云CDN,是怎样满足各行业全场景加速需求

IT科技苏辞

华为云虚拟专用网络VPN,为现代企业打造优质的混合云计算环境

科技怪授

网络VPN

华为云弹性公网IP,如何解决现代企业的网络IP烦恼

科技怪授

弹性公网IP

聊一聊作为高并发系统基石之一的缓存

Java全栈架构师

Java 缓存 后端 高并发 架构师

ript刷LeetCode拿offer-树的遍历

js2030code

JavaScript LeetCode

Spring Boot「16」自定义错误页面

Samson

Java spring 学习笔记 spring-boot 10月月更

华为云虚拟专用网络VPN,助力现代企业云上业务创新发展

科技怪授

网络 网络VPN

超高性价比的云服务器-华为云耀云服务器

科技之光

华为云对象存储OBS,安全可靠的云存储服务,让企业轻松上云

科技之光

JavaScript刷LeetCode拿offer-栈相关题目

js2030code

JavaScript LeetCode

精细化边缘安全防护:如何防止CDN域名被恶意刷量?

阿里云视频云

CDN 边缘安全

重塑感知,荣耀金洋,银行APP用户体验外滩峰会相聚上海

易观分析

银行 峰会 上海

JavaScript刷LeetCode模板技巧篇(二)

Geek_07a724

JavaScript LeetCode

华为云对象存储OBS,为不同企业提供云存储方案,助力企业更好经营

科技之光

聚焦云计算、大数据、人工智能等开源技术,这场开源开发者的盛会不容错过!

OpenAnolis小助手

人工智能 云计算 大数据 COSCon'22 开源盛会

将 NGINX 部署为 API 网关,第 3 部分:发布 gRPC 服务

NGINX开源社区

nginx api 网关 gprc

华为云CDN,用技术实力助力企业创新,促进产业化转型

IT科技苏辞

这几款音乐人必备的软件,你了解吗?

懒得勤快

【文本检测与识别白皮书-3.2】第一节: 基于分割的场景文本识别方法

合合技术团队

人工智能 文字识别 文字检测 智能识别

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