站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题基于J2EE架构的web应用程序的性能优化

基于J2EE架构的web应用程序的性能优化

摘要: 前言:本文简要介绍了J2EE的概念和特点,并根据J2EE体系架构的技术特点,对设计和开发基于J2EE架构的应用程序时应考虑的性能优化的问题做了阐述、分析,并提出了一些解决问题的思路和方法。
一、 J2EE体系架构简介

J2EE是一种利用Java 2平台来简化诸多与多级企业解决方案的开发、部署和管理相关的复杂问题的体系结构。它使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。多层化应用为不同的每一种服务提供一个独立的层,J2EE 典型的四层结构如下:

· 运行在客户端机器上的客户层组件

· 运行在J2EE服务器上的Web层组件

· 运行在J2EE服务器上的业务逻辑层组件

· 运行在EIS服务器上的企业信息系统(Enterprise information system)层软件

J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,并提出了(JSP、Java servlet、JDBC、EJB、RMI 、JNDI…)等13种技术规范。





二、性能优化

性能是衡量一个应用系统的相当重要的技术指标。对于设计、开发一个基于J2EE架构的web站点或基于web的应用系统,请求/响应的效率和质量就显得尤为重要。

我们经常会遇到这样一些情况,当我们从客户端向服务器发出请求后,长时间未得到响应;当某一时刻向服务器发送的访问数据库的请求过多时,服务器响应缓慢。产生这种情况的原因是多方面的,如果从系统程序设计的角度来分析,为了尽量减少系统运行效率低的问题,那么根据J2EE体系架构的技术特点,在开发基于J2EE架构的web应用程序时,应该在技术上对系统设计进行一定的控制,对应用程序的设计和开发进行一定优化。

对采用J2EE架构开发的系统的优化一般针对两方面: 结构优化,数据库优化

结构优化主要包括:
1.session优化。

HTTP是一种简单的、无状态的、面向连接的协议,它的处理过程是“连接/请求/响应/关闭”。因此,在基于web的处理过程中,为了维护客户状态,需要一种保持多个“连接/请求/响应/关闭” 事务间用户信息的方法,那么session做为一种容易实现的方法而得以应用。session的生命周期相当简单:

1. 创建session对象

2. 将一些数据存储在session中

3. 用某种方式请求和使用数据

4. 最后数据被清除

session为存储状态信息提供了一种比较好的机制,但是,由于每个session都要占用一定的系统服务资源,那么如果web应用程序的访问量很大,服务器资源很快就会消耗尽。因此,优化session的关键是首先尽量减少使用session,或者尽量不在session中长时间的保存对象。那么就有必要对session进行适当地管理。有以下两种可行的方法:

一种方法就是当程序使用完session中的存储对象后,立即主动的从session中将其删除并释放,这样这些对象就不会长时间的浪费系统资源。通常情况下,你可以选择简单地让缺省的超时(timeout)来处理暂时存储的数据,但是这样做一方面占用了系统服务资源,另一方面也影响到系统的安全。因为如果一个用户用他的账户结束了访问,离开了浏览器,但由于某种原因没有关闭浏览器,那么首先他已经不再需要系统服务,我们不希望他继续占用系统资源;另外我们也不希望其他人“借用”他的信息进入系统。
另一种方法是将这些存储在session中的对象,改为通过request来传递,对用户每次执行系统服务后产生一个新的标识,并将此标识及其指定的数据再定向并通过 request传送到下一个应用服务中,依次传递。request在请求结束后是自动被系统释放,所以不会长时间浪费系统资源。对于那种不需要维持太久状态并且使用频度高的过程可以考虑采用这种方式。

2.利用缓存。

如果你住在戈壁滩,附近没有水源,很远的地方才有一条河,如果你每次口渴了,当然是需要尽快能喝到水,但是你不可能为了每喝一杯水就每次都赶到河边,那么你就需要一个水缸,可以先去挑几桶水,把水灌满水缸,需要的时候可以直接从水缸中取水,这样很快,很方便。缓存就可以形象的比喻成“一个水缸”,它的特点就是把数据或资源保存在访问开销小的地方,一般保存在内存中,它在整个应用生命期都可以被访问,对资源来说,是可以反复使用的,因此缓存的访问开销比直接访问资源开销要小。因此,在满足用户意愿的前提下,尽可能地使用缓存共享资源, 以提高整个系统的性能。

另外缓存也需要管理,因此,对缓存都要实现专门的管理对象。

下一章讲重点介绍有关数据库的优化(待续)
________________________________________________________________
以上只是本人在开发过程中的一些体会,希望与各位共同探讨!请多指教!

colababy 2002年4月 深圳

电子邮件:colababy@elong.com OICQ:8646328
↑返回目录
前一篇: 在J2EE环境中使用Quartz企业级计划调度器(2)
后一篇: 优秀的J2EE 开发工程师应该掌握的知识点