检测Javascript何时表现不佳

时间:2010-03-19 07:57:05

标签: javascript jquery performance

我正在使用jquery中的webapp,在没有太多资源的旧机器或机器上,可能表现不佳。为了解决这个问题,我想制作一个降级版本,禁用某些功能,特别是那些依赖大图像的功能。

我怎么知道我的应用程序在jquery或javascript中的用户计算机上是否运行不佳?我只需要一种方法来调用一个会降低应用程序性能的函数。 (特别是当用户可能在系统内存不足时)

我能想到的唯一方法是手动用户干预,但该选项会为不需要它的用户增加混乱,并且需要它的用户可能不会注意到它。

谢谢!

7 个答案:

答案 0 :(得分:5)

在javascript开始运行之前无法判断。您可以像这样分散一些分析Date对象:

var timeTaken;
var start = +new Date();  // cast right now to a number

for (i = 0; i < 1000000000; i++)  // Some seriously intensive loop
{
    // ...
}

timeTaken = (+new Date()) - start;  // calculate the total time taken

if (timeTaken > 500)  // if time taken is longer than 500ms
    switchToBasic();

您应该记住,还有其他因素会影响浏览器的性能。如果用户已经在进行一些密集的CPU操作,这可能会导致他们的机器切换到基本模式,即使他们拥有相当强大的计算机。

答案 1 :(得分:1)

如果您确实需要确定它适用于低端计算机(并且周围没有任何旧计算机),为什么不尝试使用VirtualBox等虚拟机。通过在虚拟机中运行一个操作系统,可能会自动减慢速度,从而模拟较慢的硬件。我很确定大多数虚拟机都允许你调整虚拟CPU的速度......


至于自动检测客户端何时是慢速计算机,我不确定您是否可以可靠地检测到这一点,而不添加进一步减慢计算机速度的测试。

我建议你先创建一个允许用户切换“慢速计算机模式”的链接。这样,使用慢速计算机的患者可以坐下来等待很多,以便在他们想要时获得奇特的功能,或者如果他们不耐烦则可以将其关闭。这更容易实现,您可能会发现测试人员/用户实际上对该解决方案感到满意......:)

如果您决定进行一些自动检测,请同时进行手动覆盖,因为自动检测失败而无法更改它,因此提供虚拟数据非常烦人。

答案 2 :(得分:0)

你能编写一个运行受控测试的javascript函数,对结果进行计时,然后将其作为降级网站的基础吗?

可能是SunSpider中某个测试的较小版本,例如

答案 3 :(得分:0)

与其他人一样,运行受控计算测试并测量他们花费的时间。但是,不要只做一次,而是做一些简短的测试。如果它甚至在一个时间内发生,你得到一个快速的结果,你知道你有一台快速的机器。

快速机器可能已被其他任务淹没,但慢速机器暂时不会突然变快。

根据您的应用程序,您还可以向用户添加提示,以便找到更快的浏览器。使用JIT编译Javascript的浏览器速度要快得多。

答案 4 :(得分:0)

您是否已经完成了所有工作以使应用程序更快?

例如,您可以通过Firebug分析器运行应用程序,并使用YSlow检查整个系统的性能。

答案 5 :(得分:0)

Gmail会显示一个加载栏,其中包含“切换到仅限HTML”链接。你可以沿着那些方向尝试一些东西。 (另外,如果加载需要很长时间,“切换到仅HTML”链接会变得更加突出。它会弹出到屏幕中间。)

答案 6 :(得分:0)

您可以设置计时器以显示允许用户切换到基本模式的对话框。 showSlowDialog不会停止慢速操作的过程,因为它在另一个线程中运行(并发运行)。

function showSlowDialog() {
   if(confirm("switch to slow?")) {
       switchToSlow();
   }
}

var timer = setTimeout("showSlowDialog()", 5000); // show dialog in 5 seconds
SomeSlowishOperationThatMayOrMayNotTakeSomeTime(); // do long operation
clearTimeout(timer); // clear timer.