此博客为9925.org的镜像,登录9925.org可以查看到最新博文。
原文出处:http://ily.so/2EZZz2
Easton Javascript(下简称EJS)是JavaScript语言的拓展实现,它符合ECMA-262标准,请参考:ECMA-262官方文档。
维基百科关于ECMAScript的介绍:点击这里。
由于有详细的官方文档和维基百科的介绍,这里就不过多介绍ECMA-262标准了。
这里需要详细介绍的是EJS语言拓展了JS哪些功能?
关于.NET Framework 4.0类库介绍:点击这里
现有的脚本语言足够多了,为何要选用EJS脚本语言?
绝大多数学过编程的人都应该接触过JavaScript语言,它是脚本世界的绝对霸主,而JavaScript语言也有其天生的不足,它不适用于处理网络通信、文件处理等工作。最近特别流行的NodeJS就解决了这个问题,但是它的主要目的还是为了让JavaScript语言运行在服务端,而不是拓展客户端的JavaScript语言功能。
最初想到设计这个工具主要还是工作需要,我的工作是设计各种应用型系统,为了测试系统各个接口是否正常,通常比较麻烦,比如可通过C#、Java等语言提供的类测试接口,也可以通过Fiddler2实现,或者通过HTML+JavaScript测试。但是无论是哪种方法,都需要花比较多的时间。我看很多开放平台都有提供接口测试工具,但他们提供的测试工具都有局限性,比如仅仅局限于当前平台的接口测试,或者使用起来很麻烦,不符合程序员思维。早在我读大学的时候就实现过脚本语言解释器(Plain Script,用于网络爬虫内置的脚本引擎,可编写脚本采集不同站点数据),因此我遇到这类问题首先想到的是能否实现一门脚本语言专门用于webapi接口测试。在权衡各方因素后,我考虑选用JavaScript作为基础,在此基础上再拓展功能(之前还考虑过使用Python,因为.NET平台提供了IronPython,这玩意跟C#交互可以说是完美的不能再完美,但是由于其语法比较奇葩,我们公司很多人都是搞类C语言(如:C#、Java等)出身的而且考虑层次较低的程序员接受起来可能会有些麻烦,最最重要的一点还是JS是原生支持JSON的,这一点对测试webapi来说是非常方便的,目前绝大多数webapi都采用JSON格式传输数据)。
在经过半个月的努力后,利用开源宝库内的大量资源,开发出了第一版EJS测试工具,当时叫“Http PRotocol Test Tool”,是在一个小的开源JS引擎(Jint)的基础上开发的工具,但是由于此开源JS引擎本身存在的BUG较多,并且开发周期很短,时间仓促,因此这个版本的工具功能非常单一,仅仅是满足测试接口的需求。好在这个版本使用的还比较愉快,大家在使用的过程中并未出现特别严重的问题,主要还是由于功能单一,很多功能实现的还不够方便,比如连多文本编辑器都未实现,一次只能编辑一个脚本(因为功能单一,仅作为内部工具使用)。
有了这个测试工具的开发经验和信心,再利用原来自己开发的Plain Script的IDE工具源代码,花了大约一个月的时间,终于把EJS解释器、预编译器、IDE工具实现了。实现这些东西的目的是为了编写webapi测试脚本的时候更加方便(提供了自动完成功能,可很方便的编写程序),让EJS脚本语言拓展起来也更加方便(运行库是开源的,可随时拓展),并且可以让EJS脚本做更多有意义的事情(如:采集网络数据、文件读写操作)。这里的EJS解释器还是在之前的开源JS引擎的基础上开发的,并且解决了其中的绝大部分已发现的BUG,这些BUG主要是JS与.NET类库间交互的问题。预编译器是完全自己实现,目前功能还比较单一,未来将拓展更多的预编译指令。IDE工具的开发也利用了大量的开源项目,比如:DockPanel、ScintillaNET。这里也非常感谢这些开源作者对计算机世界作出的贡献,没有他们,计算机世界也不会那么丰富多彩。
在性能上,EJS有何优势?
EJS的诞生最初就不是为了性能,而是牺牲性能换取开发时间,通过简单的几行代码实现复杂的功能。所以在性能方面,EJS可能比起C#、JavaScript之类的语言来说还弱了很多(嘿嘿,EJS本身就是使用C#实现的,效率不可能比C#还高,毕竟这只是解释运行的语言),比起V8这类高性能解释器来说也还是远远不如的。但是它并不是为了跑大型项目和代码的,仅仅只是做一些简单的功能,比如:接口测试、网络数据采集、文件读写等。并且它并不需要运行在服务器上,而仅仅只是客户端工具。未来,我还将提供V8版本的EJS,不过可以想象得到的是这两个版本的EJS的某些功能是不能兼容的,因为当前的EJS脚本存在了太多.NET的东西,不过通过EJS运行库可以掩盖掉这些问题,非常期待。
如何运行EJS脚本语言?
在本文底部有下载地址,双击ejstool.exe运行即可IDE环境,程序本身是绿色程序,无需安装,放入U盘可随身携带。
依赖:由于采用C#编写的,因此ejstool.exe依赖.NET Framework 4.0,可通过微软官方网站提供的下载地址下载并安装(目前绝大多数Win7系统内应该都是内置了的,无需额外安装,但是老式XP系统可能会提示错误)。下载地址:官方下载
内附“demo”可供参考,lib文件夹内为IDE工具运行库。
运行库目前仅提供部分核心功能,运行库为开源项目(可通过SVN检出最新版覆盖原有目录即可),未来将拓展更多功能。
svn:https://svn.ily.so/svn/ejslib/
账号:public 无密码
如何关联EJS脚本文件?
主菜单->工具->EJS脚本文件->关联EJS文件/取消关联EJS文件
如何关联系统右键菜单?
双击install.cmd脚本关联系统右键菜单,双击uninstall.cmd取消关联系统右键菜单。
软件下载:EJSTool Alpha2 V1.3[R1].zip
软件下载:EJSTool Alpha2 V1.3[R1](绿色版).zip(绿色版)
更新日志:
8、IDE 1.3.0.0(EJSTool Alpha2 V1.3[R1])【2015年3月15日】:
1)新增importAssembly函数,可导入外部程序集文件,支持.NET 4.0文件;
2)错误提示将精确到内存堆栈中的每一级调用;
3)在执行已经保存的脚本文件时可使用__script_path__、__script_dir__全局变量分别获取当前执行的脚本路径、当前执行的脚本存放目录。
Shell 1.1.0.0
1)新增importAssembly函数,可导入外部程序集文件,支持.NET 4.0文件。
7、IDE 1.2.0.1(EJSTool Alpha2 V1.2[R2])【2015年3月13日】:
1)修复在启动Shell时如果代码修改启动Shell前不保存代码的BUG。
Shell 1.0.0.1
1)修复在IDE启动Shell的部分BUG。
6、IDE 1.2.0.0(EJSTool Alpha2 V1.2[R1])【2015年3月7日】:
1)在IDE内新增Shell按钮,可以Shell方式执行脚本。
Shell 1.0.0.0
1)新增Shell工具,可直接运行脚本文件,当前版本Shell与IDE工具无本质区别;
2)新增SJS文件,SJS与EJS无本质区别,仅仅是为关联Shell工具而设计,也考虑后期IDE和Shell工具可能存在的差异;
3)Shell工具支持-f [filename]、-icon [r|u]指令,具体说明请cmd执行ejsshell。
5、1.1.0.1(EJSTool Alpha2 V1.1[R2])【2015年3月6日】:
1)调整了各组件的.NET框架版本,原有项目中主要依赖.NET 4.0,但是部分组件会依赖.NET 2.0,当前已确保所有组件都是.NET 4.0。
4、1.1.0.0(EJSTool Alpha2 V1.1[R1])【2015年3月5日】:
1)新增事件绑定功能,采用IL汇编实现,对性能影响几乎可以忽略。
3、1.0.0.5(EJSTool Alpha2 V1.0[R6])【2015年2月28日】:
1)为prompt、imgPrompt弹窗置顶(置于所有窗口的顶层),以及将任务栏中的图标移除;
2)修改配置文件Autocomplete.xml、Editor.xml的后缀为“json”;
3)修复工具栏“运行”or“停止”按钮在切换活动文档时不会改变的BUG;
4)修复IDE底部状态栏信息不会随切换活动文档变化的BUG。
2、1.0.0.4(EJSTool Alpha2 V1.0[R5.1])【2015年2月26日】:
1)移除运行库(lib)目录内的datetime.ejs文件,并且在__init__.ejs文件内移除datetime.ejs引用;
2)后期无法直接使用new Date().format方式格式化日期(此方法存在潜在BUG);
3)新增date目录,通过“#include”预编译指令方式自行加载目录内模块;
4)在date目录内新增“format.ejs”模块,包含formatDate函数。
1、1.0.0.4(EJSTool Alpha2 V1.0[R5])【2015年2月26日】:
修复此版本前已发现的所有BUG,如下;
1)解释器在执行错误时能报详细的错误信息;
2)修复解释器累加BUG,比如:执行fun(i++)时会产生BUG,导致i++被执行两次。
但是直接执行i++; fun(i)则不出错。
新闻热点
疑难解答