http://blog.me115.com/2013/01/276
进行优化前,关键是剖析当前的web性能,找到性能瓶颈,从而确定最需改进的地方;如果精力有限,首先将精力放在能明显提升性能的改进点上;
《高性能网站建设指南》提出了一个性能黄金法则:
只有10%-20%的最终用户响应时间花在了下载HTML文档上;其余的80%-90%的时间花在了下载页面中的所有组件上。
第一步:后台优化,启用页面缓存;
实验站点首页后台逻辑并不复杂,不超过10个Sql查询,通过查看时间线,本站在获取HTML文档时,花费的时间不到总响应时间的20%,优化之前没有使用缓存,所有的数据都是从数据库读取,这里,我们使用静态页面缓存,将首页整个页面完全的存放在缓存中(关于YII静态页面缓存的使用,参考这里);
第二步,DNS域名解析加速:
DNS解析是用户访问站点的第一步,在此之前,你的网站无法做任何事情;
站点的DNS解析时间不应该超过500ms,如果站点原始DNS解析时间过长,就该考虑考虑使用第三方解析加速服务;
第三步:使用CDN加速;
采用第三方CDN加速,时间缩短到2.1s;从下图中看到主要的耗时在于并行下载的个数有些低,如果能够提升并行下载量的个数,那么整体加载时间就会降低;
注:个人建议,启用CDN最好放在最后一步,等将站点本身的优化都做完了之后,再启用CDN可以明显的看到优化效果。(开启CDN后,由于有CDN缓存的原因,观测站点的本身的优化就不是很方便了);
第四步,采用多台服务器提高并行加载量:
原理:一个浏览器对与同一域名的并行下载的个数默认是2个, HTTP.1.0中规定的是4个。这样,我们可以使用不同的域名来提升下载的速度;
观察上图中的下载数量,第一次并行下载的个数是4个,初始认为是浏览器对于同一个域名来源的下载所限导致;于是考虑将部分静态文件分别放在不同的服务器上;通过把css和js放在不同服务器上;结果并不理想,发现并未提高速度。
想到在哪曾看到过,浏览器必须得把放在页头的css和js下载完成了之后才会开始下载其它的静态组件;
第五步,合并脚本和样式表;
本站首页使用了2个js和3个css。如果采用朴素复制的方式,将js和css都分别整合到一个文件中,不但操作麻烦,而且不方便后期的管理。网络上有不少合并的工具,本站采用了CSS和JS合并优化工具-minify(下载地址:http://code.google.com/p/minify/)。如果使用的YII框架,更有YII整合版(minscript Extension),简单几步的配置,就自动将页面所有的js和css文件合并;
第六步,压缩css/js/html/xml;
不同的web服务器设置方式有所差别,本站使用的Linux/apache,
在web根目录下的.htaccess文件中添加以下代码即可:
#set compress
<ifmodule mod_deflate.c>
AddOutputFilter DEFLATE html xml php js css
</ifmodule>
第六步,最大化的减少HTTP请求;
添加Expires头, 启用静态内容缓存,将jpg、gif等文件缓存;
附上本书的目录:
绪言A:前端性能的重要性
第1章:规则1——减少HTTP请求
第2章:规则2——使用内容发布网络
第3章:规则3——添加Expires头
第4章:规则4——压缩组件
第5章:规则5——将样式表放在顶部
第6章:规则6——将脚本放在底部
第7章:规则7——避免CSS表达式
第8章:规则8——使用外部JavaScript和CSS
第9章:规则9——减少DNS查找
第10章:规则10——精简JavaScript
第11章:规则11——避免重定向
第12章:规则12——移除重复脚本
第13章:规则13——配置ETag
第14章:规则14——使AjaX可缓存
第15章:析构十大网站
页面大小、响应时间、YSlow等级
http://blog.me115.com/2014/04/525
流量超过1Gbps
超过1Gbps时,这就达到PC路由器的极限;
Hatena使用的标准硬件,实测结果表明,其界限大致是30万包/秒;按照平均包长度为300字节换算,也就是1Gbps;而千兆以太网的界限也是1Gbps,从内核性能上来看,性能才极限也是30万包/秒;
对策:使用多个PC路由器 / 或是使用成品路由器(cisco)
Hatena使用的标准硬件,实测结果表明,其界限大致是30万包/秒;按照平均包长度为300字节换算,也就是1Gbps;而千兆以太网的界限也是1Gbps,从内核性能上来看,性能才极限也是30万包/秒;
对策:使用多个PC路由器 / 或是使用成品路由器(cisco)
同一子网超过500台主机
将500台以上主机放在一个子网内,就会出现许多问题,丢包现象频繁;
500台主机的极限,具体说是交换机的ARP表到极限;
同时,广播包的流量导致丢包;
在同一子网内放置大量主机的话,广播包也会逐渐增加,而接收广播包就会消耗CPU资源;
eg:极端情况:在主机过多的子网内,插上网线,就能观察到CPU负载上升;
对策:
网络架构的层次化:
三层架构:最小的为访问层(access area)【100-200台】、上面为分发层(Distribution Area)【1000台】、最上面为核心层(core Area)或OSPF(Open shortest path first)【全体几万台左右】
500台主机的极限,具体说是交换机的ARP表到极限;
同时,广播包的流量导致丢包;
在同一子网内放置大量主机的话,广播包也会逐渐增加,而接收广播包就会消耗CPU资源;
eg:极端情况:在主机过多的子网内,插上网线,就能观察到CPU负载上升;
对策:
网络架构的层次化:
三层架构:最小的为访问层(access area)【100-200台】、上面为分发层(Distribution Area)【1000台】、最上面为核心层(core Area)或OSPF(Open shortest path first)【全体几万台左右】
全球化 – 一个数据中心的极限
当站点具有足够的影响力时,用户就来自全球各地;跨太平洋的访问,额外的开销是巨大的;这时,一个数据中心就成为了瓶颈;
对策:使用CDN、推荐Amazon cloudfront服务器;将访问频率高的文件上传到Amazon S3(Amazon simple storage servi
对策:使用CDN、推荐Amazon cloudfront服务器;将访问频率高的文件上传到Amazon S3(Amazon simple storage servi