Chrome 39 新增 Beacon API 和 ES6 Generator 支持

  • James Chesters
  • 谢丽

2014 年 12 月 4 日

话题:JavaScriptGoogleChromeHTML5语言 & 开发

谷歌的 Chrome 团队发布了 Chrome 39 的稳定版本,更新包括 Web 应用程序 Manifest 规范、Beacon API 和 ES6 Generator 支持。

Chromiun 仪表板页面介绍,Web 应用程序 Manifest 规范定义了“一个基于 JSON 的 Manifest 文件”:

……它为开发人员提供了一个集中存放应用程序相关元数据的地方。这包括,但不限于,Web 应用程序名称、图标链接以及用户启动 Web 应用程序时的首选 URL。

Manifest 还允许开发人员指定 Web 应用程序的默认方向以应用程序在用户代理上的显示方式(比如全屏)。

Chrome 39 的稳定版本还引入了 Beacon API,并将其定义为“一种互操作方法,站点开发人员可以用它从用户代理向 Web 服务器传输少量的 HTTP 数据。”

在为网站HTML5Rocks写的文章《在 Chrome 39 中发送 Beacon 数据》中,谷歌开发者计划工程师 Ewa Gasperowicz 详细描述了 Beacon。

按照 Gasperowicz 的说法,使用 Beacon,

开发人员可以从浏览器向 Web 服务器异步发送数据有效载荷较小的 HTTP 请求,而不会延迟页面 unload 事件中其它代码的执行或者影响下一步页面导航的性能。

navigator.sendBeacon()方法会尽快将需要浏览器传输的数据存入队列,而不会降低导航速度。如果浏览器能够将待传输的数据存入队列,那么该方法就会返回 true,否则,返回 false。

也是在网站 HTML5Rocks 上,谷歌开发者关系工程师 Jeff Posnick 在文章《Generator 使用技巧》中将 Generator 描述为:

创建迭代器的特殊函数,而迭代器是有 next()方法的对象,调用该方法可以获取一个值。

在 Generator 函数里,关键词 yield 为 next()方法提供值。使用 yield 暂停 Generator 函数的执行,保留状态直到 next()方法被再次调用,这时,代码会重新启动继续运行,直到生成了另外一个值(或者 Generator 函数终止)。

通过支持 ES6 Generator,Chrome 允许开发人员创建迭代器,它在生成一个值后会暂停执行,并在被调用时恢复。

在博文《Chrome 39 Beta 测试版:JS Generator、Animation Playback Control 及 WebApp Manifest》中,谷歌软件工程师 Mounir Lamouri 写到,这“极大地简化了开发异步代码的过程,并且减少了对回调函数的依赖。”

不过,在 Reddit 上关于Chrome 39(现在已经稳定)提供 Generator 支持的讨论中,并不是社区里的每个人都完全清楚 Generator 的优点。用户piglet24问到,“对于已经是异步,并且使用了回调或 Promises 的代码,我不知道 Generator 能如何对其进行简化。这看上去与 C# 中的 yield return 非常相似。”

用户voidvector回复到:

我觉得你了解 C# 中的 async/await。

yield 和 await 都是暂停当前函数执行的语法,并且允许上述函数稍后在相同的上下文中恢复。因此,你可以编写一个(协程)框架,使用 yield 实现 await,反之亦然。“暂停函数执行并在稍后恢复”这种情况用一个抽象概念描述的话,称为“延续性(Continuation)”。yield 和 async/await 都是它的一种形式。

这里有一个 Generator 的演示示例。

Chrome 39 还支持 Mac 64 位,并包含若干安全方面的更新。Chrome 40 的稳定版本预计在 2015 年 1 月发布。

参考英文原文:Chrome 39 Brings Beacon API and ES6 Generators

JavaScriptGoogleChromeHTML5语言 & 开发