基于浏览器运行不同的JavaScript

running different JavaScript based on browser

本文关键字:JavaScript 运行 浏览器      更新时间:2023-09-26

画布清理在不同的浏览器上获得了截然不同的性能。看见http://jsperf.com/canvas-clearing2。

我需要清除每一帧的画布,我的操作方式对移动safari与桌面safari的性能有着巨大的影响。桌面Safari喜欢canvas.width=width,但移动Safari更喜欢canvas.drawRect().

有没有一种方法可以检测什么浏览器是基于它运行不同JavaScript的浏览器?我更喜欢通过JavaScript而不是服务器端来实现这一点。

此外,我发现jQuery的$.浏览器没有帮助,因为它无法区分移动safari和桌面safari。navigator对象也有类似的问题。

针对特定浏览器总是有点问题。虽然确实有一些方法可以做到这一点,但这并不是一种特别可维护的方法,因为每个浏览器都有很多不同的浏览器和版本,这些浏览器会随着时间的推移而变化,因此哪些浏览器是通过哪些代码可以一直变化来优化的。这就造成了维护方面的麻烦。例如,iPod Touch上的移动Safari与每一代iPhone或iPad上的移动Safari具有非常不同的性能特征。

所以。。。与其试图检测浏览器的类型,不如进行特征检测或性能检测,并根据任何给定浏览器的反应进行动态调整。如果做得好,这可以同样适用于所有浏览器,即使是你从未见过或尚未发布的浏览器。

在您的情况下,您可以设计一个快速性能测试,测试两种方法中每种方法的性能。如果这两种方法之间真的有很大的性能差异,那么你可能会在几百毫秒内分辨出差异,在本地浏览器上设置一个cookie,指示最有效的方法,然后从那时起在该浏览器中使用首选方法。如果你想,你可以让cookie每隔几个月过期一次(这样它就会每隔一段时间重新测试一次),或者你也可以把确切的浏览器版本放进cookie中,然后重新运行测试,如果浏览器版本每次都发生变化,就设置一个新的cookie(软件升级)。

通过这种方式,您的代码将始终在所有浏览器中使用最快版本的代码,无论是现在还是永远,您都不必维护/测试无数的浏览器来知道每个浏览器应该使用哪一个。

如果您正在寻找更持久、更可靠的解决方案,我支持jfriend00。然而,您仍然可以使用Javascript中的某些函数获取相当多的信息,并利用这些信息为您带来优势。

看看这个:

http://notnotmobile.appspot.com/

其他资源

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

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