leftmost-with-continuation

JavaScript performance comparison

Revision 3 of this test case created by Muzietto

Info

Seasoned Schemer in JS - This test compares the two versions of leftmost given in chapter 14 plus one containing plain try-catch blocks. The first version of leftmost is given at page 65. The second version (page 78) is optimized through the use of call/cc (see http://matt.might.net/articles/by-example-continuation-passing-style/), in order to jump immediately out of cdr recursion whenever an atom is found (that's the leftmost!). It should be faster, but in fact this is not the case; why?. The third version uses try-catch blocks to do the same as the second version. Let's see if it will be faster...

Preparation code

<script src="https://raw.github.com/Muzietto/geieslists/master/geieslists_1.0.js"></script>
<script src="https://raw.github.com/Muzietto/littleFunkyJavascripter/master/littleFunkyJavascripter_1.0.js"></script>
<script src="https://raw.github.com/Muzietto/seasonedFunkyJavascripter/master/seasonedFunkyJavascripter_0.1.js"></script>
 

Preparation code output

Test runner

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

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
leftmost NOT optimized
// async test
(function () {
                var input = ArrayToList([[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],1],[[],[1,2]],2,3,2])
    var leftmost = leftmostFirstVersion(input );
    deferred.resolve();
}()
)
pending…
leftmost call/cc
// async test
(function () {
                var input = ArrayToList([[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],1],[[],[1,2]],2,3,2])
    var leftmost = leftmostCc(input );
    deferred.resolve();
}()
)
pending…
leftmost try-catch
(function () {
                var input = ArrayToList([[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],[[],[],[],[],[]],[[],[]],[]],[[],1],[[],[1,2]],2,3,2])
    var leftmost = leftmostTryCatch(input );
    deferred.resolve();
}()
)
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