有没有办法以编程方式测试浏览器 GPU 加速?
Posted
技术标签:
【中文标题】有没有办法以编程方式测试浏览器 GPU 加速?【英文标题】:Is there a way to programmatically test for browser GPU acceleration? 【发布时间】:2011-06-25 17:13:05 【问题描述】:我想在我目前正在开发的网站上包含一些“花里胡哨”的功能,但我不想让我的用户陷入整个机器的困境。有什么方法可以测试当前浏览器是否支持 GPU 加速?
我可以只检查 UserAgents,但我一直听说它不够准确,无法信任。
我想我可以构建一个画布元素,进行很多绘图调用,然后为它们计时?任何低于某个阈值的东西我可以认为对于我多余的额外内容来说足够好?这样就够了吗?
【问题讨论】:
【参考方案1】:避免被浏览器 UserAgent 黑客攻击所愚弄的最佳方法是检查对支持 GPU 加速的浏览器版本中包含的最新功能的支持。您需要进行一些挖掘才能找到与 GPU 加速相同的版本中添加的内容。
请记住,目前对画布的 GPU 支持在 Windows 上有效 only
- 所以您必须将所有运行 OSX 的机器排除在外,并且只能在 ie9、chrome 11 和 firefox 4 中使用 - 所有它们可以是 RC、beta 或开发版本。
以 IE9 为例: 只有 IE 有滚动条颜色 CSS 属性,只有 IE9 表单所有 IE 都支持 css opacity
function isIE9()
var bodyStyle = document.body.style;
return (bodyStyle.scrollbar3dLightColor != undefined && bodyStyle.opacity != undefined)
【讨论】:
这样就可以了。没有我正在寻找的附加功能,其他系统/旧浏览器的用户也不会错过任何内容。他们只会错过无用的动画等。我宁愿用户只是不查看它们,而不是在 Pentium II 上以 4 fps 运行。 @Emrikol 是的,我相信这是最好的方法,如果您计划的效果不能被一些需要更少 CPU 的不太花哨的效果代替,最好不要添加它们,如果他们将冻结浏览器甚至挂起它。尽管您总是可以在页面顶部添加某种功能区,并显示有一些很酷的信息可以查看您是否有更新的浏览器 - 例如,如果我没有看到它,我肯定会错过它:) 我的浏览器支持所有最新功能——但是,我的老电脑不支持。在我的情况下,检查浏览器功能会给你一个误报,并且让我的电脑严重瘫痪。 @Stephen P,如果您老化的计算机有足够强大的 GPU 来支持卸载,并且它已启用,那么它可能不会陷入困境。我最初的想法是通过针对 GPU 浏览器加速的最低要求进行测试来粗略估计用户的 PC。 @Emrikol,我同意,但我没有有 GPU,而且我的盒子很旧,但询问 浏览器 可以告诉你“是的,我,浏览器,支持这一点”,但没有告诉你“除了这个旧机器中没有 GPU”,这会导致误报。【参考方案2】:为什么它的 GPU 加速很重要?唯一重要的是性能。
因此,即使您可以确定是否有 GPU 加速,对 canvas 元素进行计时也是更好的选择。
【讨论】:
好吧,我只是希望如果有某种 GPUEnabled 标志,我可以检查它会给我一个明确的“是”或“否”,而无需求助于一些黑客。 我的意思是GPU加速只是一个你不应该关心的实现细节。当您真的想知道性能成本是否可以接受时,IMO 检查 GPU 加速是不可靠的,而不是相反。 为什么?如果启用了 GPU 堆肥,那么可以确保他们的机器和显卡足够强大。不能简单地在他们的 RIVA TNT2 卡上启用加速。如果我只是运行一个基准测试,它会根据机器正在做什么而变化。如果另一个 CPU 密集型进程正在运行,那么我可能会得到误报。 @Emrikol 一点也不。例如,请注意enabling GPU Acceleration massively slows down some operations in Firefox 4: html5 CanvasputImageData()
在硬件加速on 时会变慢 大约 80 倍。
@Phrogz 我必须指出,您提供的 SO 链接指的是 FF 4 中的一个错误。帖子作者说,在 FF 3.6 中使用 GPU 加速时,相同的操作比没有时运行得更快。 GPU 加速本身并不慢(在这种情况下),只是 Mozilla 团队破坏了从 3.6 到 4.0 的一些东西。对于@Emrikol,这里仍然有一个有效的观点:更复杂的系统会出现更多问题。他可能会获得他想要的性能,但也可能需要调试更多。以上是关于有没有办法以编程方式测试浏览器 GPU 加速?的主要内容,如果未能解决你的问题,请参考以下文章