利用noesis.Javascript开源组件.Net中执行javascript脚本
界面如下:
然后,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;
else
isInclude=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#计算时间,悲剧啊):这个Noesis.Javascript只适用于性能要求不高的场合
您可能感兴趣的文章:
- 详解Chart.js轻量级图表库的使用经验
- 常用的9个JavaScript图表库详解
- 使用Chart.js图表库制作漂亮的响应式表单
- JavaScript可视化图表库D3.js API中文参考
- javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
- Node.js开源应用框架HapiJS介绍
- 开源的javascript项目Kissy介绍
- Java中使用开源库JSoup解析HTML文件实例
- jQuery EasyUI 开源插件套装 完全替代ExtJS
- 优秀js开源框架-jQuery使用手册(1)
- 一个加密JavaScript的开源工具PACKER2.0.2
- 4个顶级开源JavaScript图表库
- 利用noesis.Javascript开源组件.Net中执行javascript脚本
- 绝对酷,如何解决asp.net中javascript脚本的问题(使用服务器控件执行客户端脚本)
- 关于asp.net中javascript等脚本不能执行的原因.
- 调试客户端脚本 利用VS.Net 中的调试器来调试JavaScript
- .net .cs文件中执行javascript脚本
- 绝对酷,如何解决asp.net中javascript脚本的问题(使用服务器控件执行客户端脚本)
- NET定时任务执行管理器开源组件–FluentScheduler
- Winform下利用WebBrowser执行Javascript脚本
- VB.NET 利用ScriptManager执行客户端脚本方法
- 开源.NET(C#、VB.NET、J#等)脚本执行引擎(利用CodeDOM)
- ASP.NET CS文件中输出JavaScript脚本的3种方法以及区别
- 利用perl脚本执行拒绝攻击的代码
- Javascript脚本和asp.net验证控件同时验证的代码
- php利用sudo权限执行shell脚本
- 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- 利用angular指令监听ng-repeat渲染完成后执行脚本
- 开源.NET FTP组件edtFTPnet 用法
- .net下执行SQL文件脚本