10

I want to benchmark some Javascript code in the browser, but it may trigger Firefox's "Warning: Unresponsive script" popup. This allows the user to click "Stop script" in the event that the browser is caught in a runaway function. While the pop-up is displayed, the currently running function has been halted. This isn't ideal, so is there a way to run my benchmarks differently such that Firefox doesn't popup this warning and ruin my results?

spoulson
  • 20,938
  • 14
  • 75
  • 101

5 Answers5

12

In firefox's address bar type about:config

You want to change dom.max_script_run_time to be large enough for your scripts to run.

tloach
  • 7,929
  • 1
  • 32
  • 44
9

You have to break up long actions into smaller ones and perform them in turns. This will also allow a better progress indication.

http://www.sonofsofaman.com/hobbies/code/settimeout.asp

Kristina Brooks
  • 15,329
  • 28
  • 106
  • 178
  • 2
    Can you elaborate? A simple example, maybe? – spoulson Dec 16 '09 at 20:25
  • Here's an example of using setTimeout to break up the running of the javascript: http://www.sonofsofaman.com/hobbies/code/settimeout.asp If you're doing benchmarks, make sure that you allow the code to run long enough to make up for the timer resolution. You'll probably want to read this: http://ejohn.org/blog/accuracy-of-javascript-time/ – Annie Dec 16 '09 at 20:31
  • That link seems to be broken. Could you elaborate on how to do that in your answer? – Chris Oct 07 '16 at 07:31
4

See in blog of Nicholas C. Zakas What determines that a script is long-running? (at 2009/01/05)

Speed up your JavaScript, Part 1 http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

there are the reasons and the ways how to avoid the dialog

zmila
  • 1,641
  • 1
  • 11
  • 13
2

You can use the script from this question to break processing long lists into smaller chunks:

How can I give control back (briefly) to the browser during intensive JavaScript processing?

Community
  • 1
  • 1
Diodeus - James MacFarlane
  • 110,221
  • 32
  • 151
  • 174
0

The below code solved that problem for me...

<script type="text/javascript">
   function downloadJSAtOnload() {
   var element = document.createElement("script");
   element.src = "deferredfunctions.js";
   document.body.appendChild(element);
   }
   if (window.addEventListener)
   window.addEventListener("load", downloadJSAtOnload, false);
   else if (window.attachEvent)
   window.attachEvent("onload", downloadJSAtOnload);
   else window.onload = downloadJSAtOnload;
</script>
Lucky
  • 15,935
  • 19
  • 113
  • 150