如何提高网站的性能
阅读目录
- 硬件方面
- 负载均衡
- Web服务器方面 - CDN
- Web服务器方面 - 独立的图片服务器
- Web服务器方面 - Gzip 压缩
- Web服务器方面 - 缓存
- 减少HTTP请求
- HTML 静态化
- HTML 优化图片
硬件方面
购买更多的服务器, 使用高性能的CPU 和内存, 和带宽
Web服务器方面 - 负载均衡
使用load banance 来分担负载
Web服务器 CDN
CDN的全称是Content Delivery Network,即 内容分发网络 用户“接近”你Web服务器的程度会影响响应时间。把内容部署在多个、地理位置分散的服务器上,会使页面加载的速度从用户角度看更快。但是我们应该从哪里开始?
作为实现地理位置分散内容的第一步,不要试图重新设计你的Web应用程序,使它运行在一个分布式的结构中。根据应用程序,改变结构,包括跨服务器同步会话状态和复制数据库事务等,这些艰巨的任务。根据不同的应用,改变结构可以包括跨服务器的位置同步会话状态和复制数据库交易等艰巨任务。尝试减少用户和内容之间的距离,可以延迟,或从不通过,这是应用程序结构的步骤。
记住,最终用户的80-90% 响应时间花费在下载所有页面的组件:图像、CSS、JS、Flash 等,这是提高性能的黄金法则。最好先分散你的静态内容,如图像、CSS、JS、Flash 等,而不是重新设计应用程序结构艰巨的工作开始。由于内容发布网络,不仅大幅度减少了响应时间,而且简化了应用程序。
一个 CDN 是一个处于多个位置的 Web 服务器的集合,更有效地向用户发送内容。选择哪个服务器发送内容给特定用户通常是基于一个网络评估。例如,选择最少的网络跳数或最快的响应时间。
一些大型的互联网公司拥有自己的 CDN,而通过 CDN 服务提供商,如 Akamai Technologies, EdgeCast 或 level3,成本则很高。对于刚成立的公司和私人站点,一个 CDN 服务的成本可以让人望而却步,但当你越来越受关注,并全球化时,一个 CDN 是必需的,以便快速响应。以 Yahoo! 为例,他们把静态内容从应用程序中移到 CDN(上面提到 CDN 服务提供商,以及他们自己的 CDN)上,提高了最终用户 20% 以上的响应时间。使用 CDN 是一个只需要相对简单地修改代码,显著改善站点速度的方法。
Web服务器 - 使用独立的图片服务器
大家知道,对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的、甚至很多台的图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃。
在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持、尽可能少的LoadModule,保证更高的系统消耗和执行效率。
Web服务器 - 最大限度减少HTTP请求
最终用户(the end-user)80%的响应时间花费在前端(the front-end)。大部分时间用来下载页面中的所有组件:图像、CSS、JS、Flash 等。因此,反过来,减少页面组件的数量,就可以减少渲染(呈现)页面所需的 HTTP 请求的数量。这是加快页面的关键。
HTMLWeb服务器 - Gzip压缩
在Web服务器方面, 启用Gzip 可以减少大概 大大减少网络传输的数据量 具体原理请参考 HTTP协议 (三) 压缩
Web服务器 - 缓存
在Web服务器方面, 客户端的缓存,能大大减少网络传输的数据量, 具体原理请参考 HTTP协议 (四) 缓存
HTML静态化
其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化、有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。
同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现。比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储在数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。
ASP.NET 方面
启动缓存机制,输出页面缓存,用户控件缓存
禁用Viewstate 来减少所要传输的数据
避免在回传事件中为控件填充数据
避免使用服务器控件
数据库层的性能
使用存储过程
数据库缓存
尽晚的打开数据库连接,尽早的关上数据库连接
HTML方面 优化图片
HTTP Archieve有个统计,图片内容已经占到了互联网内容总量的62%,也就是说超过一半的流量和时间都用来下载图片。从性能优化的角度看,图片也绝对是优化的热点和重点之一
图片优化既是一门艺术,也是一门科学,图片优化是一门艺术,是因为单个图片的压缩不存在最好的特定性方案,而图片优化之所以是一门科学,是因为许多开发得很出色的方法和算法可以明显减小图片的大小。要找到图片的最优设置,需要按照许多维度进行认真分析:格式能力、编码数据内容、像素尺寸等。
颜色丰富的照片,JPG是通用的选择
人眼的结构很适合查看JPG压缩后的照片,可以充分的忽略并在脑中补齐细节 JPG在压缩率不高时保留的细节还是不错
如果需要较通用的动画,GIF是唯一可用的选择
GIF支持的颜色范围为256色,而且仅支持完全透明/完全不透明
GIF在显示颜色丰富的动画时可能出现颜色不全、边缘锯齿等问题
如果需要清晰的显示颜色丰富的图片,PNG比较好
PNG-8能够显示256种颜色,但能够同时支持256阶透明,因此颜色数较少但需要半透明的情景(如微信动画大表情)可以考虑PNG-8
PNG-24可以显示真彩色,但不支持透明,颜色丰富的图片推荐使用(如屏幕截图、界面设计图)