Try/Catch performance overhead

JavaScript performance comparison

Revision 24 of this test case created

Info

Using try/catch inside of functions that allocate lots of variables introduces significant overhead. See this discussion related to node.js https://groups.google.com/forum/#!topic/nodejs-dev/E-Re9KDDo5w

Interestingly, other js engines don't have this overhead. All test runs have pretty uniform performance. But they are also significantly slower than the v8 control case.

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
control - no try/catch
function test(j) {
  var i, s = 0;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  return s;
}
test(100000);
 
pending…
try/catch inside function
function test(j) {
  try {
    var i, s = 0;
    for (i = 0; i < j; i++) s = i;
    for (i = 0; i < j; i++) s = i;
    for (i = 0; i < j; i++) s = i;
    for (i = 0; i < j; i++) s = i;
    return s;
  } catch (e) {}
}
test(100000);
 
pending…
try/catch outside function
function test(j) {
  var i, s = 0;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  return s;
}
try { test(100000); } catch (e) {}
 
pending…
try/catch outside function as a function
function tryCatch(func){
try {
  return func();
 }
catch (e) {
  return(e)};
 }
function test(j) {
  var i, s = 0;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  for (i = 0; i < j; i++) s = i;
  return s;
}
tryCatch(test(100000));

 
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment