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

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应用和发展的主要动力。

谢谢大家的持续关注,后面也将会为大家提供更多最新最热门的行业动态和技术内容。

欢迎有兴趣的朋友加入我们的技术讨论社区:乎声社区》》感谢支持哦~

本文转自HTML5中国

时间: 2024-11-10 16:08:48

为什么说Babel将推动JavaScript的发展的相关文章

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

Babel是一个转换编译器,它能将 ES6 转换成可以在浏览器中运行的代码.Babel 由来自澳大利亚的开发者Sebastian McKenzie创建.他的目标是使 Babel 可以处理 ES6 的所有新语法,并为它内置了React JSX 扩展及Flow类型注解支持. 据codemix创始人Charles Pick介绍,Babel 是所有 ES6 转换编译器中与 ES6 规范兼容度最高的,甚至超过了谷歌创建已久的Traceur编译器.Babel 允许开发者使用 ES6 的所有新特性,而且不会影

为什么说Babel[?be?bl]将推动JavaScript的发展

Babel是一个转换编译器,它能将ES6转换成可以在浏览器中运行的代码.Babel由来自澳大利亚的开发者Sebastian McKenzie创建.他的目标是使Babel可以处理ES6的所有新语法,并为它内置了React JSX扩展及Flow类型注解支持.据codemix创始人Charles Pick介绍,Babel是所有ES6转换编译器中与ES6规范兼容度最高的,甚至超过了谷歌创建已久的Traceur编译器.Babel允许开发者使用ES6的所有新特性,而且不会影响与老版本浏览器的兼容性.此外,它

【AI】【计算机】【中国人工智能学会通讯】【学会通讯2019年第01期】直面五大技术挑战 推动人工智能突破性发展

封面: 直面五大技术挑战 推动人工智能突破性发展 原作者: 芮 勇 去年,我在<中国人工智能学会通讯>上发表的一篇文章中提到,人工智能遇到了发展的“芳华年代”.技术的突破,资本的支持,政策的扶持,产业的需求,这一切都让人工智能迎来了大发展的时代.2018 年已经过去了,回望 2018 的人工智能发展,可以看到,与 2017 年相比,大家对人工智能多了一些冷静和理性,少了很多浮躁和喧嚣.一方面,人工智能技术一直在向前推进:另一方面,智能 +,即人工智能与垂直行业的结合也越来越紧密,正在更加深刻地

javascript的发展

昨天和同事聊天,学习到了很多东西,对我的帮助很大,这种分享精神太赞了!现做整理如下. 关于JS的发展与前景: 1.在中国开发者的观念中,JS难当大任.首先,JS是脚本语言,这个定义决定了它难挑大梁,而且JS是附属于html的脚本,受限于浏览器,局限太大.所以这也是为什么会写的人一大把,高手却不多. 2.V8的出现,打破了这个局限.V8是由丹麦Google开发的开源Javascript引擎,使用 C++ 代码编写,实现了 ECMAScript 规范的第五版-ECMA-262,可以运行在所有主流的操

【头条】移动设备是推动VR大发展的第一波浪潮

随着Samsung Gear VR.Oculus Rift和PlayStation VR的发布和即将发布,虚拟现实正在成为一种现实意义上的现实,分析机构SuperData认为HMD(Head Mount Display,头戴式显示设备)厂商的未来形势一派大好. 美国动画片<南方公园>里的Butters也被Oculus Rift惊呆了 究竟有多好呢 ?根据SuperData一份分析报告的消息,以目前的发展速度,到2019年,虚拟现实移动设备将使这一市场的营收达到159亿美元.根据测算,这一数据今

作为负责人,如何快速将一个已有的解决方案接手过来,推动产品再次发展?

最近接手了一个新的产品,一个已经交付使用的完整的解决方案.之前受政策影响,项目被计划放弃并已经停滞了一段时间.近期各方面考虑重启这个项目. 作为新的负责人,在仅有的几个维护人员基础上,如何去推动整个局面运转起来,完成新的产品建设,团队建设和自我建设? 现状: 目标: 0.成本收益 1.风险 2.管理 3.人力 4.技术 5.市场 6.运营 (未完待续)

Sublime Text 3 搭建 React.js 开发环境

ublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babel 支持ES6, React.js, jsx代码高亮,对 JavaScript, jQuery 也有很好的扩展.关于 babel 的更多介绍可以看这里:为什么说Babel将推动JavaScript的发展 安装 PC:Ctrl+shift+p Mac:Cmd+shift+p 打开面板输入babel安装 配置 打开.js, .jsx 后缀的文件; 打开菜单view, Synt

[转载]Sublime Text 3 搭建 React.js 开发环境

[转载]Sublime Text 3 搭建 React.js 开发环境 Sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babel-sublime 支持ES6, React.js, jsx代码高亮,对 JavaScript, jQuery 也有很好的扩展.关于 babel 的更多介绍可以看这里:为什么说Babel将推动JavaScript的发展 安装 PC:Ctrl+shift+p Mac:Cmd+shift+p 打开面板输

[译]使用Babel和Broserify创建你的ES6项目

原文地址:Setting up an ES6 Project Using Babel and Browserify JavaScript的发展日新月异,ES6很快就要接管JS了.很多著名的框架像AngularJS 2.React Native已经开始支持ES6了.我们是时候准备拥抱变化了,所以我们应该开始在几乎所有的浏览器支持之前使用ES6码代码了. 本文将要介绍如何使用Babel和Browerify来创建项目并且编写能够运行在老版本浏览器上的现代代码.Babel将ES6代码编译为大多数浏览器(