泰山磨剑
十年磨一剑
十年磨一剑
我的首页
文章
相册
圈子
留言
管理
 
    当前所在页面:首页>>文章>>性能提升10倍的Ajax远程脚本调用引擎
性能提升10倍的Ajax远程脚本调用引擎
    作者: 来源: 发表时间:2008-01-03

 
 

  EasyJWeb中已经有了一个Ajax远程脚本调用引擎,这是很早的事情了。但由于一直存在一些性能问题,所以一直没有给大家推荐,直到最近m3发布,通过对Ajax远程脚本调用引擎进行完善,把处理复杂对象的返回进行的简化,通过在以前的几个应用中进行了测试,发现性能一下子提升了至少10倍以上,并且运行比较稳定,因此在这里给大家推荐推荐。

  Ajax远程脚本调用示例演示:http://easyjweb.demo.easyjf.com/ajax/ajax.html

  完整的示例应用及源码下载:ftp://ftp1.easyjf.com/easyjweb/demo/ajax.war
  

  EasyJWeb是一个提供了对Ajax远程脚本调用功能支持的框架,他帮助你完成Ajax远程脚本调用中的大多数细节工作,你基本上不用写额外的代码就能非常轻松的使用javascript来调用服务器的业务组件的相关方法,这些业务组件可以是任何java对象,比如EJB、EasyJWeb窗口中的Bean、Spring容器中的Bean等等。使用EasyJWeb的Ajax远程脚本调用,需要下面的几个步骤:
  1、 在EasyJWeb容器或子容器中配置供客户端脚本调用的业务组件。比如,在easyjweb的配置文件中像下面的方式配置Bean:

<bean name="PersonService" class="easyjweb.demo.service.impl.PersonServiceImpl" />

     PersonServiceImpl的代码如下:

package easyjweb.demo.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

public class PersonServiceImpl {
 /**
  * 得到服务器当前时间
  * @return
  */
 public Date getTime() {
  return new Date();
 }

 }

2、 在EasyJWeb的配置文件,配置要把容器中的哪些业务组件及具体方法暴露给客户端进行远程脚本调用。内容大致如下:

<ajax>
  <services allowName="*">
   <service name="PersonService" />
  </services>
 </ajax>

上面的ajax配置信息表示暴PersonService的所有public方法供客户端使用javascript调用。
只需要上面的两步,就完成了服务器端的相关工作。服务器端不再需要写任何Action,EasyJWeb会自动处理客户端发送来的Ajax远程脚本调用,下面我们进一步看看客户端的程序。
3、为了能够在客户端页面中直接使用javascript进行对PersonService业务组件的Ajax远程脚本调用,我们需要在页面中引入下面三个js。

<script src="ejf/easyajax/prototype.js" type="text/javascript"></script>
<script src="ejf/easyajax/engine.js" type="text/javascript"></script>
<script src="ejf/easyajax/PersonService.js" type="text/javascript"></script>

  其中第一个ejf/easyajax/prototype.js引入的是prototype.js,这是一个javascript的基础库,提供很多对基础javascript类的扩展,并提供了ajax相关的实用组件,EasyJWeb的远程脚本调用引擎是基于prototype.js构建的。
  第二个ejf/easyajax/engine.js是EasyJWeb的远程脚本调用支持引擎,他负责处理Ajax远程脚本调用的相关的细节,如参数处理、回调处理等,同时提供了一些实用工具如EasyAjaxUtil等供客户端使用。
  第三个ejf/easyajax/PersonService.js是PersonService对象,PersonService.js的内容是根据服务器端的容器中名为PersonService的Bean及EasyJWeb的ajax配置信息生成的。只要引入了PersonService.js,我们就可以直接在页面中调用PersonService的相关方法了。
  上面的三个js文件都是服务器端动态生成的,需要我们在web.xml文件把所有/ejf/*的URL都交由EasyJWeb来处理。因此,需要在Web.xml的url中增加如下的映射内容:

<servlet-mapping>
  <servlet-name>easyjf</servlet-name>
  <url-pattern>/ejf/*</url-pattern><!--所有/ejf/开头的url都由easyjweb来处理-->
 </servlet-mapping>


4、 在页面中使用javascript调用服务器的相关方法

<script>
function showServerTime(){
PersonService.getTime(showTime) ;
function showTime(ret){
alert("服务器端时间: "+ret) ;
}
}
</script>

  怎么样,一切都是如此简单,不需要写任何PersonService的代码,不需要写任何Action,只需要进行非常简单的配置,就能让我们服务器上的业务组件支持Ajax远程脚本调用。

 

 
 

(阅读 )   评论数(:8)
评论】 【收藏】
评论:共8条
真棒!大峡好样的!
评论人: 匿名用户     评论时间: 2008-01-03 13:26:47
性能提升10倍根据何在?
评论人: 匿名用户     评论时间: 2008-01-03 13:46:21
不错了
评论人: 可以测试吗?     评论时间: 2008-01-03 14:11:49
10倍是一个概数而已,呵呵,大家别当真。我用在以前我们公司的几个商业项目里面试了一下,很多地方发现快了很多。
评论人: 大峡     评论时间: 2008-01-03 14:40:57
我在我们的项目上支上了Easyjweb的ajax功能,挺方便的,感谢EasyJF团队的贡献
评论人: 林远之     评论时间: 2008-01-10 17:38:19
这和dwr有什么区别?
评论人: wendy     评论时间: 2008-02-20 15:12:22
easyjweb现在是越做越强大了.但easy一点都没变. 不过千里马常有,而伯乐却不常有呀.再强大的easyjweb现在却不能成为J2EE MVC层的开发主流
评论人: 冷雨     评论时间: 2008-02-26 19:11:18
easyjweb就是大杂烩
评论人: jessdy     评论时间: 2008-03-04 09:50:18

发表评论:
发表人:
评论: 
    
 
关于我们 | 诚聘英才 | 联系我们 | 广告业务 | 网站地图 | 法律声明

EasyJF开源团队版权所有  建议使用1024*768分辨率