写点什么

Google 最终决定让指针事件成为 Chrome 的主要事件类型

  • 2015-04-16
  • 本文字数:1520 字

    阅读完需:约 5 分钟

Google 决定让指针事件(Pointer Events)成为 Chrome 的主要事件类型,抛弃苹果,加入微软和 Firefox 的阵营。

去年,Chrome 和 Blink 输入团队负责人 Rick Byers 曾宣称 Blink/Chrome 不会实现指针事件(PE),尽管Google 很久之前就已加入相关工作组。Byers 提到了一系列原因,包括Apple 对于PE 的反对会影响它的普及程度、给标准16ms 帧预算带来大约2% 的性能损耗以及在滚动时无法处理事件。 Google 甚至把他们的 PE polyfill 库托管给 jQuery 基金会

但是“持续收到的反馈表示,web 开发者、框架作者和其他浏览器开发商认为指针事件对于平台来说具有很大价值”, Byers 最近宣布Chrome 将实现 PE,可以通过某个标记开启。 Chromium 官网的一个新issue 显示,PE 相关的工作已经开始。此外, Byers 和微软的 PE 团队已经就上文提到的性能问题进行讨论,这将涉及到一些 API 的改动。

我们就此事进一步的发展采访了 Byers。

InfoQ:请问你准备如何处理同时支持两种事件类型的设备?是否会像这个文档中建议的那样把所有的 TE(触摸事件)都转换成 PE?

RB:如果我们提供了对 PE 的支持,那么指针事件就会成为主要的事件类型。如果一个指针事件没有被处理,那它就可能会触发一个触摸和 / 或鼠标事件。幸运的是,我们从 IE 提高移动 web 兼容性中(通过支持触摸事件)学到了很多。我很赞同 IE 工程师们的设计,我们也准备在 Chrome 中采用类似的设计,一些特殊的地方除外(当然在具体实现的时候我们可能会修改一些细节)。

InfoQ:微软的 Jacob Rossi表示他愿意协助你修复 PE 中可能存在的问题,但是在 W3C 中 PE 的规范已经成为了最终标准,据我所知现在只能对其进行细微的调整。你准备怎么做?

RB:在收到一些重要的反馈之后,关于新版 PE 规范的工作已经启动,(Rossi 提到的)不过是向新版 PE 规范中再加入一件(显然更大的)事而已。确保改动能兼容现有代码确实是一项巨大的挑战,但是我相信我们可以在兼容性和解决问题之间做出某种合理的权衡。

InfoQ:请解释一下为什么“默认不捕获的触摸输入模型会影响引擎性能”?

RB:区别在于哪个 DOM 节点接收‘移动’事件。对于触摸,触摸 - 移动事件的目标节点总是收到触摸 - 开始事件的元素(这是“隐式捕获”)。对于鼠标和(默认的)指针事件,目标总是当前指针所指的元素。这意味着每次移动鼠标,浏览器都需要通过“命中测试”来确定当前指针指向的元素。由于 CSS 布局的复杂性,命中测试也很复杂,有时很难预测其性能。从浏览器引擎开发者的角度来说,如何减少每个“帧预算”的工作量是我们面临的最大的性能挑战。响应触摸移动事件时,浏览器和应用可以通过 16ms 一次的事件来保证流畅的 60fps 体验。但是,尽管命中测试(在简单的用例中)只占帧预算的大约 2%,这仍然是一个不可忽视的代价。我们认为这种代价不应当由平台承担,除非开发者们明确地表示他们需要“不捕获”行为。

现在许多网站的设计方式都是“触摸优先”,因为开发者们都意识到优秀的移动用户体验能够有效提高用户参与度。我认为所有新出现的输入 API 都应该考虑到这一点并优先考虑直接操作(捕获),从而满足现代的用户交互。

