常见问题

1.动态模型的性能如何?

    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编写
    对于性能要求非常高的算法和大量计算的东西,建议使用Java编写,然后接口用模型调用。
     
  • 性能要求不高的可以使用Groovy脚本 
    对性能要求不高的场合,可以使用Groovy脚本,因为Groovy脚本是嵌入到模型里最方便使用的一个脚本语言。

2.内存消耗

    动态模型运行时的内存占用一直是我们关注的,不过由于Java本身内存消耗的就很多,作为框架内存大部分是被String和Map消耗的,但当前主流的机器内存一般都很大,运行动态模型的系统已足够,所以还未计划对此优化。

3.如何克服框架不灵活的问题?

    动态模型编程也是一种框架编程方法,而在传统的框架编程里由于框架由于是预先定义好的,如果不能满足当前需求或存在bug,那么使用者就会很麻烦,不过这种情形在XWorker的动态模型编程里可以很容的解决。

  • 重写框架的方法
    在动态模型编程中可以随时重写框架的方法,如果框架的方法不能满足需求,那么可以在具体模型中重写相关方法来实现新的需求。
     
  • 可以随时扩充框架
    在动态模型编程中可以随时扩充已有的框架,增加新的功能。
      
  • 使用嵌入脚本
    基本上在动态模型编程的每一个框架里都可以嵌入脚本,通过脚本可以实现框架所不能实现或不太容易实现的内容。 

 

Copyright ©  2007-2014 XWorker.org  版权所有

沪ICP备08000575号