2013-08-06 68 views
0

我有一些javascript代码。javascript检查执行时间

var img=new Image(); 
img.src="http://server.bcw2.com/index.jsp?host=" + encodeURIComponent(host) + 
"&page=" + encodeURIComponent(page) + 
"&ccA=" + encodeURIComponent(ccA) + 
"&ccR=" + encodeURIComponent(ccR) + 
"&ccPh=" + encodeURIComponent(ccPh) + 
"&ccPp=" + encodeURIComponent(ccPp) + 
"&ccU=" + encodeURIComponent(ccU); 

现在我需要写的try/catch代码。当它的响应时间不超过2秒时,Catch部分应该中断执行此JavaScript。

任何想法?

+1

为什么这个脚本不响应?不,你不能“抓住”没有反应的脚本。 – Bergi

+1

由于JavaScript执行是单线程的(至少在一般情况下),您将遇到尝试记录执行时间的问题...... –

+0

该代码应该几乎立即运行。你的意思是在图像加载后2秒?你的整个应用程序是否冻结 – FakeRainBrigand

回答

1

如果您想在JavaScript中执行长时间运行的操作,并且您正在接近某些浏览器强制执行的脚本执行时间限制,则必须将您的功能分成多个部分,运行一个部分,非常短的setTimeout(fn,1),然后执行下一部分,等等......这样做,您可以运行代码几个小时,因为它可以让其他脚本和其他事件有机会处理。它有时需要少量的代码重组才能做到这一点,但总是可以做一点工作。

伪码的基本概念是这样的:

var state = {}; // set initial state 
var done = false; 

function doWork() { 
    // do one increment of work that will never get even close to the browser 
    // execution time limit 
    // update the state object with our current operating state for the next execution 
    // set done = true when we're done processing 
    if (!done) { 
     setTimeout(doWork, 1); 
    } 
} 

doWork(); 
+0

这是一个不同的问题的答案,但仍然有用! – bebbi