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