edge.js

时间:2023-03-09 03:56:38
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 = ;i<;i++)
{ var task = func(new DateTime(,,).AddDays());
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