Web性能优化中的CPP方法
毋庸置疑,Web性能优化是最近几年非常热门的话题。从Yahoo!在2006年推出YSlow以及相应的14的军规,到今年领军人物Steve Souder提出WPO的概念。几年时间里,网站性能重要性的概念已经深入人心,除一线的工程师,包括产品经理以及管理层纷纷加入其中,推进页面性能优化。大家普遍认为:性能好的网站,能吸引更多的用户,提供更好的用户体验,增加收入,并且降低成本。
那么如何才能做好性能优化工作?Steve的两本书:《High Performance Web Sites》(中文版:《高性能网站建设指南》)和《Even Faster Web Sites》(中文版:《高性能网站建设进阶指南》),讲述了Web性能方面的最佳实践以及后面的研究和现实效果,可以说这个领域的葵花宝典。淘宝搜索结果页践行其中的最佳实践,不断总结优化,取得了明显的成果。基于这些实际的工作,我们总结出来性能优化简单有效的CPP方法和大家分享。
Cache
Cache是任何大规模系统必须考虑的一个问题,其基本依据是从Cache中获取数据性能上要远优于重新计算。基本模式是Miss -> Store -> Hit。如下图所示:
基本步骤:
首先检查Cache中是否有对应的数据;如果没有,请求后端,获取数据后将数据缓存起来;返回结果;如果命中,直接从cache 中返回数据。通常情况下,使用Cache能够大幅提升系统的性能,降低后台数据库的压力。淘宝目前很多系统都在使用Memcached和Tair.更多内容可参见对应的官方网站:
Memcached: http://memcached.org/Tair: http://code.taobao.org/project/view/2/需要特别指出的,Cache不是万能钥匙,并非适用所有的场景。使用时具体分析业务需求,关注Cache大小和命中率等指标。
Parallelism
为了更好的用户体验,一个页面要尽可能地展示更多的相关信息,这种趋势被称为“Mashup”。以淘宝搜索结果页为例,页面中要展示宝贝搜索结果、相关搜索、产品搜索等多个模块的数据。如果按照传统串行化的做法,依次请求每一个后台模块,必然将大幅增也页面延迟。如果能够同时请求这些后台接口,做到并发访问,将大幅提升页面的性能。
并发的方法有很多。玄悲同学在这篇文章给出了使用Multi CURL实现并发的方法,供大家参考。此外,Facebook在今年推出了革命性的BigPipe技术,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行。这是类似于大多数现代微处理器的流水线执行过程:多重指令管线通过不同的处理器执行单元,以达到性能的最佳,也有很大的借鉴意义。
Prediction
性能优化关乎用户体验,其中很重要的一个工作就是度量(Measuring),究竟页面要多块才能满足用户的需求?如果有时候受客观条件限制,不可能做到与生俱来的快,有什么办法来优化?这个问题有点像排兵布阵,很多情况下,我们需要浏览器的特性,做到分段输出。让用户尽可能早地看到页面的内容,降低用户首次交互所需要的等待时间(TTL,Time to Interaction)。
以淘宝的搜索结果页为例,我们收到用户的查询请求后,简单校验判断后,就开始向浏览器发送页头等信息,降低The First Byte Time。在客户端下载页头HTML和JS、CSS的同时进行后端的计算,完成后将页面输出给用户。这种做法能够一定程度上减少用户等待时间,改善用户体验。在慢速网络的条件下,用户也能够很快地看到搜索结果页的页头和搜索框,以及部分结果。而不是面对一张空白页面等待结果。
以上就是我们对于性能优化的一些总结。欢迎对此感兴趣的同学交流探讨。
建议继续学习:
- WEB系统需要关注的一些点 (阅读:14114)
- 30分钟3300%性能提升――python+memcached网页优化小记 (阅读:12134)
- 基于SSD的数据库性能优化 (阅读:7417)
- jQuery性能优化指南 (阅读:7327)
- Buffer和cache的区别是什么? (阅读:6839)
- 谈冷热数据 (阅读:5763)
- 一次简单C程序的性能优化 (阅读:5600)
- Linux操作系统中内存buffer和cache的区别 (阅读:5318)
- mysql sql 百万级数据库优化方案 (阅读:5061)
- 学习:一个并发的Cache (阅读:4988)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:见素 来源: 搜索技术博客-淘宝
- 标签: Cache CPP Parallelism Prediction 优化
- 发布时间:2010-12-26 21:09:57
- [54] android 开发入门
- [53] IOS安全–浅谈关于IOS加固的几种方法
- [51] Oracle MTS模式下 进程地址与会话信
- [51] 图书馆的世界纪录
- [50] 如何拿下简短的域名
- [50] Go Reflect 性能
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 【社会化设计】自我(self)部分――欢迎区
- [40] 程序员技术练级攻略
- [31] 视觉调整-设计师 vs. 逻辑