有关Webmail速度的释疑 - 兼谈extmail vs igenus
自extmail 问世至今,时不时都会有用户提出一些疑问:到底extmail快在哪里?怎么感觉速度还不如igenus?cgi 和php哪个快?
今天在这里做一个简单的释疑,并做一个基本的介绍,有些用词也许不太规范,部分技术见解甚至是不正确的,请见谅并指正!:-)
如何看待Webmail的速度?
Webmail是一个基于HTTP协议的web 邮件客户端,其速度大致受如下因素影响:
[b]一:网络带宽[/b]
这里主要是指客户机到webmail服务器之间的网络速度,如果一个是电信一个是网通,那么速度怎么也没办法快起来,更别谈极速了。
[b]二:web服务器响应[/b]
这里主要指web服务器(例如apache)的响应速度,从接到请求,到将结果输出给客户端浏览器,如果机器负载很高,造成响应速度很低,甚至失去响应,这也是一些高访问量的网站有时无法访问的原因,因为过载了,web server不响应了。
[b]三:webmail执行原理[/b]
这里主要是指cgi/servelet/php/mod_perl/FCGI等。
[b]CGI[/b]是相当古老的技术,每个请求都需要产生新的进程,因此其速度受fork的影响,而用perl,python等脚本编写的cgi程序速度还受加载解析器,解析器解析perl/python代码,执行等因素的影响,因此比c语言编写的cgi又要慢一大截。
[b]servelet[/b]则是指java/jsp等运行环境,jsp第一运行时进行解析编译,速度相对慢些,而第二次执行时已不需要解析,直接执行,因此速度要大幅度提升。并且可以引入各种cache机制。
[b]PHP[/b]技术主要是指流行的mod_php,其主要特点是php解析器已随apache进程的产生而加载,因此没有了解析器加载的过程,同时还可利用zend等技术缓存解析结果,因此效能和servelet类似,比cgi要快得多。
[b]mod_perl[/b]则与mod_php基本类似,因此获得的效果类似。此处略
[b]FCGI[/b]则是另外一种技术,使用的是所谓的持续化技术。解析器启动时加载,启动后驻留内存不释放,perl的fcgi程序还可以支持程序解析的缓存,因此速度上比CGI要有质的飞跃,和mod_perl/php/servelet等基本类似。而且还可以支持FCGI的分布式,扩充性很强,这是mod_php/mod_perl所不支持的。
最后说一下[b]speedy[/b],也是一种持续化的技术,但只支持本机操作。在本机上比FCGI的一般实现要灵活些。
[b]四:webmail的邮件处理能力[/b]
webmail的处理能力受其体系结构,算法设计的影响(例如解析库的效率,是否有索引等)
邮件处理能力,主要是指webmail软件处理邮件的速度,例如列表速度,解析邮件的速度,文件I/O速度,获取附件的速度。在只有小量邮件,少量用户时,例如只有一,两百封(10-20MB)的邮件,或几十上百用户,则大部分的webmail处理速度都没有可闻的区别。
邮件的数量差异:当邮件数增加到上千封,甚至上万封时,处理速度就有着极大的区别。
邮件的容量差异:如果邮件的体积是几十上百MB,处理速度也有着非常明显的区别
最后,如果webmail需要支持复杂的功能,这里也带来了一些速度变慢的因素。
[b]五:webmail界面的体积[/b]
如果一个webmail有着无比华丽的界面,那也意味着有无比巨大的图片和css/html,载入速度也非常缓慢。因此webmail界面的体积也很大程度影响着速度,而如果利用了无刷新的设计(Ajax),则可以在第一载入之后,不需要重复载入,提高了速度。
[b]六:硬件因素[/b]
webmail所使用的硬件及存储机制也是很重要的一个因素,如果使用IDE硬盘,普通的低速CPU,自然不如低寻道时间的高速SCSI磁盘,高速SATA磁盘,不如大缓存的CPU。
[b]Extmail vs igenus[/b]
两者都是基于maildir物理存储机制,并且直接操作maildir的webmail。根据上面webmail速度的制约因素,我们可以知道,在默认前提下,extmail的web响应速度不如igenus(cgi比mod_php慢),而其它绝大部分邮件操作速度都比igenus快,主要区别就是算法和结构上,igenus的索引设计较为陈旧,而extmail的索引机制相对要好一些。在大量邮件时区别更加明显。
当extmail配置成了FCGI/speedy模式后,则因cgi带来的巨大开销不复存在,页面解析速度就和php的igenus基本一致,甚至更快(因为模板引擎也支持缓存)。 呵呵,bbc有时间做次严格的测试看看。我感觉速度应该会快上很多。 [quote][b]下面是引用jklin于2006-04-03 08:44发表的:[/b]
呵呵,bbc有时间做次严格的测试看看。我感觉速度应该会快上很多。[/quote]
我之前测试过的。(用ab)
pure CGI下,3-4 hits/s
FCGI 下(template的cache没打开) 大概180hits/s
FCGI+template 的blind cache,大概210hits/s
FCGI+template blind cache + Lighttpd ,大概能到220-230hits/s
speedy没测试,不过我估计应该是差不多的。
mod_perl因为目前还不支持,也没测试过。但从数字上看,持续化/解析器预载入内存等技术
要比cgi这样落后的技术要块50-100倍。
另外一个题外话,mod_php的页面 显示速度要比mod_fastcgi要快些。当然这个只是类似
hello world 的简单程序,如果fcgi挂上负载平衡server的话, mod_php就根本不是对手了。
另外,如果挂上其他繁重的负载,情况又会变得更加复杂。
页:
[1]