Thursday, June 23, 2011

JavaScript run-times performance on Windows V1

I was looking for a JavaScript run time that I could embed in my C# applications. I have done that in the past with IronPython. I tried different implementations written in C# and then I decided to try all executables on my Windows XP machine that could run JavaScript from a command prompt.



All tests were executed on my Windows XP Dell Inspiron 6400.

The source code:

function Fibonnaci(n){
    var
        previous = -1,
        result   =  1,
        sum;

    for(var i=0; i < n+1; i++){

        sum      = result + previous;
        previous = result;
        result   = sum;
    }
    return result;
}

var expectedValues = [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074, 32951280099, 53316291173, 86267571272, 139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920, 2504730781961, 4052739537881, 6557470319842, 10610209857723, 17167680177565, 27777890035288, 44945570212853, 72723460248141, 117669030460994, 190392490709135, 308061521170129, 498454011879264, 806515533049393, 1304969544928657, 2111485077978050, 3416454622906707, 5527939700884757, 8944394323791464, 14472334024676220, 23416728348467684, 37889062373143900, 61305790721611580, 99194853094755490, 160500643816367070, 259695496911122560, 420196140727489660, 679891637638612200, 1100087778366101900, 1779979416004714000, 2880067194370816000, 4660046610375530000, 7540113804746346000, 12200160415121877000, 19740274219868226000, 31940434634990100000, 51680708854858330000, 83621143489848430000, 135301852344706760000, 218922995834555200000];

print('Running...');
var startTime = new Date().getTime();

for (var t = 0; t < 10000; t++) {

    for (var i = 0; i < 100; i++) {

        var v = Fibonnaci(i);
        if(v !== expectedValues[i])
            throw new Error('Unexpected value ');
    }
}
var endTime = new Date().getTime();
var time    = (endTime - startTime)/1000;
print('Duration:' + time);


JavaScript Runtimes
  • nodeJs 0.2.6 - JavaScript Runtime:V8
    • Duration:0.4 s
  • Noesis.Javascript 0.4 - JavaScript Runtime V8 for .NET  Release mode x86 .NET 4.0
    • Duration:0.4 s
  • PhantomJs v1.1.0 - JavaScript Runtime:JavaScriptCore (with JIT compiler).
    • Duration:0.5 s
  • Jurassic v2.1 - JavaScript Runtime:.NET Implementation
    • Duration:8.9 s Release mode x86 .NET 3.5
    • Duration:7.7 s In the silverlight application from http://jurassic.codeplex.com
  • IronJS v0.2 - JavaScript Runtime:.NET Implementation - Release mode x86 .NET 4.0
    • Duration:8.5 s
  • JSDB - 10.6.21.0 - JavaScript Runtime:Mozilla SpiderMonkey
    • Duration:10.8
  • Microsoft JScript
    • Duration:13.3 s
  • Jint - JavaScript Runtime:.NET Implementation Release mode x86 .NET .NET 3.5
    • Duration:255.3 s


Embeding a JavaScript run-time in a C# application

Here we have 4 choices, Jint does not use the DLR and you can tell. IronJS and Jurassic are very close.
 I had some bizarre issues with compiling my IronJS solution (I had each time to rebuild my solution to see my changes). Anyway it is difficult to beat Noesis.Javascript which use V8.

There is another solution Microsoft JScript.NET, the JScript that came with .NET and that nobody is using. I will have to try.







1 comment:

  1. I have no words for this great post such a awe-some information i got gathered. Thanks to Author.
    Vee Eee Technologies| Vee Eee Technologies|

    ReplyDelete