2013年8月18日星期日

In. Net execute js

 

use Noesis.Javascript open source components can be done in. net js script execution , while js script can also call C # function . This component is obtained by: in NuGet enter a search "Noesis" to find.

 

us to be a search function : Users can enter in textbox to filter the list js script recording , the interface is as follows :

 

 

Then , click filter button after UI:

 

 

look, screened out, the following code (js can call C # to write UserInfo class each attribute )

 
  
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;
}
 
 

 

we look Efficiency :

 
  
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);
}
}
 
 

 

results ( js engine above is calculated time , the following is a pure C # computing time , tragedy ah ):

 

 

Conclusion :

 
      
  1. this Noesis.Javascript only for performance-demanding applications
  2.   
  3. performance depends Lua
  4.  
 

1 条评论:

  1. so given that it need an authentication, how will the code will be?

    回复删除