XWorker的动态模型引擎是使用Java开发的,动态模型引擎的速度主要体现在动作模型的执行速度上,下面是一个Java、Java动作模型和Groovy动作模型的执行测试。
在下面的测试中,对数字进行累加操作,执行1千万次,测试的Java代码如下。
//模型要调用的Java方法 public static int inc(ActionContext actionContext){ Integer x = actionContext.getObject("x"); return x + 1; } //Java直接执行 public static int inc(int x){ return x + 1; }
其中public static int inc(ActionContext actionContext)是模型动作要执行的方法,而public static int inc(int x)方法是直接调用Java的测试。
测试执行的代码如下。
int count = 10000000; //测试Java性能 long start = System.currentTimeMillis(); int value = 1; for(int i=0; i<count; i++){ value = inc(value); } System.out.println("java method execute time : " + (System.currentTimeMillis() - start) + ", count=" + count + ", value=" + value); //测试Java动作模型的性能 ActionContext actionContext = new ActionContext(); Action javaAction = world.getAction("xworker.example.core.performance.TestPerformance/@actions/@javaAdd"); start = System.currentTimeMillis(); value = 1; for(int i=0; i<count; i++){ value = javaAction.run(actionContext, "x", value); } System.out.println("java action execute time : " + (System.currentTimeMillis() - start) + ", count=" + count + ", value=" + value); //测试Groovy动作模型的性能 Action groovyAction = world.getAction("xworker.example.core.performance.TestPerformance/@actions/@groovyAdd"); start = System.currentTimeMillis(); value = 1; for(int i=0; i<count; i++){ value = groovyAction.run(actionContext, "x", value); } System.out.println("groovy action execute time : " + (System.currentTimeMillis() - start) + ", count=" + count + ", value=" + value);
测试执行结果如下。
java method execute time : 9, count=10000000, value=10000001 java action execute time : 4950, count=10000000, value=10000001 groovy action execute time : 15987, count=10000000, value=10000001
测试结果显示Java动作模型要比纯粹的Java慢,而Groovy脚本动作要比Java动作模型慢,但考虑到模型主要是对各种API使用接口的封装,其性能还是可以接受的。
针对测试结果,我们建议:
动态模型运行时的内存占用一直是我们关注的,不过由于Java本身内存消耗的就很多,作为框架内存大部分是被String和Map消耗的,但当前主流的机器内存一般都很大,运行动态模型的系统已足够,所以还未计划对此优化。
动态模型编程也是一种框架编程方法,而在传统的框架编程里由于框架由于是预先定义好的,如果不能满足当前需求或存在bug,那么使用者就会很麻烦,不过这种情形在XWorker的动态模型编程里可以很容的解决。
Copyright © 2007-2014 XWorker.org 版权所有