PHP网站优化

时间:2011-11-24 14:24:32

标签: php performance caching optimization

我的网站流量很高,我需要确保我的网站足够快,以便快速向所有人显示我的网页。

我在Google上搜索了很多关于速度和优化的文章,这是我发现的:

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

在内存中缓存页面:

这非常快,但如果我需要更改页面内容,我必须将其从缓存中删除,然后将文件重新保存在磁盘上。

将其保存到磁盘

这很容易维护,但每次访问页面时我都要在磁盘上阅读。

我应该选择哪种方法?

5 个答案:

答案 0 :(得分:41)

Jan& 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的: 免费&amp;开源,高性能,分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态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

<强>清漆: Varnish是一个HTTP加速器,专为内容丰富的动态网站而设计。与其他HTTP加速器(例如Squid,它开始作为客户端缓存)或Apache(主要是源服务器)相比,Varnish从头开始设计为HTTP加速器。

<强> nginx的 nginx(发音为?engine-x?)是一种轻量级,高性能的Web服务器/反向代理和电子邮件(IMAP / POP3)代理,在类似BSD的许可下获得许可。它可以在Unix,Linux,BSD变体,Mac OS X,Solaris和Microsoft Windows上运行。

<强> G-WAN G-WAN是一个带有ANSI C脚本和键值存储的Web服务器,其性能优于所有其他解决方案。

以下是一些基准测试,您可以选择自己喜欢的基准:

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

答案 1 :(得分:4)

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

事实证明,这种方法在我的服务器上快了大约100倍。

答案 2 :(得分:3)

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

静态页面

加速静态页面的最佳方法是将它们缓存在您的网站之外。如果你有能力,可以从CDN(Akamai,Cotendo,Level3)为他们服务。在这种情况下,流量永远不会到达您的网站。有几种方法可以控制缓存 - 从固定持续时间到标准HTTP缓存指令。

即使您无法通过CDN提供HTML,在CDN上存储图像,javascript和其他静态资产也可以加速您的网站 - 您可以使用像亚马逊这样的云服务。

如果您无法承担HTML的CDN,您可以使用自己的缓存代理层,正如Zeus所建议的那样。我在Varnish上取得了不错的成绩。理想情况下,您可以在自己的硬件上运行缓存代理 - 但您可以在现有服务器上运行它。

动态网页

动态页面难以缓存 - 因此您需要专注于使页面本身尽可能高效。这基本上意味着寻找瓶颈 - 在大多数系统中,瓶颈是数据库(但绝不是总是如此)。

如果你确信你的瓶颈是数据库,有几种方法可以缓存选项 - 你可以缓存HTML的“片段”,或者你可以缓存数据库查询。使用加速器有助于此 - 我不会从头开发一个。这可能意味着重新构建(部分)应用程序。

答案 3 :(得分:2)

您必须先分析您的网站。

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

Cahing不是银弹,也不是优化的同义词 有时缓存不适用(例如广告),有时候它没有任何帮助,因为网站缓慢的原因可能在某些不相关的地方。
您的网站可能内存不足。因此,内存缓存会使事情变得更糟。

我无法相信有人拥有高流量网站,并且说了之前的分析。你怎么能不知道它的内部结构呢? CPU负载,内存负载,磁盘I / O等。

答案 4 :(得分:1)

我可以补充一下:

  • 缓存您可以使用的所有内容

  • 最小化包含数量

  • 使用加速器

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

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