《电子技术应用》
您所在的位置:首页 > 通信与网络 > 业界动态 > Web应用中缩短Web响应时间的技术研究

Web应用中缩短Web响应时间的技术研究

2008-09-27
作者:张晓丽 于海燕

   1 引 言

  性能是Web应用程序" title="应用程序">应用程序成功与否的关键因素,响应时间" title="响应时间">响应时间则是性能的一个重要指标,尤其是从用户的角度来看,随着同时访问的用户数的增加,Web应用程序的响应时间也会相应增加,当其增加到用户无法接受的程度时,用户便会失去耐心而离开该网站。根据Zona Research的研究指出,如果使用者等待下载网页的时间超过8 s,将有30%的用户选择停止浏览网页,同样的研究表明,如果下载网页的时间缩短1 s,则这个数字将从30%降低到8%。由此可见终端用户所感到的时间延迟(user-perceivedlatency)已经成为今天Internet的主要性能问题。

  在网络带宽并没有得到相对扩充、网络流量绝对增加的情况下,是否能找到一些有效的办法,缩短整个网络对用户click的响应时间。本文针对这一问题,从Web应用程序开发的角度出发,通过提高Web应用程序的性能,从而加速网络对用户的反应速度,缩短用户感知的时间延迟。

  2 Web数据响应时间

  从终端用户的观点看,从浏览器对网站发出一个HTTP GET的请求,一直到网站服务器完整地传回网页内容至浏览器的这段过程可以描述为图1所示的时序图。

  客户端" title="客户端">客户端和Web服务器之间HTTP信息的传送是通过TCP连接实现的。图1描述Web请求中的所有时间延迟。客户端向服务器发送文件请求,首先建立TCP连接(1~3),连接建立后,Web服务器响应且发送文件至客户端,客户端接受文件且在屏幕上显示出来(4~5)。如果文件中包含图片或者需要在屏幕上显示的处理数据,客户端浏览器就需要发送请求去检索获取这些数据(6~n)。整个Web页面在屏幕上显示,其中可能含有连接,如果用户点击连接,浏览器就需要使用同样的过程检索新的页面。

  根据图1和以上分析,定义如下的概念:

  定义1 用户感知时间Tuser用户从浏览器对网站发出一个HTTP GET的请求,直到服务器完整地回传网页内容至浏览器的这段时间。

  定义2 Web数据响应时间TWeb设Tpage为页面下载时间,Tcontent为内容生成时间,则整个页面的响应时间,则:

  如前面所述,在网络带宽并没有扩充的情况下,则式(1)中的Tc这段时间就是固定的,那么提高网络性能的关键就是如何缩短Th+Ti,也就是定义2中的Web数据响应时间TWeb。在本文中,从开发Web应用程序的角度出发,从数据访问、减少网络通信量以及缓存3个方面讨论缩短Web数据响应时间的方法,并对这些方法的使用效果作了测试比较。

  3 减少数据显示的响应时间

  目前的Web应用开发大多采用基于B/S模式的3层架构,如图2所示。


  分层分离了逻辑,使得系统结构层次明晰,系统变得灵活和易于维护。图2很好地说明了Web中的分层架构,同时也描述Web页面提取数据显示的过程,以下从软件处理数据的角度分别讨论如何缩短数据访问及Web数据显示延迟,从而缩短Web数据的响应时间,减少用户感知时间,提高用户的满意度。

  3.1 数据访问的优化

  对数据的访问速度很大程度上影响应用系统的性能,如果被请求的页面是一个静态页面或只有一小部分内容需要从数据库中提取,则它的加载速度比那些需要从数据库中大量读取数据或不断从数据库接收和更新数据的页面要快,因此,对于动态的页面来说,对SQL层数据处理的优化就显得非常重要。在Web开发中,除了传统的改善数据库结构和优化SQL语句外,主要从以下的几个方进行优化。

  3.1.1 使用XML技术

  对于普通数据访问数据库而言,在数据量不大的情况下,一般性查询在执行速度上,不会有什么问题。每次数据提取需要1次网络往返,这在应用程序处理海量结果集时会影响性能。比如每次查询数据在十万数量级,速度问题就会暴露出来。但是实际中发现,在汇总统计查询中,用户查询频繁但变动并不大,因此可以考虑借助XML获取数据来解决上述的问题。

  采用XML技术,可将查询的结果生成XML文件保存在Web服务器上,使客户端能够直接和XML文件进行交互,以节省访问数据库的资源;同时也可以将XML传送到客户端,在客户端恢复为数据集,此后就可以直接在客户端进行一些操作,而不必和服务器交互,建立非连接的数据访问以节省时间。这里采用以下的算法过程利用XML技术实现对数据库的访问。

  (1)建立数据库连接,生成查询结果数据集(DataSet);

  (2)用XmlDataDocument将查询结果集(DataSet)以XML形式保存在Web服务器的指定目录下,同时断开数据库连接;

  (3)一旦用户发送访问请求,首先查询Web服务器指定目录下是否有满足条件的XML文件,如果存在转(4),否则转(1);

  (4)创建XmlDataDocument对象,并用其Load方法加载该XML文件;

  (5)利用XPath或者XQuery查询技术,查询已加载的XML文件,生成相应的结果集。

  从上面的过程可以看出,一旦有用户发送查询请求,首先将数据库服务器中的数据转化为XML文档,保存在Web服务器上,然后查询XML文件中的数据,获取查询结果。之后如果有新的请求查询相同的记录时,可以直接从Web服务器的XML文件中提取数据而不用再访问数据库。这对于用户频繁的查询汇总操作中,优势非常明显,且效率很高。这种思想在逻辑上将数据的生成和操作分开,同时节省了和数据库服务器建立连接的时间,将其转换为对服务器端XMl文件的读取,有效地减轻了对系统数据库服务器的负荷。

  3.1.2 使用连接池

  建立Web应用程序与数据库之间的TCP连接时,DBMS需要为其分配多种资源,而在释放连接时,DBMS需要释放掉这些资源,分配和释放资源都是比较耗时的工作,因此反复建立和释放连接势必会影响整个系统的性能。实际上,大多数应用程序仅使用1个或几个不同的连接配置。这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭。为了使打开的连接成本最低,ADO.NET使用连接池的优化方法。

  连接池技术能够能重用到数据库的连接,而不是每次请求都建立新的TCP连接,新连接仅在连接池中得不到连接时才建立。当连接被关闭时,它被返回到连接池中,在那里它仍然保持与数据库的连接,与完全断开TCP连接相反。池进程保持物理连接的所有权。通过为每个给定的连接配置保留一组活动连接来管理连接。只要用户在连接上调用Open,池进程就会检查池中是否有可用的连接。如果某个池连接可用,会将该连接返回给调用者,而不是打开新连接。应用程序在该连接上调用Close时,池进程会将连接返回到活动连接池集中,而不是真正关闭连接。连接返回到池中之后,即可在下一个Open调用中重复使用。

  池连接可以大大提高应用程序的性能和可缩放性。默认情况下,ADO.NET中启用连接池。除非显式禁用,否则,连接在应用程序中打开和关闭时,池进程将对连接进行优化。

  3.2 表示层的数据显示

  对于优化B/S下的数据显示方面,主要考虑数据传输量的大小,数据传输量的大小是决定显示响应速度的必要前提,这一点是B/S的弱项。数据传输量是指在客户端Web浏览器和Web服务器之间传送的数据量。在用VS.NET开发程序的过程中,通过减少网络的通信量减少IE浏览器和Web服务器层之间的数据传数量,缩短用户感知时间。

  3.2.1 使用缓存技术

  合理有效地设计和使用缓存是优化应用系统性能的重要手段,在基于Web的支持大量用户的系统开发中,这一点尤为明显。ASP.NET" title="ASP.NET">ASP.NET中的缓存能够提供性能和伸缩性的最大效益、利用有效的缓存、可以避免Web服务器与数据库之间的网络往返,绕过占用很多资源的计算,并节省服务器资源,同时改善响应时间和等待时间。

  ASP.NET的缓存服务是一种提高服务器性能、降低服务器资源浪费的有效方法。对于安全性要求高的应用程序,采用在WEB服务器上维护缓存数据的方式可以有效地提高页面性能。ASP.NET的缓存对各个应用来说是私有的,是存储各种对象的存储器,缓存的生存周期取决于应用的生存周期,当应用重新启动时,缓存实际上已重建。

  Cache实现了最近最少使用(least-recently-used)替换算法,允许ASP.NET强制Cache清除操作——如果可用内存下降到低水平——则自动从Cache中删除不使用的项目。另外Cache支持依赖性到期特性,它能强制包括时间、键值、文件失效。其体系结构如图3所示。

  用ASP.NET内置的多级缓存功能,缓存访问过的ASP.NET页面,从而降低Web服务器的负载,并通过更高效地提供被缓存的文件而改善WEB系统的性能。ASP.NET提供了几个级别的缓存。首先,当一个ASPX程序第一次被调用的时候会被编译,编译成功之后,生成的代码会自动缓存,所以重复运行ASP.NET程序的效率会有很大的提高。除此之外,ASP.NET还提供输出缓存(也叫页面缓存)、数据缓存(也叫应用程序缓存)和碎片缓存(也叫部分页面缓存)。

  缓存提供一个简单的字典接口,以便于对象放置到缓存中并在以后使用。最简单的情况下,放置一个对象到缓存中,就如同对字典增加一个条目。在缓存策略上采用“文件和键值依赖”策略。从外部文件或者是其他缓存键值是否改变来决定本身键值是否有效。如果依赖发生改变,缓存对象将变得不可使用并从缓存中移动出来,从而更新缓冲。代码如下:

  3.2.2 避免服务器和客户端的交互

  HTTP是用于WWW客户机和服务器之间进行信息传输的协议,它是一种请求响应类型的协议:客户机向服务器发送请求,服务器收到请求后进行处理,对这个请求作出回答。Web浏览器包含了许多的HTTP请求,每一个请求对应一个小型文件,HTTP对每一个HTTP请求需要建立1个独立的TCP连接。

  因此,客户端的每次请求将会引起客户端和服务器间的一次通信,频繁的操作势必对系统的响应时间造成严重的影响。为避免不必要的TCP连接建立,通常只需在向服务器查询或更新数据时才触发客户端与服务器之间的信息交互。能在客户端执行的数据操作应尽可能的用客户端脚本(如Javascript)实现。例如,对用户输入数据的校验,应该尽量在客户端进行校验,再将数据提交给服务器。

  3.2.3 利用DTO减少远程调用" title="远程调用">远程调用次数

  在分布式架构中,相关层在物理部署上实现分离,通过网络或跨进程调用远程对象或服务。在这种分布式架构中,必须先找到远程对象位置,而且建立与远程计算机的连接,然后才能将数据串行化为字节流,然后可能进行加密,最后才能将其传输到远程计算机。远程调用需要跨越网络或进程,因此会比较慢。

  避免远程调用中固有的滞后时间问题的最佳方法是进行更少的调用,并让每个调用传递更多的数据,这可以通过定义有效的数据传输对象(Data Transfer Object,DTO)来实现层与层之间的数据传输。

  创建一个数据传输对象(DTO),用该对象包含远程调用所需要的所有数据。修改远程方法签名,以便将DTO作为单个参数接受,并将单个DTO参数返回给客户端。在调用方应用程序收到DTO并将其作为本地对象存储之后,应用程序可以分别对DTO发出一系列单独的过程调用,而不会引发远程调用开销。如图4所示。

  在图4中,DTO允许远程对象在单个远程调用中将整个客户名称返回给客户端,这就将调用次数从3次减为1次。客户端进行单个调用,然后在本地与DTO交互,而不用进行多次远程访问服务器。通过使用DTO,在单一远程调用中传输更多的数据信息,减少远程调用的次数,提高分布式调用的性能。

  4 测试结果及分析

  以上方案已在开发系统中得到实际的应用,并取得了良好的效果。为了测试以上方案的有效性,这里选取系统中有代表的页面,利用VS.NET中的ACT(ApplicationCenter Test)工具进行压力测试。在不考虑网络传输速度的情况下,分别测试原始页面和改进后的页面,得到表1详细的测试结果:

  从表1中可以看出,采用上述方案生成的页面无论是在每秒平均请求数还是平均响应时间上,都有数量级的提高,极大地提高了系统的性能,缩短了Web页面的响应时间,从而缩短用户感知延迟时间,提高用户的满意度。

 

  5 结 语

  在B/S结构的开发中,响应时间是一个很重要的指标。本文针对Web应用程序的特点,从软件处理数据的角度出发,从优化数据访问以及Web数据显示2方面提出了缩短Web响应时间方案,并利用ACT测试工具对实际应用进行压力测试,发现此方案的可行性。除此之外,还可以通过优化数据库结构的设计,合理配置应用服务器所提供的性能优化选择,合理配置编译器选项等方法对提高Web应用的总体性能。

 

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。