基于浏览器运行不同的JavaScript

时间:2012-02-05 03:02:18

标签: javascript

Canvas清理在不同浏览器上的性能差异很大。请参阅http://jsperf.com/canvas-clearing2

我需要每帧清除画布,我如何做它对移动Safari和桌面游戏性能有很大的影响。桌面Safari喜欢canvas.width = width但移动safari更喜欢canvas.drawRect()。

有没有办法检测什么浏览器是基于它运行不同的JavaScript?我宁愿通过JavaScript而不是服务器端来做到这一点。

另外,我发现jQuery的$ .browser没有帮助,因为它没有区分移动safari和桌面safari。导航器对象也有类似的问题。

2 个答案:

答案 0 :(得分:3)

定位特定浏览器总是有点问题。虽然有一些方法可以做到,但这并不是一种特别易于维护的方法,因为每个浏览器都有很多不同的浏览器和版本,而且这些浏览器会随着时间的推移而发生变化,因此哪些浏览器可以通过哪些代码更改所有时间。这造成了相当大的维护问题。例如,iPod Touch上的移动Safari与每个不同代的iPhone或iPad上的移动Safari具有非常不同的性能特征。

所以......不是试图检测浏览器的类型,而是根据任何给定浏览器的反应进行功能检测或性能检测并动态调整。如果做得好,这对所有浏览器都同样有效,甚至是你从未见过或甚至还没有发布过的浏览器。

在您的情况下,您可以设计一个快速性能测试来测试两种方法的性能。如果这两种方法之间确实存在很大的性能差异,那么你可以在几百毫秒的时间内分辨出差异,在本地浏览器上设置一个cookie来指示最有效的方法然后只使用首选方法浏览器从那时起。如果你愿意的话,你可以让cookie每隔几个月过期一次(所以它会偶尔重新测试一次)或者你也可以将确切的浏览器版本放入cookie中并重新运行测试并在浏览器中设置一个新的cookie版本每次更改(软件升级)。

通过这种方式,您的代码将始终在所有浏览器中使用最快的代码版本,现在和将来永远不需要维护/测试数以万计的浏览器,以了解哪些应该用于每个浏览器。

答案 1 :(得分:1)

如果你正在寻找更持久,更接近肯定的解决方案,我会在 jfriend00 。但是,您仍然可以使用Javascript中的某些函数提取相当多的信息,并将其用于您的优势。

检查出来:

http://notnotmobile.appspot.com/

其他资源

导航器对象:http://www.w3schools.com/js/js_browser.asp

浏览器检测:http://www.quirksmode.org/js/detect.html