IT技术博客大学习 共学习 共进步

Web性能优化中的CPP方法

搜索技术博客-淘宝 2010-12-26 21:09:57 浏览 3,361 次

    毋庸置疑,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的同时进行后端的计算,完成后将页面输出给用户。这种做法能够一定程度上减少用户等待时间,改善用户体验。在慢速网络的条件下,用户也能够很快地看到搜索结果页的页头和搜索框,以及部分结果。而不是面对一张空白页面等待结果。

    以上就是我们对于性能优化的一些总结。欢迎对此感兴趣的同学交流探讨。

建议继续学习

  1. WEB系统需要关注的一些点 (阅读 17,404)
  2. 30分钟3300%性能提升――python+memcached网页优化小记 (阅读 13,581)
  3. 基于SSD的数据库性能优化 (阅读 8,663)
  4. jQuery性能优化指南 (阅读 8,645)
  5. Buffer和cache的区别是什么? (阅读 7,841)
  6. 谈冷热数据 (阅读 6,882)
  7. 一次简单C程序的性能优化 (阅读 6,684)
  8. Linux操作系统中内存buffer和cache的区别 (阅读 6,340)
  9. mysql sql 百万级数据库优化方案 (阅读 6,002)
  10. Twitter架构图(cache篇) (阅读 5,981)