利用noesis.Javascript開(kāi)源組件.Net中執(zhí)行javascript腳本
界面如下:
然后,click filter button后的UI:
看,篩選出來(lái)了,代碼如下(js能調(diào)C#寫的UserInfo類的各個(gè)屬性)
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;
}
我們來(lái)看看效率:
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);
}
}
結(jié)果(上面的是通過(guò)js引擎計(jì)算的時(shí)間、下面的是純C#計(jì)算時(shí)間,悲劇啊):這個(gè)Noesis.Javascript只適用于性能要求不高的場(chǎng)合
- 詳解Chart.js輕量級(jí)圖表庫(kù)的使用經(jīng)驗(yàn)
- 常用的9個(gè)JavaScript圖表庫(kù)詳解
- 使用Chart.js圖表庫(kù)制作漂亮的響應(yīng)式表單
- JavaScript可視化圖表庫(kù)D3.js API中文參考
- javaScript矢量圖表庫(kù)-gRaphael幾行代碼實(shí)現(xiàn)精美的條形圖/餅圖/點(diǎn)圖/曲線圖
- Node.js開(kāi)源應(yīng)用框架HapiJS介紹
- 開(kāi)源的javascript項(xiàng)目Kissy介紹
- Java中使用開(kāi)源庫(kù)JSoup解析HTML文件實(shí)例
- jQuery EasyUI 開(kāi)源插件套裝 完全替代ExtJS
- 優(yōu)秀js開(kāi)源框架-jQuery使用手冊(cè)(1)
- 一個(gè)加密JavaScript的開(kāi)源工具PACKER2.0.2
- 4個(gè)頂級(jí)開(kāi)源JavaScript圖表庫(kù)
相關(guān)文章
Javascript調(diào)用Webservice的多種方法
通過(guò)xmlhttp+webservice(原始方法)2009-02-02asp.net性能優(yōu)化之使用Redis緩存(入門)
本文主要介紹了asp.net性能優(yōu)化之使用Redis緩存的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-03-03asp.net利用HttpModule實(shí)現(xiàn)防sql注入
關(guān)于sql注入,已經(jīng)被很多人討論過(guò)了。這篇沒(méi)有新意功能也不夠通用,nnd,不想引起口水,就是覺(jué)得簡(jiǎn)單而且思路有參考性才貼出來(lái)。2009-12-12ASP.NET MVC使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)碼
這篇文章介紹了ASP.NET MVC使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09.NET 刷新頁(yè)面防止表單二次提交的實(shí)現(xiàn)方法
頁(yè)面上按鈕是服務(wù)器控件,現(xiàn)在刷新頁(yè)面要防止按鈕事件重復(fù)執(zhí)行。這篇文章給大家?guī)?lái)了.net刷新頁(yè)面防止表單二次提交的實(shí)現(xiàn)方法,非常不錯(cuò),感興趣的朋友一起看看吧2016-09-09一個(gè)ASP.NET的MYSQL的數(shù)據(jù)庫(kù)操作類自己封裝的
這篇文章主要介紹了一個(gè)ASP.NET的MYSQL的數(shù)據(jù)庫(kù)操作類自己封裝的,在數(shù)據(jù)庫(kù)操作類中的連接字符串中記得加上charset=utf8 需要的朋友可以參考下2014-08-08在asp.net中實(shí)現(xiàn)datagrid checkbox 全選的方法
在asp.net中實(shí)現(xiàn)datagrid checkbox 全選的方法...2006-12-12asp.net使用DataTable構(gòu)造Json字符串的方法
這篇文章主要介紹了asp.net使用DataTable構(gòu)造Json字符串的方法,涉及asp.net字符串序列化、遍歷及構(gòu)造等操作技巧,需要的朋友可以參考下2015-12-12