edge.js
https://github.com/tjanczuk/edge
运行的时候会报 System.DllnotfoundException 无法加载node.dll,要把\packages\Edge.js.4.0.0\content\下edge目录复制到运行环境下。 nuget自己不会复制这个目录。
看了下source code,src\double\dotnet\EdgeJs.cs 实现这个。
开发环境下运行可以,但是到客户环境运行确报错,
Error: The specified module could not be found.
用depends工具看了下edge.node (在edge\x64 & x86 下) 需要 msvcp120.dll,msvcr120.dll
复制了后发现报
Error: %1 is not a valid Win32 application.
查了半天,发现开发机里的 %windir%\system32下的 msvcp120.dll,msvcr120.dll 也是64位的,orz,上面一错误就是32位下运行64位程序的通用错。
还好它源代码里lib\native\win32下带了这两个dll ,ia32目录下是32位,x64下64位。
-------------------------------------------------------
edge文档里写的需要 .net 4.5,其实edge 4.0.0是用.net 4.0运行的,手上老项目还是.net 4.0一时不能升级,不能用async await 关键字。改成.net调用task的方法
using System; using System.Diagnostics; using System.Threading.Tasks; using EdgeJs; class Program { static void Main(string[] args) { var func = Edge.Func(@" return function (data, callback) { var date1 = new Date(); for(var i = 0;i<100;i++) { var diff = date1-data; } callback(null, 'Node.js welcomes ' + diff); } "); Stopwatch s = Stopwatch.StartNew(); for(int i = 0;i<300000;i++) { var task = func(new DateTime(2015,1,1).AddDays(1)); var a = task.Result; //Console.WriteLine(a); } s.Stop(); Console.WriteLine(s.Elapsed.TotalSeconds); Console.ReadLine(); } }
测了一下速度 300000 * 100 次date类型减法 , 16s~18s
似乎比ClearScript快, jint更加没法比。
------------------------------------------------------
edge和jint里, .net的DateTime到javascript变成 js的Date
ClearScript和jurassic 确还是clr的DateTime
jint里list和array也变成js array
edge还没测
----------------------------------------------------------
不用装node.js也可以用,可能用node自己模块会要装node.js