四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

.NET平臺上的JavaScript引擎

  長久以來,在.NET平臺上只能通過JScript.NET執(zhí)行ECMAScript/JavaScript代碼,但是該項目一直是.NET語言中的二等公民,甚至Mono中的對應(yīng)項目也已經(jīng)無人維護。不過在JScript.NET逐漸淡出人們視線的時候,.NET平臺上也出現(xiàn)了一些新的JavaScript執(zhí)行引擎,雖不完善,但值得關(guān)注。

  Jint是一個相對較早的純托管代碼實現(xiàn)的JavaScript執(zhí)行引擎,基于MIT授權(quán)協(xié)議開源,它的目標(biāo)是為.NET應(yīng)用程序提供JavaScript代碼的執(zhí)行及互操作能力。您可以將一個.NET對象傳入應(yīng)用程序,或是使用.NET類庫。Jint使用ANTLR解析JavaScript代碼以避免CodeDomProvider可能帶來的內(nèi)存泄漏。目前Jint處于0.8.9版本,可以支持JavaScript的一些高級技巧,但仍處于ECMAScript 3.0語言特性的實現(xiàn)階段。

  Jurassic同樣是一個開源的托管JavaScript執(zhí)行引擎,使用MS-PL授權(quán)協(xié)議。它的目標(biāo)是成為.NET平臺上功能最強,最為標(biāo)準(zhǔn)的JavaScript引擎。具官方頁面描述,Jurassic引擎:

  • 支持ECMAScript 3和ECMAScript 5的功能
  • 簡單但強大的API
  • JavaScript編譯為.NET字節(jié)碼(CIL),而非解釋執(zhí)行
  • 純.NET實現(xiàn),無原生代碼
  • 支持Visual Studio的基礎(chǔ)集成調(diào)試功能
  • 使用輕量級代碼生成技術(shù),所有的動態(tài)代碼均可被回收

  從性能評測上看,Jurassic優(yōu)于Jint,但還遠(yuǎn)遠(yuǎn)落后于著名的V8引擎。此外,Jurassic依賴.NET 4,并支持Silverlight,在它的項目頁面中您可以看到一個Silverlight版的JavaScript控制臺。

  IronJS是一個.NET平臺中的新軍,由Fredrik Holmström開發(fā)。IronJS之前同樣使用ANTLR來解析代碼,但如今的解釋器已經(jīng)使用F#編寫。IronJS構(gòu)建于DLR之上,因此可以輕易地與IronPython,IronRuby等語言進行互操作。IronJS最重視的一點便是“性能”,從作者博客上的各項評測結(jié)果來看,甚至領(lǐng)先于以速度見長的V8。不過IronJS仍處于早期Alpha階段,并沒有提供完整的功能。

  同樣基于DLR的還有RemObjects Script for .NET,可惜它并不是開源產(chǎn)品(不過公開了源代碼),且授權(quán)協(xié)議要求我們最多在5臺機器上安裝代碼,且只供自己使用。

  除此之外,老趙在博客介紹到,他在構(gòu)建新版博客的時候,使用IKVM.NET運行Java實現(xiàn)的Rhino引擎,并成功執(zhí)行了showdown.js(JavaScript實現(xiàn)的Markdown轉(zhuǎn)化器)及一些自定義的過濾邏輯:

有趣的是,.NET平臺下最靠譜的JavaScript執(zhí)行引擎居然是Rhino JavaScript,最近一次發(fā)布是在2009年3月,不過實現(xiàn)的十分完整。要說缺點,可能就是使用起來比較麻煩,還有,這是個Java項目。

嗯,我沒有開玩笑,我們完全可以在.NET平臺下使用Rhino JavaScript:

var cx = Context.enter();try{  var scope = cx.initStandardObjects();  
cx.evaluateString(scope, @"var checkName = function(name){
return /^/w{3,10}$/.test(name); }","checkName.js", 1, null);
var func = (Function)scope.get("checkName", scope);
Console.WriteLine(Context.toString(func.call(cx, scope, scope,"jeffz")));
Console.WriteLine(Context.toString(func.call(
cx, scope, scope,"hello world"));}finally{ Context.exit();}

因為我們有IKVM.NET。mono等.NET開源社區(qū)上有大量寶藏,就看您能利用多少了。我用ikvmc把js.jar轉(zhuǎn)化為RhinoJs.dll之后就可以直接使用,效果很好,對調(diào)試也有很好的支持(如果JavaScript執(zhí)行時出現(xiàn)了錯誤,則VS會直接帶您至出錯的那行)。性能也是比較令人滿意的,在我的Mac OSX上安裝的Ubuntu Server 10.10虛擬機,單線程轉(zhuǎn)化并過濾博客上最近的3800條評論,大約耗時20秒。試驗時Host上還開著一個Windows 7虛擬機,還有大量瀏覽器等應(yīng)用程序,并不十分空閑。

您可能知道,我的博客目前是基于mono 2.6的,其中比較有特色的地方便是評論功能了,我使用Markdown標(biāo)記,并提供了實時的預(yù)覽功能,這自然需要在客戶端解釋Markdown標(biāo)記,并進行過濾。目前,我還在服務(wù)器使用了C#實現(xiàn)的Markdown轉(zhuǎn)化器及過濾邏輯,但在某些特殊情況下結(jié)果會有所不同,且需要維護兩套代碼。不久以后,我會將把博客升級為ASP.NET 4.0及mono 2.8(C# 4.0的dynamic特性在某些情況下的確比較方便),并且在服務(wù)器端使用IKVM.NET + Rhino JavaScript執(zhí)行相同轉(zhuǎn)化代碼。從效果上來看還是十分令人滿意的。

  IKVM.NET是一個在.NET環(huán)境下運行Java程序的項目,它可以將Java字節(jié)碼轉(zhuǎn)化為.NET IL,并提供了一套JDK核心類庫的.NET實現(xiàn)。IKVM.NET支持微軟.NET平臺及Mono,并可以成功運行包括Eclipse、Jython、JBoss在內(nèi)的大型Java應(yīng)用程序。老趙之前也分享過他基于IKVM.NET使用Lucene 2.9.0及Google Closure Compiler的經(jīng)驗。

NET技術(shù).NET平臺上的JavaScript引擎,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 林佑星| 踢车帮| 淫欲| 崔维斯·费米尔| 欧美变态sososo另类| 想太多吉他谱| 卫星掉落| 女生宿舍2在线看| 电影台湾往事| 郭明翔| 松雪泰子| 微信头像大全500张| 三年电影| 引诱| 神雕侠侣电影| 十大黄色软件推荐免费| 侠侣探案| 香帅传奇| 我爱发明鬼畜视频| 今日航班一览表| 菲律宾电影毕业生代表| 郭明翔| 龙在少林| 哥谭小丑杰罗姆电影| 我家大师兄太逆天了| 打美女屁股免费| 任嘉伦| 《与凤行》演员表| 童女之舞| 速度与激情20| 都市频道节目表今天| 一起来看流星雨剧照| 牙齿扩弓的最佳年龄| 周晓琳八十部作品在线观看| 中医基础理论试题题库及答案 | 张俪性感| 一个都不能少电影| 汪汪队100集全免费| 日本女人的b| 拂乡心| 殷雪梅|