I've compared the performance of Saltarelle-compiler vs. another C# to JavaScript compiler: JSIL by Kevin Gadd.
Differently from Saltarelle, JSIL operates at intermediate language (IL) level. After the C# program is compiled by Visual Studio, JSIL examines the MSIL instruction code contained in the DLL files and translates them into JavaScript.
This allows a greater compatibility and portability of .NET applications, but probably introduces an unnecessary layer of abstraction between the original C# code and the JavaScript output.
This is shown by the following test.
I've converted the Raytracer Demo featured on the JSIL website to the Saltarelle compiler, with the aim to compare the execution speed of the two versions.
Adapting the code to Saltarelle was easy but not straightforward. Saltarelle was missing some needed System
classes that I had to re-implement, namely Bitmap
, Color
, StopWatch
, Console
and Random
. I tried to keep them as similar as possible to the JSIL version so to not affect the result of the test. I also had to write the import code for mersenne.js, a small library the demo uses for generating random numbers (probably because javascript's Math.random()
lacks the random seed feature).
Result of the Test
I ran the test on a four core Athlon AMD processor with Windows 7 and Chrome browser. The result is summarized in the table:
| Saltarelle | JSIL |
Script code size (.js) | 108 KB | 15 MB |
Average time/pixel | 0.006 ms | 0.093 ms |
So, on average, Saltarelle is 15 times faster than JSIL. Impressive!
The output script code is also very small-sized with no loading time, while the JSIL version has to download 15 MB of stuff before it can start.
Check By Yourself
You can run the above test in your browser:
You can also download the Visual Studio solution used to build the Saltarelle version.