写点什么

Chrome 39 新增 Beacon API 和 ES6 Generator 支持

2014 年 12 月 04 日

谷歌的 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

2014 年 12 月 04 日 06:312105
用户头像

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

关注

评论

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

聚焦目标,团队工作不再一盘散沙(上)

一笑

管理 敏捷 目标管理 28天写作

僵尸进程的成因以及僵尸可以被“杀死”吗?

AI乔治

Java 架构 进程

低代码开发技术

Sam678678

夜莺二次开发指南-监控系统(3)

qinyening

滴滴夜莺 夜莺监控

大型企业引进低代码开发技术是大趋势

Sam678678

智慧平安社区平台搭建方案,智慧社区综合管理系统开发

WX13823153201

智慧平安社区平台搭建

Android开发时的多点触控是如何实现的?

博文视点Broadview

微信视频号常见问题 | 视频号 28 天 (06)

赵新龙

28天写作

okhttp3 第一次使用

我就感觉到快

Socket粘包问题终极解决方案—Netty版(2W字)!

王磊

Java socket Netty

智能合约上链系统开发|智能合约上链APP软件开发

开發I852946OIIO

系统开发

与前端训练营的日子 --Week11

SamGo

学习

夜莺二次开发指南-用户资源中心

qinyening

滴滴夜莺 夜莺监控

调查bug的手段有哪些?(没有调查,就没有发言权,二)Jan 13, 2021

王泰

28天写作

每个人都拥有这项神技能

熊斌

职场成长 28天写作

知乎问答:“既然生命无意义,为什么要活着?”

三只猫

28天写作

【Mysql-InnoDB 系列】关于一致读

程序员架构进阶

MySQL 架构 innodb 28天写作

一文学会Java死锁和CPU 100% 问题的排查技巧

AI乔治

Java 架构 死锁 cpu 100%

港股配资系统搭建

软件开发大鱼V15724971504

金融科技 港股交易系统开发 在线开户系统 CFD交易系统 港股多账户系统

实时媒体AI,打破内容创作天花板,加速视频创新

华为云开发者社区

人工智能 云原生 媒体 视频

项目管理系列(1)-如何开好一个周会

Ian哥

项目管理 28天写作

JFR定位线上问题实例 - JFR导致的雪崩问题定位与解决

AI乔治

Java 架构 线程

夜莺二次开发指南-任务执行中心

qinyening

滴滴夜莺 夜莺监控

用Rust写点啥:数据结构篇——单向链表

Kurtis Moxley

数据结构 rust

HDFS SHELL详解(6)

罗小龙

hadoop 28天写作 hdfs shell

【PS】给黑白照片上色

学习委员

PhotoShop ps 28天写作

Redis 学习笔记 02:SDS 简单动态字符串

架构精进之路

redis 七日更 28天写作

一次慢查询暴露的隐蔽的问题

AI乔治

Java sql 架构 SQL优化

开发复杂业务系统,有哪些设计思路

邴越

十八般武艺玩转GaussDB(DWS)性能调优:路径干预

华为云开发者社区

数据库 sql 性能调优 GaussDB 算子

夜莺二次开发指南-资产设备管理

qinyening

滴滴夜莺 夜莺监控

Hummer 轻量级跨端技术框架详解及实战

Hummer 轻量级跨端技术框架详解及实战

Chrome 39新增Beacon API和ES6 Generator支持-InfoQ