2013-03-13 102 views
29

这是一个很长的时间 - 有没有办法通过JS插件检测较差的vs强大的显卡性能?检测显卡性能 - JS

我们为客户构建了一个视差网站,它在较低性能的机器上出现断断续续的问题 - 我们可以调整性能以使其在整个主板上更好地工作 - 但这当然会降低具有更高性能机器的用户的体验。

我们可以检测浏览器的版本也 - 但同样的浏览器可以在低和高性能的计算机上运行 - 这样不利于我们的情况

任何想法?

+5

这也是一个longshot :)试图最初检测帧率的工作?例如,在一段时间内对网站进行帧计数,并对网站进行适当的配置并相应地进行调整? – jcage 2013-03-13 16:36:45

+0

喜欢这个计划 - 努力尝试这个好方法吗? – Dancer 2013-03-13 17:32:41

+0

显卡性能不一定是此问题的限制因素。 – Brad 2013-03-20 03:29:59

回答

21

requestAnimationFrame(rAF)可以帮助解决这个问题。

你可以使用rAF来计算出你的帧速率。关于这方面的细节:calculate FPS in Canvas using requestAnimationFrame。简而言之,你可以计算出帧之间的时间差,然后除以1(例如1/.0159s〜= 62fps)。

注:您选择的任何方法,性能将被任意决定。也许任何超过每秒24帧的内容都可以被认为是“高性能”。

+1

+1提供了一个“真实”的答案......而不是我的警察:-) – 2013-04-01 21:00:34

1

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'); 
} 

如果您有最新的图形卡。

+2

WebGL的可用性表示最新的浏览器,而不是高图形性能。 – Bergi 2013-03-13 21:02:32

+0

@Bergi不是毫不夸张。我使用Win7和最新的浏览器(FF19)运行旧的MacBook,但是我的图形硬件对WebGL来说不够好(根据Mozilla)。但Chrome运行所有WebGL代码,由于缺乏制造商的支持,他们完全禁用了Graphic Acceleration。 – powtac 2013-03-13 23:42:17

+0

这个答案只适用于WebGL。我可以有一个性能很好的显卡,但不支持OpenGL。另外,请记住,显卡性能对被问到的特定问题没有多大影响。 – Brad 2013-03-19 21:08:47

1

您可能会考虑检查浏览器是否支持window.requestAnimationFrame,这表明您正在新浏览器中运行。或者考虑检查jQuery.fx.interval

然后,您可以实现自定义功能来衡量可用的处理能力。您可以尝试使用自定义缓动功能,然后通过像.slideDown()这样的功能来运行,以了解可用的计算能力。

看到这个answer关于如何检查在JavaScript性能更多的想法的另一个问题。

3

这是“旧学校”加载屏幕有用的地方,你可以在前台(或隐藏)渲染一些复杂的东西,如果它看起来很古怪或轻快就没关系 - 而且当你有加载您的资源,您可以决定启用或禁用哪些效果。

基本上你会使用什么jcage提到这一点,测试帧率(即使用setInterval结合计时器)。这并不总是100%可靠,但是因为如果他们的机器在这种情况下决定做一个三螺旋后退翻腾(或更可能的事情),你会得到一个狡猾的阅读。根据所涉及的动画,可能会实时升级和降级效果,但这对代码来说总是更加棘手,再加上您自己对情况的分析实际上有时会导致性能下降。

16

为什么不让用户决定? Youtube(和许多其他视频共享网站)实现了播放质量的选择器,现在是一个带有您可以选择的分辨率列表的齿轮图标。请问这样一个HD | SD or Hi-Fi | Lo-Fi在应用程序的上下文中选择器的工作(或者甚至是有意义的)?

1

如果浏览器是超现代的并且支持requestAnimationFrame,您可以实时计算动画帧速率,并为较慢的机器放弃动画设置。这就是IE 10,Firefox 4,Chrome 10和Safari 6.

您基本上会创建一个'tick'函数,该函数在requestAnimationFrame()回调上运行,并跟踪每个tick之间传递的毫秒数。经过如此多的刻度被注册后,您可以对它进行平均以确定您的整体帧率。但有两点需要说明这样:

  1. 当标签处于后台requestAnimationFrame回调将暂停 - 这样一个单一的,突然几秒钟帧之间多分钟的延迟,并不意味着它是一个缓慢的动画。并且:

  2. 简单地在每个动画帧上运行JavaScript标尺将导致整个动画减慢一点;没有办法测量那样的东西而不会对它产生负面影响。请记住,海森堡是个混蛋。

对于旧的浏览器,我不知道有什么方法可靠地测量帧速率。你可能可以使用setTimeout()来模拟它,但它不会那么准确 - 并且可能会对性能产生更多的负面影响。

1

这可能是基于风险/收益的决定。我认为你必须在这里做出重要而艰难的决定。

1) 如果您决定有两个verions,你将不得不花一些时间:

  • 弄明白快速,非侵入性的测试
  • 花费时间执行该
  • 卷成生产

你很可能最终会得到不正确的实现,例如在我的电脑运行70个铬标签,带1080p动画的VLC, nd IntellijIDEA

至少现在,我的MBP 2012模型将被检测为“慢”电脑的概率很高。

误报真的很难弄清楚。

2) 如果你选择一个版本,你将不得不在HD和Lo-Fi之间进行选择,就像@Patrick提到的那样,在我看来这又是一个错误。

我会建议你去Google Analytics,找出浏览器分布(是的,我知道它可能会引起误解,但其他测试也是如此),并基于此(如果大多数用户是Chrome +现代的IE/FF与HD版本一起使用,但是花一些时间来计算优化策略

总有一些事情可以做得更好更快,获得一台旧笔记本电脑,然后进行优化,直到你获得体面的FPS率。哟作为开发者需要做出这样的决定,那就是你的责任

3) 如果你从浏览器发行版中发现你绝对必须使用Lo-Fi版本,好吧,试着去思考是否值得“降级”,并且只有在这是你最后的手段时才实施它。