Try/Catch performance overhead
JavaScript performance comparison
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.
Preparation code
<script>
var tries = 10000;
function test1() {
function test(j) {
var s = 0;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
return s;
}
test(tries);
}
function test2() {
function test(j) {
try {
var s = 0;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
return s;
}
catch (ex) {}
}
test(tries);
}
function test3() {
function test(j) {
var s = 0;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
for (var i = 0; i < j; i++) s = i;
return s;
}
try {
test(tries);
}
catch (ex) {}
}
</script>
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
control - no try/catch |
|
pending… |
try/catch inside function |
|
pending… |
try/catch outside function |
|
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:
- Revision 1: published by Marco Rogers
- Revision 6: published
- Revision 7: published
- Revision 9: published
2 comments
I see almost the testcases when using try-catch outside the function end up with higher speed. Does this mean using try-catch could speedup my code? Unreasonable!
Flawed microbenchmark is flawed.