这是一个远景 - 无论如何可以通过 JS 插件来检测较差的和强大的显卡性能?
我们为客户建立了一个视差站点,它在性能较低的机器上卡顿 - 我们可以调整性能以使其更好地全面工作 - 但这当然会降低使用高性能机器的用户的体验。
我们也可以检测浏览器版本——但相同的浏览器可以在低性能和高性能机器上运行——所以对我们的情况没有帮助
有任何想法吗?
这是一个远景 - 无论如何可以通过 JS 插件来检测较差的和强大的显卡性能?
我们为客户建立了一个视差站点,它在性能较低的机器上卡顿 - 我们可以调整性能以使其更好地全面工作 - 但这当然会降低使用高性能机器的用户的体验。
我们也可以检测浏览器版本——但相同的浏览器可以在低性能和高性能机器上运行——所以对我们的情况没有帮助
有任何想法吗?
requestAnimationFrame (rAF) 可以帮助解决这个问题。
您可以使用 rAF 计算帧速率。此处的详细信息:使用 requestAnimationFrame 在 Canvas 中计算 FPS。简而言之,您计算出帧之间的时间差,然后除以 1(例如 1/.0159s ~= 62fps )。
注意:使用您选择的任何方法,性能将任意决定。也许每秒超过 24 帧的任何东西都可以被认为是“高性能”。
为什么不让用户决定呢?Youtube(和许多其他视频共享网站)实现了播放质量选择器,现在是一个齿轮图标,其中包含您可以选择的分辨率列表。会这样吗HD?SD或Hi-Fi| Lo-Fi选择器在您的应用程序上下文中工作(甚至有意义)?
这就是“老派”加载屏幕派上用场的地方,您可以在前景(或隐藏)中渲染一些复杂的东西,不管它看起来奇怪还是古怪——当你加载资源时,你可以决定启用或禁用哪些效果。
基本上你会使用 jcage 为此提到的,测试帧率(即结合使用 asetInterval
和计时器)。然而,这并不总是 100% 可靠,因为如果他们的机器在这种情况下决定进行三螺旋向后翻筋斗(或更可能的事情),你会得到一个狡猾的读数。根据所涉及的动画,可以实时升级和降级效果 - 但这总是更难以编码,加上您自己对情况的分析有时会导致性能下降。
Firefox 有一个内置的不支持的显卡列表:https ://wiki.mozilla.org/Blocklisting/Blocked_Graphics_Drivers相关帮助文章。
但是您只能在访问 WebGL 功能时间接测试它们......
当出现问题时,http: //get.webgl.org/troubleshooting/会引导您找到相应的浏览器提供商。检查 JS 代码时,您会看到它们通过
if (window.WebGLRenderingContext) {
alert('Your browser does not support WebGL');
}
如果您有最新的图形卡。
您可能会考虑检查浏览器是否支持window.requestAnimationFrame,这表明您正在运行较新的浏览器。或者考虑检查jQuery.fx.interval。
然后,您可以实现一个自定义函数来衡量可用的处理能力。您可以尝试使用自定义缓动函数,然后可以通过.slideDown()之类的函数运行该函数,以了解可用的计算能力。
有关如何检查 javascript 性能的更多想法,请参阅另一个问题的答案。
如果浏览器是超现代的并且支持 requestAnimationFrame,您可以实时计算动画帧速率,并为较慢的机器放弃您的动画设置。那是 IE 10、Firefox 4、Chrome 10 和 Safari 6。
您实际上将创建一个在 requestAnimationFrame() 回调上运行的“tick”函数,并跟踪每个滴答之间经过的毫秒数。在记录了这么多滴答声后,您可以对其进行平均以确定您的整体帧速率。但这有两个警告:
When the tab is in the background requestAnimationFrame callbacks will be suspended -- so a single, sudden delay between frames of several seconds to many minutes does not mean it's a slow animation. 和:
简单地在每个动画帧上运行一个 JavaScript 仪表会导致整个动画变慢一点;没有办法在不对它产生负面影响的情况下测量类似的东西。记住,海森堡是个混蛋。
对于较旧的浏览器,我不知道有什么方法可以可靠地测量帧速率。您可能可以使用 setTimeout() 对其进行模拟,但它不会那么准确 - 并且可能对性能产生更大的负面影响。
这可能是基于风险/收益的决策。我认为你必须在这里做出重要但艰难的决定。
1) 如果您决定拥有两个版本,您将不得不花一些时间:
你很可能会以不正确的实现告终,例如我的电脑正在运行 70 个 chrome 标签、带有 1080p 动画的 VLC 和 IntellijIDEA
我的 MBP,2012 型号被检测为“慢”计算机的可能性很高,至少现在是这样。
误报真的很难弄清楚。
2)如果您选择一个版本,您将不得不在 HD 和 Lo-Fi 之间进行选择,正如@Patrick 所提到的,我认为这又是一个错误。
我建议你去谷歌分析,找出浏览器分布(是的,我知道它可能会误导,但任何其他测试也可以)并基于此(如果大多数用户是 Chrome + 现代 IE/FF选择高清版,但要花一些时间弄清楚优化策略。
总有一些事情可以做得更好更快。购买一台较旧的笔记本电脑,并进行优化,直到获得不错的 FPS 速率。就是这样,作为开发人员,你需要做出决定,这是你的职责。
3) 如果从浏览器发行版中您发现您绝对必须使用 Lo-Fi 版本,那么请尝试认为“降级”是否值得,并且只有在您不得已时才实施它。