关于web性能优化的一些分享
来自:http://bbs.chinaunix.net/thread-4137545-5-1.html关于web性能优化,结合我自身的项目经历,简单总结一下:
1.DNS优化
第一次网页浏览会加载各种资源,发出很多动态请求,从输入地址框DNS解析主域名就要开始优化了,好的或者说企业级的DNS提供商可以大大缩短各个地域的本域名dns解析时间。貌似html5 还有一些浏览器支持dns 预加载的东西,可以加速网页其他资源域名解析速度。
2. CDN & BDN
总的特点是横向负载,CDN 内容负载一些静态请求,BDN业务负载一些动态请求。
关于CDN的工作方式,
A需要向CDN服务器单独上传静态资源.
B.CDN server 主动向后端主站发请求,会缓存静态请求,对于这种情况后端主站可以有单独的图片服务器,或者用nginx的 proxy_cache或者squid 功能做一个后端的静态缓存,降低后端服务器IO和部分网络负载。
CDN 可以自建或者购买CDN服务,甚至可以只是同一台主机,同一个域名的别名,其效果就是充分利用浏览器可以为单个域名同时并发6个请求的限制,比如搞几个img0.xx.com img1.xxx.comcss.xx.com js.xxx.com 等等 ,此种情况最好结合DNS优化,效果会更好。
关于BDN的工作原理和效果跟CDN类似,由于动态请求涉及业务逻辑,比如用户各种状态,session,数据共享等等,如果采用多这个集群还要考虑消息队列机制来保持数据一致性,所以实现起来相对复杂一些,但是对于大型应用比如淘宝规模的,BDN负载还是很必要的。
3. BigPipe & 各种前端技术
首先保证,静态资源Etag,保证静态资源不需要重复加载。建议在1和2优化的基础上,因为3的优化影响到前端业务实现的方式,程序开发工作量大,如果是起初就在3的基础上做还可以,否则已经成型的网站最后单独做3的优化时,面临各种业务测试任务。
优化要点包括:
1.分拆业务到ajax请求,json请求+js模板函数更佳
2.css 优化减小css体积, 将css调用的样式图片整合到1张图片减少请求数,或者只加载页面所需的css样式
3.js 优化减小js文件调用以及体积,只加载所需的js
4.页面输出流采用bigpipe模式,不需要等整个页面在后台跑完,再输出给前端,这样很多已完成部分渲染的静态资源可以提前加载,而不是等到整个页面输出完之后。
4.后端服务优化
1.负载 均衡
请求层server本身通过增加节点来负载,比如多搭建几个lnmp,或者lamp节点来做前端load balancer的负载
数据读写层DB比如mysql,本身支持负载比如master/slave 或者cluster集群负载,还有一些nosql的比如mongodb, redis,memcache,couchbase都支持集群负载,一般用过haproxy来做负载均衡器。
2.业务优化
比如大型DB需要分拆表,甚至可以分拆表到不同的server像淘宝。在合适的地方使用高速缓存比如memcache,redis等等,尽可能减少数据层的读写。
还有就是比如我是php程序员,所涉及也是php的web编程比较多,但有些业务可能php本身不擅长,所以可以考虑采用其他语言来实现,比如nodejs的异步IO特性,用来做实时消息队列,python已存在各种高效库用起来,要比php重写的类似功能用起来估计更稳定高效。业务层的深入优化需要根据详细的业务本身来定制,这已经超出了web性能优化的范畴。
我能想到的就这四点,还请高手指教。 :)
页:
[1]