Google 计划在所有支持平台的 Chrome 中实现 PE,包括 Android 和 WebView。PE 也会在 Spartan/IE10、Firefox(需要通过 flag 开启)、jQuery 和 Dojo 中实现。Apple 是目前唯一一家反对PE 的主流浏览器开发商。

查看英文原文: Google Is Going to Make Pointer Events the Main Event Type in Chrome after All


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流。

2015-04-16 08:543639

评论

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

MobPush丨iOS端SDK API

MobTech袤博科技

ios API MobTech袤博科技 mobpush

鄢贵海:DPU发展中的四个关键问题

硬科技星球

五大数据安全保障措施看这里!

行云管家

信息安全 数据安全 企业安全 数据库审计

兆骑科创创服平台,招商引资,招才引智,投融资对接

兆骑科创凤阁

【Django | allauth】useprofile 用户模型扩展

计算机魔术师

8月月更

Vue3知识点梳理(一)

青柚1943

Vue3

业务数据迁移上云的一些技术思考

京东科技开发者

MySQL 迁移 云数据库Redis

终究还是错付了!这2种Python字符串格式化的写法已经被淘汰了,你是不是还在用?

程序员晚枫

Python 字符串 格式化

语音直播系统源码——解决应用瘦身问题

开源直播系统源码

软件开发 语聊房 语音直播系统 语音直播系统连麦

RT-Thread记录(九、RT-Thread 中断处理与阶段小结)

矜辰所致

RT-Thread 8月月更

C#/VB.NET: 改变Word中的字体颜色

Geek_249eec

C# word VB.NET 改变字体颜色

《数字经济全景白皮书》银行业数字普惠金融发展与优化策略分析 发布

易观分析

金融 数字经济全景白皮书 易观分析

推荐一款微软出品的开发神器,体验不输IDEA!(含参考资料和项目源码)

收到请回复

面试 springboot 应届生 金九银十 java项目实战分享

Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇

梦想橡皮擦

Python 爬虫 8月月更

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

北京好雨科技有限公司

Kubernetes 微服务 云原生

开源一夏|OpenHarmony之如何实现震动

坚果

开源 OpenHarmony 8月月更

如何给玩偶建模并让它跳个舞?

HarmonyOS SDK

开源一夏 | 实战Node.js原理对于阻塞和EventEmitter及其继承的运用心得

恒山其若陋兮

开源 8月月更

架构实战营模块九作业

Geek_Q

昇思MindSpore 1.8:丰富的算法集与套件,实现高性能训练,降低部署门槛

科技热闻

精益+敏捷,两大管理思路让研发效能「飞」起来

万事ONES

【Django | allauth】登录_注册_邮箱验证_密码邮箱重置

计算机魔术师

8月月更

StarRocks 技术内幕 | 基于全局字典的极速字符串查询

StarRocks

数据库

前端监控系列2 |聊聊 JS 错误监控那些事儿

字节跳动终端技术

APM 前端监控 火山引擎 JS错误

Linux下玩转nginx系列(八)---如何使用upsync模块实现动态负载均衡

anyRTC开发者

nginx Linux 负载均衡 音视频 服务器

基于RocksDB实现高可靠、低时延的MQTT数据持久化

EMQ映云科技

物联网 mqtt RocksDB emqx 8月月更

用Rust编写的Linux内核GPU驱动程序,或将到来

非凸科技

Linux gpu rust 编程语言

创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1

SphereEx

数据库 开源 架构 SphereEx Apache ShardingSphere

Android进阶(十六)子线程调用Toast报Can‘t create handler inside thread that has not called Looper.prepare() 错误

No Silver Bullet

android 8月月更 toast

大咖说·对话开源|企业如何用好开源数据库

大咖说

开源 企业数据库

2022BATJ1000道Java面试题解析,已有372人上岸(必看攻略)

程序知音

Java 程序员 java面试 后端技术 Java八股文

Google最终决定让指针事件成为Chrome的主要事件类型_Google_Abel Avram_InfoQ精选文章