这是一个很长的时间 - 有没有办法通过JS插件检测较差的vs强大的显卡性能?检测显卡性能 - JS
我们为客户构建了一个视差网站,它在较低性能的机器上出现断断续续的问题 - 我们可以调整性能以使其在整个主板上更好地工作 - 但这当然会降低具有更高性能机器的用户的体验。
我们可以检测浏览器的版本也 - 但同样的浏览器可以在低和高性能的计算机上运行 - 这样不利于我们的情况
任何想法?
这是一个很长的时间 - 有没有办法通过JS插件检测较差的vs强大的显卡性能?检测显卡性能 - JS
我们为客户构建了一个视差网站,它在较低性能的机器上出现断断续续的问题 - 我们可以调整性能以使其在整个主板上更好地工作 - 但这当然会降低具有更高性能机器的用户的体验。
我们可以检测浏览器的版本也 - 但同样的浏览器可以在低和高性能的计算机上运行 - 这样不利于我们的情况
任何想法?
requestAnimationFrame(rAF)可以帮助解决这个问题。
你可以使用rAF来计算出你的帧速率。关于这方面的细节:calculate FPS in Canvas using requestAnimationFrame。简而言之,你可以计算出帧之间的时间差,然后除以1(例如1/.0159s〜= 62fps)。
注:您选择的任何方法,性能将被任意决定。也许任何超过每秒24帧的内容都可以被认为是“高性能”。
+1提供了一个“真实”的答案......而不是我的警察:-) – 2013-04-01 21:00:34
Firefox有一个不支持的图形卡列表:https://wiki.mozilla.org/Blocklisting/Blocked_Graphics_Drivers有关的help acrticle。
但你只能访问WebGL的功能时,间接地测试他们......
http://get.webgl.org/troubleshooting/引导你到时候有问题,相应的浏览器提供商。当检查JS代码时,您将看到他们通过测试
if (window.WebGLRenderingContext) {
alert('Your browser does not support WebGL');
}
如果您有最新的图形卡。
WebGL的可用性表示最新的浏览器,而不是高图形性能。 – Bergi 2013-03-13 21:02:32
@Bergi不是毫不夸张。我使用Win7和最新的浏览器(FF19)运行旧的MacBook,但是我的图形硬件对WebGL来说不够好(根据Mozilla)。但Chrome运行所有WebGL代码,由于缺乏制造商的支持,他们完全禁用了Graphic Acceleration。 – powtac 2013-03-13 23:42:17
这个答案只适用于WebGL。我可以有一个性能很好的显卡,但不支持OpenGL。另外,请记住,显卡性能对被问到的特定问题没有多大影响。 – Brad 2013-03-19 21:08:47
您可能会考虑检查浏览器是否支持window.requestAnimationFrame,这表明您正在新浏览器中运行。或者考虑检查jQuery.fx.interval。
然后,您可以实现自定义功能来衡量可用的处理能力。您可以尝试使用自定义缓动功能,然后通过像.slideDown()这样的功能来运行,以了解可用的计算能力。
看到这个answer关于如何检查在JavaScript性能更多的想法的另一个问题。
这是“旧学校”加载屏幕有用的地方,你可以在前台(或隐藏)渲染一些复杂的东西,如果它看起来很古怪或轻快就没关系 - 而且当你有加载您的资源,您可以决定启用或禁用哪些效果。
基本上你会使用什么jcage提到这一点,测试帧率(即使用setInterval
结合计时器)。这并不总是100%可靠,但是因为如果他们的机器在这种情况下决定做一个三螺旋后退翻腾(或更可能的事情),你会得到一个狡猾的阅读。根据所涉及的动画,可能会实时升级和降级效果,但这对代码来说总是更加棘手,再加上您自己对情况的分析实际上有时会导致性能下降。
为什么不让用户决定? Youtube(和许多其他视频共享网站)实现了播放质量的选择器,现在是一个带有您可以选择的分辨率列表的齿轮图标。请问这样一个HD | SD or Hi-Fi | Lo-Fi在应用程序的上下文中选择器的工作(或者甚至是有意义的)?
如果浏览器是超现代的并且支持requestAnimationFrame,您可以实时计算动画帧速率,并为较慢的机器放弃动画设置。这就是IE 10,Firefox 4,Chrome 10和Safari 6.
您基本上会创建一个'tick'函数,该函数在requestAnimationFrame()回调上运行,并跟踪每个tick之间传递的毫秒数。经过如此多的刻度被注册后,您可以对它进行平均以确定您的整体帧率。但有两点需要说明这样:
当标签处于后台requestAnimationFrame回调将暂停 - 这样一个单一的,突然几秒钟帧之间多分钟的延迟,并不意味着它是一个缓慢的动画。并且:
简单地在每个动画帧上运行JavaScript标尺将导致整个动画减慢一点;没有办法测量那样的东西而不会对它产生负面影响。请记住,海森堡是个混蛋。
对于旧的浏览器,我不知道有什么方法可靠地测量帧速率。你可能可以使用setTimeout()来模拟它,但它不会那么准确 - 并且可能会对性能产生更多的负面影响。
这可能是基于风险/收益的决定。我认为你必须在这里做出重要而艰难的决定。
1) 如果您决定有两个verions,你将不得不花一些时间:
你很可能最终会得到不正确的实现,例如在我的电脑运行70个铬标签,带1080p动画的VLC, nd IntellijIDEA
至少现在,我的MBP 2012模型将被检测为“慢”电脑的概率很高。
误报真的很难弄清楚。
2) 如果你选择一个版本,你将不得不在HD和Lo-Fi之间进行选择,就像@Patrick提到的那样,在我看来这又是一个错误。
我会建议你去Google Analytics,找出浏览器分布(是的,我知道它可能会引起误解,但其他测试也是如此),并基于此(如果大多数用户是Chrome +现代的IE/FF与HD版本一起使用,但是花一些时间来计算优化策略
总有一些事情可以做得更好更快,获得一台旧笔记本电脑,然后进行优化,直到你获得体面的FPS率。哟作为开发者需要做出这样的决定,那就是你的责任
3) 如果你从浏览器发行版中发现你绝对必须使用Lo-Fi版本,好吧,试着去思考是否值得“降级”,并且只有在这是你最后的手段时才实施它。
这也是一个longshot :)试图最初检测帧率的工作?例如,在一段时间内对网站进行帧计数,并对网站进行适当的配置并相应地进行调整? – jcage 2013-03-13 16:36:45
喜欢这个计划 - 努力尝试这个好方法吗? – Dancer 2013-03-13 17:32:41
显卡性能不一定是此问题的限制因素。 – Brad 2013-03-20 03:29:59