2011-11-24 101 views
25

我有一个高流量的网站,我需要确保我的网站足够快,以快速显示我的网页给每个人。PHP网站优化

我搜索在谷歌关于速度和优化许多文章和这里是我的发现:

  • 缓存的页面
  • 将其保存到磁盘

在内存中缓存的页面:

这是非常快,但如果我需要改变我的网页的内容,我必须从缓存中删除它,并且然后将该文件重新保存在磁盘上。

保存到磁盘

这是很容易维护,但每次访问页面时我必须在磁盘上读取。

我应该使用哪种方法?

+3

你应该添加更多关于你的网站的细节:os,server,cms?...etc – soju

+0

我使用apache + php + mysql + centos - 没有cms或框架 – ana

+0

你有什么类型的托管?共享?专用? –

回答

40

月& IDM是正确的,但这里是如何:

缓存(页或内容)对于性能来说非常重要。无论您的内容是静态还是动态,您向数据库或文件系统请求的最少调用都会更好。

,如果你需要运行动态内容,您可以使用PHP加速器:

我的建议是使用Alternative PHP Cache (APC)

下面是一些标杆:

What is the best PHP accelerator to use?

PHP Accelerators : APC vs Zend vs XCache with Zend Framework

Lighttpd – PHP Acceleration Benchmarks

要缓存内容,甚至可以使用以下页面:MemcachedRedis

的Memcached: 免费&开源的,高性能的,分布式内存对象缓存系统,通用的性质,但拟用于减少数据库负载,加快动态Web应用程序。 Memcached是内存中的键值存储,用于从数据库调用,API调用或页面呈现结果中为任意数据(字符串,对象)创建小块。

Redis Redis是一个开源的高级键值存储。它通常被称为数据结构服务器,因为密钥可以包含字符串,哈希,列表,集合和有序集合。

两者都是缓存内容或变量的非常好的工具。

下面是一些基准,你可以选择你喜欢哪一个:

Redis vs Memcached

Redis vs Memcached

Redis VS Memcached (slightly better bench)

On Redis, Memcached, Speed, Benchmarks and The Toilet

ÿ您可以同时安装也VarnishnginxG-Wan

光油: 光油是专为内容较多的动态网站的HTTP加速器。与其他HTTP加速器相比,如开始生命作为客户端缓存的Squid或主要是原始服务器的Apache,Varnish从最初设计为HTTP加速器。

nginx的 的nginx(发音?发动机-X?)是一个轻量级的,高性能的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,下一个类似BSD许可证授权。它运行在Unix,Linux,BSD变体,Mac OS X,Solaris和Microsoft Windows上。

g-wan G-WAN是一个Web服务器,其ANSI C脚本和Key-Value存储性能优于所有其他解决方案。

下面是一些基准,你可以选择你喜欢哪一个:

Serving static files: a comparison between Apache, Nginx, Varnish and G-WAN

Web Server Performance Benchmarks

Nginx+Varnish compared to Nginx

Apache, Varnish, nginx and lighttpd

G-WAN vs Nginx

+6

我使用nginx + redis,它们超快速+1 – Gabriel

4

你有一个好主意,这是接近我自己。如果我有一个100%静态的页面,我将保存它的html版本并将其提供给用户,而不是每次都重新生成内容。这在一些情况下可以同时保存mysql查询和多个io操作。每次我进行一些更改时,我的管理界面都会简单地删除html文件并重新创建它。

此方法已被证明在我的服务器上快100倍左右。

+0

这是最好的缓存方法之一,只需重新创建静态html页面的变化。 –

+2

这个过程可以很容易地自动化。 –

1

我可以添加:

  • 缓存一切你能

  • 最小数量的包括

  • 使用加速器

请调查,是什么让你的网站慢。不要忘记YSlow和类似的东西,他们可以帮助你很多。

此外,如果你有大量计算,你可以写PHP扩展他们,但我不认为这是你的情况

3

网站性能的一个大问题是“您是否提供静态页面,或者您是否提供动态页面?”。

静态页面

加快静态页面的最佳方法是对其进行缓存您的网站之外。如果你能负担得起,从CDN(Akamai,Cotendo,Level3)提供服务。在这种情况下,流量不会触及您的网站。有几种方法可以控制缓存 - 从固定持续时间到标准的HTTP缓存指令。

即使您无法从CDN提供HTML,将图片,JavaScript和其他静态资产存储在CDN上可以加速您的网站 - 您可以使用像Amazon这样的云服务。

如果您无法承受您的HTML的CDN,那么您可以使用自己的缓存代理层,如Zeus建议的那样。我用清漆取得了很好的效果。理想情况下,您可以在自己的硬件上运行缓存代理 - 但可以在现有服务器上运行它。

动态网页

动态网页更难缓存 - 那么你需要把精力集中在自己的网页尽可能高效。这基本上意味着寻找瓶颈 - 在大多数系统中,瓶颈是数据库(但绝不总是)。

如果您确信自己的瓶颈是数据库,那么缓存选项有多种方法 - 您可以缓存HTML的“片段”,也可以缓存数据库查询。使用加速器有助于此 - 我不会从头开始创建一个。这可能意味着重新设计(部分)您的应用程序。

2

您必须首先对您的网站进行简介。

而不是疯狂猜测一个人必须确定某些瓶颈,然后解决某个问题。

Cahing不是一颗银子弹,也不是优化的同义词。
有时缓存不适用(例如广告),有时它不会有任何帮助,因为网站缓慢的原因可能在某个不相关的位置。
您的网站可能会耗尽内存。所以,内存缓存会让事情变得更糟。

我不能相信某人有一个高流量的网站,并说nmot一个先前的分析的话。你怎么能知道它的内部结构? CPU负载,内存负载,磁盘I/O等。