UML软件工程组织

 

 

AJAX的适用范围以及对服务器的性能影响
 
作者:kml 来源:赛迪网技术社区
 

本文由浅之深的阐述了AJAX的适用范围以及对服务器的性能影响

AJAX热了也有两三年了,它对WEB带来革命性的改变以及对为用户带来的前所未有的体验感受是毋庸置疑的。虽然AJAX会给WEB应用程序带来很多好处,但是在AJAX应用用在什么地方,怎么用仍然需要认真考虑,千万不可以滥用。

首先阐述几个老问题:

第一个老问题,由于AJAX需要javascrip的支持,另外还需要用到xmlhttp对象,所以对于浏览器的兼容性需要考虑。可喜的是,市面上决大多数的浏览器都已经支持xmlhttp以及javascript。到目前,我们几乎可以最小程度的考虑兼容问题,但并不代表可以忽略它,毕竟不同的浏览器执行相同客户端代码会产生不同的效果。

第二,用户的习惯性,很多用户习惯与使用传统的方式来与服务器进行交互,虽然他们也许已经厌倦,但是习惯就是习惯,突然出现一种新的方式的时候反而会让他们不知所错。AJAX不需要刷新浏览器,因此在很多情况下用户执行一个操作后发现浏览器并没什么动静会感到很迷茫,特别是当网络速度慢的时候,用户的一个请求需要很长时间才能反应,在等待的这段期间,用户也许会认为WEB有问题关掉浏览器或则再做别的什么事情。另外,用户会习惯于浏览器提供的一些功能,比如前进、后退、刷新、停止,这些功能是用户会经常并习惯用到的,当采用AJAX的时候会导致这些功能多失效,当然现在有很多人都写出了解决的方法,网上有很多这些解决方案的文章。

另外还需要注意的一个问题是对服务器的性能的影响。

AJAX异步请求,这个方式会带来一个新问题。传统方式中,对于一个用户而言用户每对服务器进行一次请求需要等待服务器做出响应后才能对服务器进行另一次请求,这样后面的请求能确保是在上一个请求执行完以后处理的。但是AJAX打破了这种束缚,一个用户就可以快速的连续的执行多次请求,相对于传统方式来说,这会对服务器提出更高的要求以及对程序设计者带来更大的挑战。通常情况下,应该尽量避免这种情况,例如sina的评论页,分页的拖动条采用的就是异步请求的方式,用户拖动游标可以很方便的定向到需要的分页,但是在拖动的过程中,游标每到一个分页点都会向服务器请求相应的数据,如果用户以一个特定的速度将游标拖动到第10页,那么服务器将会有9次的请求是多余的,如果这9次多余的请求都让服务器执行了读取数据库的工作,那么这将会浪费大量的服务器资源。如果用户发现第10页没有他想要的东西,于是又移动到第9页,服务器又将请求相应的数据,但是实际上服务器在曾经获取过同样的数据,如果这样的事发生在现实的生活中也许你就会觉得这样真的很多余很浪费。

OK ,还是以分页为例,如果我们不用拖动条,按照以前的分页思路“所得及所需”,每次请求不同的页只获取该页的数据,并使用AJAX给用户更好的体验感受。这样好象就合理了,因为以前大家都这么做,但是实际上并不是最合理的方法。通常情况下,用户最喜欢看的是前3页,这3页被反复请求的可能性是最大的。在传统模式中, 由于不管怎么样都会回送服务器处理,所以在分页思路上提出了“所得及所需”的说法。但是如果在使用AJAX的时候还用这样的思路就稍显死板。既然都使用了AJAX那么很能确定的是你的用户需要支持javascript,那么何不在客户端再分页呢?前面说到,用户最喜欢的前3页,假如,用户需要从第1页读到第3页,如果是“所得及所需”,那么不管用没用AJAX,用户在读到第3页的这个过程中都需要请求3次服务器。

我们来比较一下这两种情况(假设没页10条数据):

1、产生3次请求+打开3次数据库+每次读取并传送10条数据的数据量

2、产生1次请求+打开1次数据库+每次读取30条数据并传送

情况2比情况1少打开2次数据库,上执行2次数据库查询,少2次请求,多20行的查询数据量

很明显,在这个过程中第2中情况下,用户将会等待更少的时间,并且服务器也会做更少的处理。

这就是我所提出的新的分页方式,一次性读取出用户将会多次请求的数据,然后在客户端进行分页。用户在第一次请求的时候获得更多的数据,然后在通过客户端处理,这样在用户从第1页读到第3页的这个过程中不需要再请求服务器,前3页的切换会变得更方便,也会减轻服务器的负担。唯一的坏处很明显是用户第一次请求会等待稍微长一点,但是多20条数据的查询量和传送量比起页面切换所节约的时间来说是微不足道的,另外别忘了AJAX,利用它我们可以让用户感觉不到这多的20条数据的处理量。

利用AJAX可以为用户带来很好的用户体验,但处理的不好的话会导致服务器承受更大的负担,同样处理得好的话,可以减轻服务器多余的负担,具体情况就看怎么用了。

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号