`

struts2项目性能调优三步曲(转)

    博客分类:
  • SSH
阅读更多

前一段时间有反映说是一个使用了struts2的生产系统的页面显示速度太慢。登录后发现确实如此,于是进行了一番性能调优的研究和测试。

    一,根据struts2官方的性能调优说明进行了一些参数的修改。

    http://struts.apache.org/2.x/docs/performance-tuning.html http://cwiki.apache.org/WW/performance-tuning.html

    Turn off logging and devMode.(关闭logging和Devmode)

    这个当然没问题,但是全部关闭logging不现实,我只是关闭了struts2相关package的logging

    Do not use interceptors you do not need.把struts.xml中不需要的interceptor统统删除

    Use the correct HTTP headers (Cache-Control & Expires)。

    不确定应该如何修改

    Copy the static content from the Struts 2 jar when using the Ajax theme (Dojo) or the Calendar tag.关于这点,后面会提到

    Create a freemarker.properties file in your WEB-INF/classes directory.照做

    Create the freemarker.properties file and add the following setting (or whatever value you deem fitting):template_update_delay=60000照做

    Enable Freemarker template caching As of Struts 2.0.10, setting the property struts.freemarker.templatesCache to true will enable the Struts internal caching of Freemarker templates. This property is set to false by default.照做

    进行上述修改后,发现页面打开的速度并没有明显的提高。

    二,此时我已经基本锁定网页打开速度慢的原因与ajax(或者说是dojo)有关。因为dojo的js库大概有450K左右,先尝试使用gzip压缩 javascript,减小传输量,看能否加快页面的加载速度在Tomcat的server.xml的connector中添加如下配置,激活gzip功 能compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,application/x- javascript,application/javascript"进行上述修改后,发现页面打开的速度还是没有明显的提高。

    三,经过上述两个实验,觉得应该是struts2所封闭的dojo的性能问题了。于是引入JQuery. JQuery的js文件最小是55K, gzip后应该更小,页面的响应速度明显改善(一个数量级以上的提高),主要原因在于与服务器交互的处理上极大地提升了效率。而且页面处理代码更加简洁明 了。

    最后,我删除了所有的<s:head theme="ajax"/>和 <s:head/>(如果页面中加入<s:head />,那么在Struts2生成的html中后包含dojo.js),使用JQuery来完成所有的Ajax和javascript功能。

最近,继续研究了Struts2性能的调优方法,总结了一下,得出新三步曲:

    4. 使用FreeMarker的最新版本2.3.13,因为在版本2.3.11中,FreeMarker针对性能进行了改进,以下是 FreeMarker2.3.11的release notes:2.3.11 Date of release: 2007-12-04 This release contains several performance and usability improvements.

    5. ognl2.7所称ognl2.7相对于2.6在性能上有了“显著”的提升,于是下载了2.7以及2.7所需要的javassist- 3.8.0.GA.jar

    其实,经过上面2个步骤,我并没有发现应用的性能有显著的改善,可能我的页面中从ValueStack中的存取操作并不是特别多,也不是特别的复杂,所 以,Ognl对我的影响并不明显。

    6. 最后使用了JProfiler对Tomcat进行了监控,最后发现问题在自定义模板上,我将页面的自定义模板全部删除,果然页面的响应速度有了较大的提 升。

通过上两篇文章的研究,影响Struts2性能的原因在于Ognl的Value Stack的性能不佳。那么如果解决呢:我首先尝试使用JSF.一开始选择JSF的原因主要是:

    1、Stuts2自己提供了JSF的Plugin2、JSF是Sun作为标准提出,而且已经通过的。从Google的趋势搜索上也可以看出,搜索JSF的 人在增多。

    3、JSF作为一种以组件为基础的Web Framework有其独到之处,其内建的和其他许多开源的组件使用起来相当方便、强大。当然,对于不同的应用来说也有不利之处(后面会提到),但是如果 能够坚持长期使用,逐渐积累组件库的话,JSF是一个很好的选择。

    4、JSF的文档(或者说是书籍)还是比较多的。

    经过测试使用后,发现其性能与Struts2相比确实提升不少。但是后来遇到了一个问题,所以最后还是放弃了JSF.这个问题是关于JSF的 DataTable的,JSF提供的DataTable其实使用起来很方便,可定制化程度也不错,只是刚好缺少了我所希望的功能(也可能是我不知道如何实 现)。我的应用中的DataTable是一个动态的结果集,也就是说输出的列是不能预先确定的,而DataTable却要求先声明好所有的 DataColumn,我不知道如何解决这个问题。所以最后放弃了JSF.我的第二个选择是FreeMarker选择FreeMarker的原因是:

    1、FreeMarker是Struts2缺少的模板引擎,Struts2的标签大部分是使用FreeMarker的,使用FreeMarker的话,连 Plugin都省去了。

    2、FreeMarker相对比较轻量级、因为他本身只是一个模板引擎,与JSF这样一个大而全的WebFramework相对,轻巧多了。

    3、FreeMarker的学习起来非常容易,只要把他网站上的Document过一遍,基本上就OK了。

    4、FreeMarker虽然体积小,功能还是相当强的,I18N,Converter之类的东西基本都全了,至少我所需要的功能全有。

    5、FreeMarker相当灵活,他不象JSF把底层的东西封装了以后,暴露出一些属性可以设置,如果你需要的属性不能设置,你就没有办法了。在 FreeMarker你直接操作最底层的东西,拥有很大的灵活性。当然,牺牲了一些方便性,比如,要用FreeMarker生成一个下拉框,就需要较多的 工作量了。

    测试之后,使用FreeMarker的性能很不错,在大数据量操作的情况下,至少一个数量级的性能提升。

    我的最终结论,如果要在Struts2中,展示或者操作大量数据,强烈推荐使用FreeMarker.

分享到:
评论

相关推荐

    struts2项目性能调优三步曲.txt

    本文将根据给定文件的信息,深入探讨Struts2项目性能优化的三个关键步骤,旨在帮助开发者提升系统响应速度和用户体验。 ### 一、关闭不必要的日志记录与开发模式 Struts2在默认情况下开启的日志记录和开发模式虽然...

    struts2项目部署

    本教程将详细介绍如何部署一个基于Struts2的项目,特别适合初学者。由于实际的文件列表未给出,这里我们将假设它包含了必要的JAR库、源代码以及配置文件。 首先,理解Struts2项目的基本结构至关重要。一个典型的...

    Struts2项目代码

    这个"Struts2项目代码"提供了一个学习Struts2框架的实用实例,可以帮助开发者更好地理解Struts2的核心概念和实践应用。 Struts2是Apache软件基金会下的一个开源项目,它是基于Model-View-Controller(MVC)设计模式...

    struts2项目实例

    在本“Struts2项目实例”中,我们将深入探讨如何使用Struts2框架来实现基本的CRUD(创建、读取、更新、删除)操作。 首先,Struts2的核心是Action类,它是业务逻辑处理的中心。在这个实例中,每个CRUD操作将对应一...

    Struts2项目实例

    这个"Struts2项目实例"很可能是为了帮助开发者理解和掌握Struts2框架的实际应用。 首先,让我们深入了解一下Struts2框架的核心特性。Struts2是由Apache软件基金会维护的,它继承了Struts1的优点并解决了其不足,...

    struts1和struts2项目实例

    Struts1是最早的版本,而Struts2是其后续的改进版,引入了许多新特性和性能优化。 Struts1的核心是ActionServlet,它是一个控制器组件,负责接收HTTP请求并转发到相应的Action,Action再调用业务逻辑处理数据,最后...

    struts2 项目实例

    这个项目实例——"Struts2App",旨在为初学者提供一个基础的Struts2应用演示,帮助他们理解和掌握Struts2的核心概念。 在Struts2框架中,我们首先需要了解的是Action类,它是业务逻辑处理的主要组件。Action类通常...

    hibernate+struts2 项目源码

    【标题】:“Hibernate+Struts2 项目源码”是一个基于流行Java开发框架的实践项目,旨在教授如何结合使用Hibernate对象关系映射框架与Struts2 MVC(模型-视图-控制器)框架来构建Web应用程序。 【描述】:这个项目...

    Struts2项目开发流程简明实例

    功能: ...  否则页面跳转到login.jsp页面等待用户输入;  此实例只适合对Struts2不了解的初学者. 工具:Eclipse+Tomcat 技术:Jsp,Struts2 步骤: 1. 创建web项目 2. 项目添加Struts2类...7. 部署和运行struts2项目

    struts代码学习三步曲

    本教程“Struts代码学习三步曲”将帮助初学者逐步理解并掌握Struts框架的核心概念和实际应用。 第一步:理解Struts框架基础 1. **MVC模式**:Struts遵循MVC设计模式,将业务逻辑、数据模型和用户界面分离,使代码...

    struts2 项目源代码

    这个"北大青鸟 struts2 项目源代码"是学习和理解Struts2框架的一个实用资源,尤其适合初学者和开发者深入研究。 在Struts2框架中,核心组件包括Action、Result、Interceptor(拦截器)、配置文件等。Action是业务...

    Struts2项目开发经验总结 word版

    在这个“Struts2项目开发经验总结”中,我们将深入探讨Struts2的核心概念、关键特性以及在实际项目中的应用。 首先,Struts2作为控制器,负责处理HTTP请求,并通过Action类来执行业务逻辑。Action类是Struts2的核心...

    struts2项目测试成功的jar包

    这个"struts2项目测试成功的jar包"包含了运行Struts2应用所需的核心库和其他依赖,确保了你的项目能顺利运行,避免因jar包不兼容或缺失导致的常见错误。 在Java开发中,JAR(Java Archive)文件是Java类库的打包...

    基于Struts2的BBS项目

    **基于Struts2的BBS项目** Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发。在这个基于Struts2的BBS项目中,开发者利用了Struts2的核心优势,构建了一个功能完善的论坛系统。下面...

    IntelliJ IDEA 2017.3创建第一个Struts2项目

    通过学习Struts2的其他特性,如拦截器、结果类型、OGNL表达式等,可以进一步提升项目的功能和性能。同时,IntelliJ IDEA提供的强大的代码编辑、调试和测试工具,将帮助我们在Struts2开发过程中事半功倍。

    Struts2Review项目

    这个“Struts2Review项目”很可能是为了帮助开发者回顾和掌握Struts2的核心概念和技术。该项目可能包含了从基础到高级的多个示例,以帮助用户深入理解框架的用法。 Struts2的核心特性包括MVC设计模式的实现,它允许...

    在Eclipse中配置Struts2项目(html)手把手教会你 +struts2 标签库介绍(html) + STRUTS2学习文档.pdf + Struts2―表单验证validate(html) + struts2和struts的比较 + struts教程(html)

    在Eclipse中配置Struts2项目(html)手把手教会你 如何在Eclipse中配置Struts2。 struts2 标签库介绍(html)对Struts2的标签做了详细的介绍让你轻松掌握Struts2的标签。 STRUTS2学习文档.pdf 对Struts2的一些配置...

    struts项目调优需要的ognl2.7的jar包

    ognl2.7相对于2.6在性能上有了“显著”的提升.所以该jar包能对struts2的调优有很大帮助,尤其是ValueStack中的操作比较多的情况下。

Global site tag (gtag.js) - Google Analytics