昨天客户反映有个画面显示特别慢,我就接手来调查原因。一看jsp源码,确实非常复杂,然后就一步一步来了,首先看是不是服务器端的问题,通过设定调试生成的信息发现服务器的业务处理及JSP的关联Servlet的处理是不会有那么夸张的延迟问题,只能是客户端的问题了。
这个画面用了大量的AjaxTag,所以在生成发送到客户端的html代码中有大量的Ajax Tag关联的JavaScript对象生成代码。为了验证我的猜想,我将画面上所有的Ajax功能全部删除,再运行,画面很快就显示出来。最后通过阅读关联的AjaxTag.js代码,发现是AjaxJspTag.Callout中的getElementsByClassName方法执行效率太低导致。
getElementsByClassName是在Prototype.js定义的方法,然后通过google一查,才知道老外一直在为提高这个方法的效率做努力,有兴趣的同学可以自己去看看,<<http://blog.whatwg.org/the-road-to-html-5-getelementsbyclassname>>.
发现了问题就要解决这个问题,ajaxTag.js的处理逻辑不能再用了,所以我重新写了一个Tag,重新生成自定义的一个javaScript对象SelfCallAjax,其继承于ajaxTag.js中的AjaxJspTag.Callout对象,重写了其中setListeners方法,以前的方法内容是
setListeners: function() {
if (this.options.sourceClass) {
var elemList = document.getElementsByClassName(this.options.sourceClass);
for (var i=0; i<elemList.length; i++) {
elemList[i].onmouseover = this.calloutMouseover.bindAsEventListener(this);
elemList[i].onmouseout = this.calloutMouseout.bindAsEventListener(this);
}
}
},
改写后变成
etListeners: function() {
if (this.options.source) {
var elem = $(his.options.source);
elem .onmouseover = this.calloutMouseover.bindAsEventListener(this);
elem .onmouseout = this.calloutMouseout.bindAsEventListener(this);
}
},
Jsp的相关内容也需要进行修改,以前都是利用元素的style class name来进行callout ajax绑定,而现在就是利用element id来绑定,所以在每个需要绑定的元素后面都必须添加对应的AjaxCallTag.
分享到:
相关推荐
AjaxTag.js是自定义的JavaScript文件,其中包含了处理AjaxTag标签的逻辑,它通常会根据AjaxTag的属性生成对应的JavaScript代码。 在服务器端,你需要创建一个处理Ajax请求的控制器或Servlet。例如,在Spring MVC...
在Web开发中,Ajax(Asynchronous JavaScript and XML)技术是一种增强用户体验的重要手段,它允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。AjaxTag是基于Ajax技术的一系列HTML标签,...
【描述】:“开源ajaxtag包括类似于google的动态加载提示,还有很多非常实用的例子”意味着这个库不仅模仿了Google搜索框的实时搜索建议特性,还提供了丰富的实践案例,帮助开发者理解和学习如何在自己的项目中使用...
**AJAXTag** 是一个基于AJAX(异步JavaScript和XML)技术的JSP标签库,它简化了在Java Web应用程序中实现动态、无刷新页面更新的过程。在传统的Web开发中,每当用户需要获取新数据时,整个页面都需要重新加载。而...
在Web应用中,AJAX允许页面部分更新,无需整个页面刷新,从而提供了更流畅、更快捷的用户体验。本项目是为Eclipse IDE设计的,意味着开发者需要使用Eclipse来打开和运行该项目。 **Ajaxtags**这个名字暗示了这个...
这个压缩包包含了核心库`ajaxtag.jar`和详尽的使用文档,旨在帮助开发者提高效率,减少页面的全量刷新,提升用户体验。 首先,我们来了解一下`ajaxtag.jar`。这是一个Java库,它集成了JavaScript和服务器端的技术,...
1. **每次显示都需要创建新的元素**:这意味着每当需要显示`NeatDialog`时,都必须创建一个新的DOM元素,这会导致性能问题,尤其是在频繁操作时。 2. **多级联动时的问题**:在多级联动选择的情况下,由于`...
**AjaxTags完整实例详解** 在Web开发中,Ajax(Asynchronous JavaScript and XML...通过合理的使用,可以大大提高应用的交互性和性能。在实际开发中,结合Action、Result和Listener等组件,可以构建出强大的Ajax功能。
数据连接池(如C3P0或DBCP)是Struts框架中用于管理数据库连接的重要组件,它可以高效地复用数据库连接,提高系统性能,避免频繁创建和销毁连接带来的开销。 总结来说,这个【jsp开发插件】集合涵盖了从邮件处理、...
Ajaxtag插件可能提供了一些特定的功能,比如异步请求处理、错误处理策略、性能优化等,以帮助开发者更高效地进行网络通信。 **知识点扩展:** 1. **热修复技术**:如QQ X5内核的Tinker,能够实现对Android应用的...
在压缩包中的“ajaxtag”文件,可能是Ajaxtags的源码、库文件、配置文件或者是包含以上所有信息的综合文件夹。解压后,开发者可以深入研究其内部结构,了解其工作原理,并根据需要进行定制。 总的来说,Ajaxtags...
在Java Web开发中,Spring、Struts和Hibernate是三个非常重要的框架,它们分别负责不同的职责。Spring是一个全面的后端应用程序框架,提供了依赖注入、面向切面编程、事务管理等功能;Struts则专注于MVC(Model-View...
在网页开发中,分页是一种常见的数据展示方式,特别是在数据量较...提供的资源中"分页的方法"可能是对不同分页策略的讲解,而"ajaxTag"可能包含了一个具体的AJAX分页实现示例代码,对于学习和实践分页技术非常有帮助。