利用Noesis.Javascript开源组件可以做到在.net中执行js脚本,同时js脚本也能调用C#函数。这个组件的获得方式:在NuGet中输入搜索"Noesis"就能找到。

我们来做个搜索功能:用户能够在textbox中输入js脚本来筛选list记录,界面如下:

然后,click filter button后的UI:

看,筛选出来了,代码如下(js能调C#写的UserInfo类的各个属性)

public class UserInfo{public string FirstName { get; set; }public string LastName { get; set; }public int Age { get; set; }public override string ToString(){return string.Format("{0}, {1}: {2}", FirstName, LastName, Age);}}private void btnSearch_Click(object sender, EventArgs e){List<UserInfo> users = FilterUsers(txtFilter.Text.Trim());lstUsers.DataSource = users;}private List<UserInfo> FilterUsers(string jsFilter){List<UserInfo> results = new List<UserInfo>();if (jsFilter.Trim().Length == 0)return this.users;try{using (JavascriptContext context = new JavascriptContext()){foreach (UserInfo user in this.users){context.SetParameter("user", user);context.SetParameter("isInclude", false);string js = string.Format(@"if({0})isInclude=true;elseisInclude=false;", jsFilter);context.Run(js);bool isInclude = (bool)context.GetParameter("isInclude");if (isInclude)results.Add(user);}}}catch{txtFilter.Focus();txtFilter.SelectAll();return this.users;}return results;}

我们来看看效率:

private void btnTest_Click(object sender, EventArgs e){using (JavascriptContext context = new JavascriptContext()){Stopwatch sw = new Stopwatch();sw.Start();int i=1000000;while(i-- > 0){context.SetParameter("ii", 1);context.SetParameter("jj", 2);context.SetParameter("sum", 0);string js = string.Format(@"sum=ii+jj;");context.Run(js);int sum = (int)context.GetParameter("sum");}sw.Stop();long useJS_Total = sw.ElapsedMilliseconds;float useJS_Average = ((float)sw.ElapsedMilliseconds) / 1000000;sw.Reset();sw.Start();i = 1000000;while (i-- > 0){int ii = 1;int jj = 2;int sum = 0;sum = ii + jj;}sw.Stop();long nouseJS_Total = sw.ElapsedMilliseconds;float nouseJS_Average = ((float)sw.ElapsedMilliseconds) / 1000000;string msg = "";msg += string.Format("useJS_Total: {0}\r\n", useJS_Total);msg += string.Format("useJS_Average: {0}\r\n\r\n\r\n", useJS_Average);msg += string.Format("nouseJS_Total: {0}\r\n", nouseJS_Total);msg += string.Format("nouseJS_Average: {0}\r\n\r\n\r\n", nouseJS_Average);MessageBox.Show(msg);}}

结果(上面的是通过js引擎计算的时间、下面的是纯C#计算时间,悲剧啊):

结论:

  1. 这个Noesis.Javascript只适用于性能要求不高的场合
  2. 高性能的要看Lua

在.Net中执行js相关推荐

  1. selenium webdriver中执行js(java)

    在代码中import org.openqa.selenium.JavascriptExecutor;就可以使用executeScript.executeAsyncScript这两个方法了 execut ...

  2. python执行js文件报错_使用PyV8在Python爬虫中执行js代码

    前言 可能很多人会觉得这是一个奇葩的需求,爬虫去好好的爬数据不就行了,解析js干嘛?吃饱了撑的? 搜索一下互联网上关于这个问题还真不少,但是大多数童鞋是因为自己的js基础太烂,要么是HTML基础烂,要 ...

  3. Selenium——python中执行js脚本

    import selenium from selenium import webdriver from selenium.webdriver.common.by import By from time ...

  4. 如何在浏览器中执行js脚本

    方式1:F12打开调试工具,利用控制台运行JS脚本 方式2: Chrome snippets 小脚本 我们也可以在 Chrome 浏览器中创建一个脚本来执行,在开发者工具中点击 Sources 面板, ...

  5. 关于java代码中执行js脚本

    应用场景:java语言是静态语言,执行时需要预编译.所以在一些需求变换比较频繁的时候使用起来就不是特别方便了.并且本人在用数据库的存储过程的时候也遇到了每个客户的需求不一致,导致需要频繁的修改存储过程 ...

  6. java中执行js代码

    //#1.用scriptEngineManger     ScriptEngineManager engine=new ScriptEngineManager();     //#2.获取script ...

  7. vue在html中执行js代码,Vue.js 和 Vue.runtime.js

    Vue官方中文文档: Vue有两个版本: 完整版:vue.js.vue.min.js(运行时版+编译器)(编译器:将模板字符串编译成为JS渲染函数的代码) 运行时版:vue.runtime.js.vu ...

  8. java 执行html里的js_如何用java执行指定页面中的js代码

    展开全部 要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,e69da5e6ba9062616964757a686964616f31333366303133否 ...

  9. js如何运行python代码_python中执行javascript代码

    python中执行javascript代码: 1.安装相应的库,我使用的是PyV8 2.import PyV8 ctxt = PyV8.JSContext() ctxt.enter() func = ...

最新文章

  1. 使用registerForActivityResult替代onActivityResult
  2. Python:一行代码将以e为结尾的科学计算法类型的数值转为小数点类型数值
  3. inner join 和 exists 效率_一阵骚操作,我把SQL执行效率提高了10000000倍!
  4. 第一行代码(第二版)全书代码下载
  5. 赛我 v.s Fzone v.s 喔赛 用户体验对比分析
  6. 使用Maven的jaxws-maven-plugin插件,将wsdl生成java
  7. python如何另存文件_脚本将.py保存到文件中的另一个目录
  8. OpenCV学习(7.10)
  9. ~~一般哈希(数据结构)(附模板题AcWing 840 模拟散列表)
  10. 女朋友跟你说晚安之后仍然在线,我用Python制作脚本成功征服
  11. 程序员最深情的告白——《致对象》
  12. java正则表达式大全(常用)
  13. 手机扫描识别车牌,车牌识别
  14. 使用nuvoton976DK61Y BSP运行自己的demon
  15. Python爬虫之网易云音乐数据爬取(十五)
  16. 2020年最全最好用的在线文档盘点,建议收藏
  17. 2019年BET公司面试题目大汇总
  18. 【Win11共享打印机,win11家庭版中添加组策略】
  19. PS 滤镜——素描算法(一)
  20. newuoa matlab包,PDFO首页、文档和下载 - Powell 无导数优化求解器

热门文章

  1. 关于Angular样式封装
  2. Android 插件化 动态升级
  3. 学渣的逆袭(各种暴力~)
  4. 解决Jquery Kendo.xxx is not a function 的方法
  5. 判断目录下的文件是否为图片
  6. 对“流形”最好的讲解在维基
  7. Kettle工具使用及总结
  8. 深度学习推荐模型-WideDeep
  9. 大数据分析平台有哪些主要功能
  10. 运营商大数据的市场价值有哪些