http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3955|回复: 0

[JS] 在.Net中执行js

[复制链接]
发表于 2016-2-24 12:49:36 | 显示全部楼层 |阅读模式
利用Noesis.Javascript开源组件可以做到在.net中执行js脚本,同时js脚本也能调用C#函数。这个组件的获得方式:在NuGet中输入搜索"Noesis"就能找到。
我们来做个搜索功能:用户能够在textbox中输入js脚本来筛选list记录,界面如下:
然后,click filter button后的UI:
看,筛选出来了,代码如下(js能调C#写的UserInfo类的各个属性)
[url=][/url]
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;        }[url=][/url]


我们来看看效率:
[url=][/url]
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);            }        }[url=][/url]


结果(上面的是通过js引擎计算的时间、下面的是纯C#计算时间,悲剧啊):
结论:
  • 这个Noesis.Javascript只适用于性能要求不高的场合
  • 高性能的要看Lua
http://www.cnblogs.com/aarond/p/Noesis.html



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-4 10:21

© 2014-2021

快速回复 返回顶部 返回列表