【问题标题】:How can I turn off hardware acceleration for certain HTML elements via CSS?如何通过 CSS 关闭某些 HTML 元素的硬件加速?
【发布时间】:2013-01-14 17:56:28
【问题描述】:

我使用 HTML5、CSS3 和 jQueryMobile 创建了一个非常复杂的网络应用程序。

似乎 jQueryMobile 通过translate3D 和/或translateZ 到处开启硬件加速。

现在我想为某些 HTML 元素关闭此功能。

这给了我两个问题:

  • 是否有 css 属性/属性或可以用来告诉浏览器关闭某些元素的硬件加速的东西?
  • 如果不是:我将不得不找到使用translate3DtranslateZ 的地方并简单地删除它们,对吗?我怎样才能做到这一点?整个标记非常复杂,包含许多 HTML 元素。我无法遍历检查器中的每个元素并进行搜索。

更新: 我要解决这个问题的原因

在我的网络应用中,有一些元素需要滑动(例如图片库)。在这种情况下,我需要硬件加速。对于需要 iScroll 的 div 容器和所有其他应设置动画的元素(例如滑动和淡入淡出动画)也是如此。

但是,应用程序的许多部分是静态的(不是动画的)。在 Safari 中使用特殊的启动选项,我能够使硬件加速的部分可见。通过这种方式,我注意到整个应用程序都得到了硬件加速,而不仅仅是必要的部分。

恕我直言,这不是一件好事,因为:

  • 加速整个过程会导致 GPU 负载过重,从而导致整个应用在滚动时卡顿。
  • AFAIK 最佳做法是让 CPU 处理静态内容,而 GPU 只处理所有花哨的动画内容。
  • 动画结束后,应停用硬件加速,因为它不再需要并且会缩短电池寿命。

【问题讨论】:

  • 也许您可以告诉我们您真正想要解决的问题。为什么硬件加速是一件坏事?你只需要修正你的时间吗?据我所知,选择使用硬件加速和不使用硬件加速是浏览器的业务,这可能会从一个浏览器版本更改为另一个版本。
  • @jfriend00 当然,我将该信息添加到我原来的问题中。 (Afaik,有些浏览器会自行决定何时触发硬件加速,何时不触发(例如 IE),但也有一些浏览器需要像 translateZ(0)translate3D(0,0,0) 这样的黑客来激活某些元素的硬件加速。
  • 我不认为你引用的任何不想要加速的原因在所有浏览器/设备上都是正确的。当浏览器认为 GPU 对性能和电池寿命有利时,浏览器决定使用 GPU 而不是 CPU,而不是相反。此外,随着浏览器的改进和它们运行的​​硬件的发展,这种情况会随着浏览器的改进和版本的变化而变化。我看不出你怎么可能在你的网页中知道在任何给定的浏览器/设备组合中哪种加速是最好的或有害的。
  • @jfriend00 我只是在各种浏览器上测试了它并打开/关闭硬件加速。
  • 您是否打算在每次新的浏览器版本出现时重新测试?浏览器会不时改变它们的行为以支持加速 - 这就是我的观点。

标签: iphone html css jquery-mobile hardware-acceleration


【解决方案1】:

在翻阅了上万行 CSS 代码后,我发现:

.ui-page{-webkit-backface-visibility: hidden !important}

这对所有页面都有效并导致了问题。删除该行为我修复了它。

【讨论】:

  • 我的应用中没有这行,请问我应该如何关闭加速?
猜你喜欢
  • 2013-12-17
  • 2012-10-05
  • 2012-11-01
  • 2014-11-05
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多