作为程序开发人员,都梦想着有朝一日,能构建一个能稳定、扩展性强应用程序。当看到《构建高性能的web站点》时,感觉这本书可以帮助我们去接近这个目标:他实用性很强,从网站各个方面来讲,从网络、服务器软件、脚本语言以及到缓存、负载均衡、数据库的优化、文件共享、性能监控等都有涉及,可以让没有实际去体验这一个个场景的开发人员获得这样的经验,增长知识。
等待什么
首先让我们看一下从输入一个url到页面呈现到我们眼前,我们在等待什么?
从一个网址输入,不只是页面的一个请求,还有图片、样式、脚本等这些文件请求,每个请求又会经历一些相同的历程:数据在网络的传输(传出和传入)、服务器对请求的处理返回数据、还有本地对返回数据的渲染。虽然这些请求是并发的,但是一个网页的一个完整过程总是取决于那个最后处理完的请求。
怎么做
如果你是一个网站的构架者,你能在这三个方面做些什么??
你能让用户都在电信或联通的网络里吗,你能让用户都10M、20M的接入吗??很显然不能,但是我们可以在布置不同的服务器在电信和联通的网络和不同的区域,让不同网络和区域的用户都能以最优访问,我们可以让我们服务器的以更高的宽带接入,来减少我们这段数据的出入时间;精简页面内容和对页面、文本、图片等数据的必要的压缩,也会对减少网络的传输时间,但是如gzip等的压缩会增加两端的处理的时间,这个要根据实际情况选择了。
再说本地对返回数据的渲染,这跟用户电脑的配置、所使用浏览器的版本和浏览器本身的机制有很很大的关系,但是这都不是我们控制得了的,但是我们可以从以下几个方面来优化:减少页面http请求,通过合并图片、样式、js和浏览器缓存等,减少浏览器的处理压力,更少的请求还会减轻服务器压力和网络传输时间;精简页面内容,移除不必要的内容如.net中的viewstate这些不仅减少传输的数据,还有利于页面加载。
另外一个优化的就是服务器对请求的处理了,这个是我们可以大展拳脚的地方了。
大致可以分为以下几块:
服务器的配置,主要是硬件配置,决定了服务器的计算速度;
操作系统和服务器软件的优化,根据不同的应用程序可能需求也会不一样;
应用程序的优化,缓存是不可不说的:数据的缓存,动态内容的缓存、页面的静态化,多台服务器时缓存的共享,多台缓存服务器的时分布式缓存等;
数据库或其它非结构化的数据,存储引擎、索引等,数据库的切分、同步,读写分离等等都可以让我们提高数据库支撑更大的业务量;
页面部件的分离,对资源的不同划分到不同的服务器,数据库的服务器、图片服务器、文件的服务器、缓存服务器等,更多的请求分发时,负载均衡又是一个更重要的问题;
还有就是程序的细节,这要对语言或平台的充分的了解,优良的程序设计和高效的代码也是一个重要的因素。
除此之外
网站没可能一出来就是能支撑所有情况的,我们在不同的阶段可能会有不同的关注点,以上的任何因素在某段时间可能会为制约网站性能的最主要因素,脑子中的或图纸上的系统都不是好系统,只有经过实际检验好的系统才是良好的系统。因此对于网站来说,一个更重要的是扩展性,我们不能只做到眼前的,还应该考虑到下一步,在脑子中和现实的系统中为以后的扩展做好必要的准备。
减少视觉等待,这个可以说是一个有趣的技巧。在一个成熟系统上,让系统处理快上2秒,可以说是代价相当大或者说现阶段是不可能的,但是可以一个好的交互让用户在等待时不太焦虑进而可以轻松的多等上2秒,对系统来说是一个相当好的消息。但是同时如何设计一个好的交互,去利用用户的喜好和人性(哈哈,有点远了),这可能又是一个更高深的学问了,又可能比你去研究计算机或程序要困难了。
建议想做将军的程序员去读读这本书。