Skip to content

Instantly share code, notes, and snippets.

@asmagin
Last active October 22, 2016 17:22
Show Gist options
  • Save asmagin/61828052d8da96bc0e4497e83e96299f to your computer and use it in GitHub Desktop.
Save asmagin/61828052d8da96bc0e4497e83e96299f to your computer and use it in GitHub Desktop.
Js Engine Performance Tests
public class Engine : IDisposable
{
private IJsPool pool;
private string initJs;
public Engine()
{
//JsEngineSwitcher.Instance.EngineFactories.AddMsie(new MsieSettings() { EngineMode = JsEngineMode.Auto });
//JsEngineSwitcher.Instance.DefaultEngineName = MsieJsEngine.EngineName;
//JsEngineSwitcher.Instance.EngineFactories.AddV8();
//JsEngineSwitcher.Instance.DefaultEngineName = V8JsEngine.EngineName;
//JsEngineSwitcher.Instance.EngineFactories.AddJint(new JintSettings() { });
//JsEngineSwitcher.Instance.DefaultEngineName = JintJsEngine.EngineName;
//JsEngineSwitcher.Instance.EngineFactories.AddJurassic();
//JsEngineSwitcher.Instance.DefaultEngineName = JurassicJsEngine.EngineName;
//JsEngineSwitcher.Instance.EngineFactories.AddChakraCore();
//JsEngineSwitcher.Instance.DefaultEngineName = ChakraCoreJsEngine.EngineName;
JsEngineSwitcher.Instance.EngineFactories.AddVroom();
JsEngineSwitcher.Instance.DefaultEngineName = VroomJsEngine.EngineName;
initJs = ReadInitFile(@"..\Resources\common.js");
var config = new JsPoolConfig()
{
Initializer = initEngine =>
{
initEngine.Execute(initJs);
}
};
pool = new JsPool(config);
}
public string Execute(string command)
{
var result = string.Empty;
var engine = pool.GetEngine();
try
{
result = engine.Evaluate<string>(command);
}
finally
{
pool.ReturnEngineToPool(engine);
}
return result;
}
protected string ReadInitFile(string path)
{
// This text is added only once to the file.
if (File.Exists(path))
{
// Create a file to write to.
return File.ReadAllText(path);
}
return null;
}
public void Dispose()
{
pool.Dispose();
}
}
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Test #\t\tInit time, s\t\tExec time, s");
for (var j = 0; j < 100; j++)
{
var start = DateTime.Now;
using (var engine = new Engine())
{
var inittime = (DateTime.Now - start).TotalSeconds;
var command = @"common__ext.header.renderToString({})";
start = DateTime.Now;
for (var i = 0; i < 1000; i++)
{
var result = engine.Execute(command);
// System.Console.WriteLine(i);
}
var time = (DateTime.Now - start).TotalSeconds;
System.Console.WriteLine("{j}\t\t{inittime}\t\t{time}");
}
}
System.Console.ReadLine();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment