为何说 Babel 将推进 JavaScript 的发展【转】

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

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

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

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

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

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

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

Babel 插件并局限于性能提高,好比,还能够作下面这些事情:typescript

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

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

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

 

转自:https://www.infoq.cn/article/2015%2F05%2FES6-TypeScriptbabel

相关文章
相关标签/搜索