测试了几款 C# 脚本引擎 , Jint , Jurassic , Nlua, ClearScript

测试类

    public class Script_Common
    {
        public string read(string filename)
        {
            return System.IO.File.ReadAllText(filename);
        }
        public void log(object obj)
        {
            Console.WriteLine(obj.GetType() + " - " + obj);
        }
        public void demo(params object[] items)
        {
            log(string.Join(" - ", items));
        }
        public void demo2(string def = "ddddddddddd")
        {
            log(def);
        }
        public void demo3(string val)
        {
            log(val);
        }
        public void demo3(int val)
        {
            log(val);
        }
        public Regex Regex(string pattern)
        {
            return new Regex(pattern);
        }
        public Match Match(string input,  string pattern)
        {
            return System.Text.RegularExpressions.Regex.Match(input, pattern);
        }

        System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
        public void time1()
        {
            log("计时开始 :");
            stopwatch.Restart();
        }
        public void time2()
        {
            stopwatch.Stop();
            log("记时结束 : " + stopwatch.ElapsedMilliseconds + " 毫秒");
        }
    }

测试脚本

t.time1();                              //计时开始
htm = t.read(‘d:/nn2log.txt‘)

for( var i = 0 ; i < 10000; i++)
{
    var r = new RegExp(‘[a-z]+‘);
    htm += r.exec(htm).length
}

t.time2();                              //计时结束
t.log(htm.length)

t.demo(11,22,33,44,55)       //测试是否支持 params
t.demo2()                             //测试是否支持 默认参数
t.demo2(‘ddddddddddddd‘)

t.demo3(111)                        //测试是否支持 多方法      这个很重要,JS 调用 C#方法的时候,C# 的很多方法都是多方法定义的..如果不支持 可能 不能调用成功.t.demo3(‘dddddddd‘)

 

脚本测试结果

Jint   支持 params   , 不支持默认参数,  不支持多方法,

Jurassic   支持 params   , 不支持默认参数,  支持多方法,

Nlua        支持 params   , 支持默认参数,  支持多方法,

ClearScript        支持 params   , 支持默认参数,  支持多方法,

ClearScript        是使用 "JScriptEngine" 方式测试的, 没有使用V8引擎, mono 上好像使用不了,就没有测试呢.

性能方面, 大概的是

Nlua  or  Jurassic    >   ClearScript  or   Jint

大概只测试几个 字符串操作 和 正则表达式方面的循环操作,测试不算全面.

ClearScript 在使用JS的 RegExp 的时候性能是最好的,  ,但是加了一句 C#的 var rr = t.Regex( ‘[a-z]+ ‘)  后性能就很不好,不知道为啥.

项目维护方面.

Nlua  or  ClearScript  or  Jint   >  Jurassic

Nlua  or  ClearScript  or  Jint   这3个一直都在更新维护

Jurassic  有2年都没有更新了, 但是测试后感觉还是很不错,  兼容性+ , 性能 也还行,

兼容性方面

Nlua or  jint or  Jurassic    > ClearScript

Nlua  需要调用2-3个DLL, 多平台支持..IOS,LINUX ,windows

Jint     Jurassic     都是一个DLL,使用纯C#写的, 兼容性应该还行, Linux 上面没有测试过, 不过看了 Mono 的文档,应该是支持的.

ClearScript   使用JScript  模式只有一个DLL就够了,但是好像调用了系统接口, 跨平台不知道怎么样,   V8模式 需要调用 2-5个DLL, 而且V8引擎是用VS2013编写的.还需要安装VC运行库...感觉引擎还是用C#写比较好,异常捕获呀那些的都方便一些.

http://www.okbt.net/ 磁力搜索引擎,使用C# + Python 开发. Aspx运行在 Linux上面.

时间: 2024-10-23 15:13:06

测试了几款 C# 脚本引擎 , Jint , Jurassic , Nlua, ClearScript的相关文章

推荐13款javascript模板引擎

javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用! 2. EasyTemplate 在使用过Freemarker模 板后,感觉它的 语法比较朴实,平易近人,容易上手,于是决定按它的语法风格实现一个前端的 模板引擎,这就有了

c# 动态执行脚本,相关的几个脚本引擎.

Jint   嵌入式的javascript脚本支持引擎,一直都在更新,对各种方法支持也比较好,可以 C# 交互. https://github.com/sebastienros/jint Jurassic 嵌入式的javascript脚本支持引擎,很久都没有更新了,和 jint很类似,稳定性还可以,可以 C# 交互. http://jurassic.codeplex.com/ IronPython 嵌入式的Python脚本引擎,支持各种python包,我用IronPython 实现过部分的 DH

无法找到脚本*.VBS的脚本引擎解决办法

当你在运行一些基于VBS脚本语言的文件时,系统可能报错.这时候可能是你的VBS脚本服务在注册表中出错了,原因可能是卸载或安装一些代码不规范的程序引起的.这里给出无法找到脚本引擎"vbscript"的解决方法: 把以下代码复制另存为<vbs关联修复.reg>,双击运行即可. 原因是vbs文件没有正常关联,要建立关联,主要有三个地方要修改. Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.vbs]@="

Java8 新JavaScript脚本引擎Nashorn小试

一个对Nashorn脚本引擎很详细地介绍: http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/ 下面是我测试的小例子,模拟在游戏中伤害计算脚本化: ScriptTest.java: package com.zl1030.ScriptTest; import java.io.FileReader; import javax.script.Invocable; import javax.script.ScriptEngine; i

java 脚本引擎Rhino执行js代码和文件

测试js脚本引擎 public class helloworld { public static void main(String[] args) throws Exception { //获得脚本引擎对象 ScriptEngineManager sem=new ScriptEngineManager(); ScriptEngine engine=sem.getEngineByName("javascript"); //定义变量,会存储到引擎上下文种,java和js都能取到 engin

Nmap脚本引擎NSE

Nmap网络安全审计(六) Nmap脚本引擎NSE NSE中的脚本采用Lua语言编写.NSE设计出来是为了提供Nmap的灵活性,式版的NSE包含14个大类的脚本,总数达500多个,这些脚本的功能包括对各种网络口令强度的审计,对各种服务器安全性配置的审计,对各种服务器漏洞的审计等. NSE脚本的运行 我们使用NSE脚本测试一台主机,我们来看一下这条指令使用的参数,-O进行操作系统检测,-sV对目标系统的服务进行检测,这里我们没有使用脚本的参数所有使用的是默认脚本,默认脚本会使用-sC参数.默认脚本

Android 8款开源游戏引擎

1.Angle  (2D    Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发.该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程. 最低运行环境要求不详. 项目地址:http://code.google.com/p/angle/ 2.Rokon  (2D    Java) rokon是一款Android 2D游戏引擎,基于OpenGL ES技术开

Nmap脚本引擎原理

Nmap脚本引擎原理 一.NSE介绍 虽然Nmap内嵌的服务于版本探测已足够强大,但是在某些情况下我们需要多伦次的交互才能够探测到服务器的信息,这时候就需要自己编写NSE插件实现这个功能.NSE插件能够完成网络发现.复杂版本探测.脆弱性探测.简单漏洞利用等功能. 转载请注明出处:http://www.cnblogs.com/liun1994/ 在文章   "Nmap脚本文件分析(AMQP协议为例)"   中会将版本探测,NSE脚本原理联系起来,具体分析Nmap探测的执行过程. 在文章 

nmap 使用脚本引擎进行扫描

1.下载nmap(nmap官网). 2.安装nmap. 3.编辑环境变量(windows下所需),保存. 4.成功在cmd下输入nmap会显示Usage. 5.使用脚本引擎(若缺少脚本,可以到nsedoc下载相应脚本): (1)扫描web敏感目录: nmap -p 80 --script=http-enum.nse www.text.com (2)使用所有的脚本进行扫描: nmap -p 80 --script all www.test.com (3)使用通配符扫描: nmap -p 80 --