edge.js

https://github.com/tjanczuk/edge

运行的时候会报 System.DllnotfoundException 无法加载node.dll,要把packagesEdge.js.4.0.0content下edge目录复制到运行环境下。 nuget自己不会复制这个目录。

看了下source code,srcdoubledotnetEdgeJs.cs 实现这个。

开发环境下运行可以,但是到客户环境运行确报错, 

Error: The specified module could not be found.

用depends工具看了下edge.node (在edgex64 & x86 下) 需要 msvcp120.dll,msvcr120.dll

复制了后发现报

Error: %1 is not a valid Win32 application.

查了半天,发现开发机里的 %windir%system32下的 msvcp120.dll,msvcr120.dll 也是64位的,orz,上面一错误就是32位下运行64位程序的通用错。

还好它源代码里lib ativewin32下带了这两个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

原文地址:https://www.cnblogs.com/peteryu007/p/5334141.html