Program.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Net;
  5. using Jint.Runtime;
  6. namespace Jint.Benchmark
  7. {
  8. class Program
  9. {
  10. private const string simple = @"
  11. var o = {};
  12. o.Foo = 'bar';
  13. o.Baz = 42;
  14. o.Blah = o.Foo + o.Baz;
  15. function fib(n){
  16. if(n<2) {
  17. return n;
  18. }
  19. return fib(n-1) + fib(n-2);
  20. }
  21. fib(3);
  22. ";
  23. private static readonly string[] Sunspider = new string[]
  24. {
  25. "https://gist.github.com/sebastienros/6274930/raw/bf0ab41e788eb9b978a29180f5cb4d614bc00dc5/gistfile1.js"
  26. };
  27. static void Main(string[] args)
  28. {
  29. bool runIronJs = true;
  30. bool runJint = true;
  31. bool runJurassic = true;
  32. const int iterations = 1;
  33. const bool reuseEngine = false;
  34. var watch = new Stopwatch();
  35. foreach (var url in Sunspider)
  36. {
  37. var script = new WebClient().DownloadString(url);
  38. // warming up engines
  39. Jurassic.ScriptEngine jurassic;
  40. if (runJurassic)
  41. {
  42. jurassic = new Jurassic.ScriptEngine();
  43. jurassic.Execute(script);
  44. }
  45. Jint.Engine jint;
  46. if (runJint)
  47. {
  48. jint = new Jint.Engine();
  49. jint.Execute(script);
  50. }
  51. IronJS.Hosting.CSharp.Context ironjs;
  52. if (runIronJs)
  53. {
  54. ironjs = new IronJS.Hosting.CSharp.Context();
  55. ironjs.Execute(script);
  56. }
  57. if (runIronJs)
  58. {
  59. watch.Restart();
  60. for (var i = 0; i < iterations; i++)
  61. {
  62. if (!reuseEngine)
  63. {
  64. ironjs = new IronJS.Hosting.CSharp.Context();
  65. }
  66. ironjs.Execute(script);
  67. }
  68. Console.WriteLine("{2} | IronJs: {0} iterations in {1} ms", iterations, watch.ElapsedMilliseconds,
  69. Path.GetFileName(url));
  70. }
  71. if (runJint)
  72. {
  73. watch.Restart();
  74. for (var i = 0; i < iterations; i++)
  75. {
  76. if (!reuseEngine)
  77. {
  78. jint = new Jint.Engine();
  79. }
  80. jint.Execute(script);
  81. }
  82. Console.WriteLine("{2} | Jint: {0} iterations in {1} ms", iterations, watch.ElapsedMilliseconds, Path.GetFileName(url));
  83. }
  84. if (runJurassic)
  85. {
  86. watch.Restart();
  87. for (var i = 0; i < iterations; i++)
  88. {
  89. if (!reuseEngine)
  90. {
  91. jurassic = new Jurassic.ScriptEngine();
  92. }
  93. jurassic.Execute(script);
  94. }
  95. Console.WriteLine("{2} | Jurassic: {0} iterations in {1} ms", iterations, watch.ElapsedMilliseconds,
  96. Path.GetFileName(url));
  97. }
  98. }
  99. }
  100. }
  101. }