运行时性能的应用科学
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
去年年底,我构建了 Chrome 开发者峰会网站。我希望它具有 Material Design 的外观和风格,因为它是一种很棒的设计语言,而且我觉得它非常适合我想要创建的网站类型。但是,与任何新的设计语言一样,也存在一些问题、挑战和决策,尤其是在处理网络惯例时更是如此。
制作这个网站时特别具有挑战性的一个方面是,点击卡片时的“包版”效果。
想要以 60fps 的帧速率实现这样的效果,我们需要进行一些思考、进行原型设计和一些有趣的折衷。在 Chrome 开发者峰会上,我谈到了这种效果,并详细解释了我是如何构建这种效果的。
高性能动画,至少目前是那些更青睐浏览器的合成器的动画。如果您能够坚持更改变形和不透明度属性,则通常会看到出色的效果。我对卡片动画采用的常规方法就是这样:
- 测量卡片收起时卡片中所有元素的位置。
- 切换卡片的类别即可将其展开(而不显示动画)。
- 现在,卡片已展开,请重新测量卡片中元素的位置。
- 计算差值。
- 应用负转换,将元素移回起始位置。
- 开启动画。
- 移除负转换,观察元素迅速恢复到屏幕上的最终位置。
所有这些操作听起来可能开销很大,但从用户交互的那一刻算起,有一个 100 毫秒的窗口,动画必须开始播放。如果超过该值,用户就会察觉到延迟。您可以利用这段时间执行成本高昂的准备工作,这样就能降低动画播放期间的运行成本。在大约 50-100 毫秒后,还有一个窗口用来进行整理工作,这可能非常方便,具体取决于您要执行的操作。
在前 100 毫秒内完成动画的高开销工作,在 Nexus 5 上,这项工作大约需要 70 毫秒,因此还有余地。
获取代码
如果您想详细了解该网站,代码已在 GitHub 上发布一事,您会很高兴。欢迎前来看看!
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-07-25。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-07-25。"],[],["The core content focuses on building a high-performance \"takeover\" animation for the Chrome Dev Summit site, inspired by Material Design. The process involved measuring element positions in collapsed and expanded states, calculating differences, applying negative transforms, toggling animations, and removing transforms to achieve the effect. This method ensures animations run at 60fps by utilizing the browser's compositor, focusing on transform and opacity changes, with heavy lifting within a 100ms user interaction window. The site's code is available on GitHub.\n"]]