为什么说Babel[?be?bl]将推动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应用和发展的主要动力。
时间: 2024-11-04 14:31:00

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

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

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

为什么说 Babel 将推动 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 年相比,大家对人工智能多了一些冷静和理性,少了很多浮躁和喧嚣.一方面,人工智能技术一直在向前推进:另一方面,智能 +,即人工智能与垂直行业的结合也越来越紧密,正在更加深刻地

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

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

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亿美元.根据测算,这一数据今

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 打开面板输

React全栈--现代前端技术

React全栈–现代前端技术 1.ES6– 新一代JavaScript标准 1.1 const和let关键字 以前只有全局变量以及函数内部的局部变量,所以以前的局部变量只能定义在函数里面,但是现在不是了,可以通过let关键字来定义局部变量.同时通过const关键字来定义常量,定义后的基本类型数据是不能改变的,但是定义的是引用类型的变量的话,还是可以改变的. 1.2 函数 1.箭头函数,在回调中很有作用,箭头函数永远是匿名的 2.this在箭头函数中的使用:在嵌套函数中,碰到setInterval