加速一个php网站

时间:2009-11-28 15:53:43

标签: php

加速php网站的最佳方法(方式?)以及使用这种或那种方式的速度有多快?

6 个答案:

答案 0 :(得分:4)

PHP实际上不是那种可以进行微优化的语言,或者只是单独处理代码。真的没有意义。虽然PHP不是特别快,但PHP本身很少成为给定网站的瓶颈。

在修复之前,您需要解决瓶颈问题。有许多共同的瓶颈,有共同的解决方案。鉴于细节很少,很难概括,但有很多性能提示适用于大多数网站。

第一个好看的地方实际上是在客户端,而不是服务器端。您的网页有多大(包括图片,CSS,JavaScript等)?单个页面视图需要多少HTTP请求?使用类似Firebug(以及Firebug的YSlow附加组件)来查看页面实际加载的时间长度以及页面的哪些位导致问题。一些一般提示:

  • 找出缩小CSS和JavaScript的方法 - 删除任何不需要的东西,然后通过YUI Compressor等工具运行其余的工作。
  • 如果您有多个CSS和JavaScript文件,请尝试将它们合并为一个文件。
  • 尽可能优化所有图像,并查看是否可以使用CSS精灵或类似文件将其中任何一个合并到一个文件中。 PunyPNG适用于无损图像。一个像样的JPEG编码器(不是Photoshop)适合拍照。
  • 将CSS移至页面顶部,将JavaScript移至底部,以便浏览器在JavaScript下载完成之前呈现页面。
  • 确保所有CSS,JavaScript和HTML都经过压缩。
  • 确保您使用了适当的缓存 - 如果文件没有更改,重新下载就没有意义了。

一旦您将客户端放在一边,您可能必须将注意力转移到服务器端。

安装操作码缓存,如APC,XCache或Zend Optimizer。它很容易做到,并且总能提供一些改进。完成后,对页面进行概要分析,找出实际花费的时间。

更有可能的是,您将花费大部分时间等待数据库返回结果。所以,至少:

  • 确定哪些查询花费的时间最长,然后先处理它们。但是请使用你的头 - 在没有人看到的管理页面上花费五秒钟的查询不如在头版上花费一秒钟的查询那么重要。
  • 确保您的查询使用适当的索引。任何常见查询都不需要进行全表扫描。某些类型的排序或分组可能无法使用索引 - 尽量避免使用索引,或修改查询以便它可以使用索引。
  • 确保您的查询未使用临时表。
  • 使用EXPLAIN关键字 - 它非常有用。
  • 调整数据库服务器本身。 MySQL通常没有针对性能进行优化。

完成后,通常最好开始研究如何使用缓存。加速PHP代码的最佳方法是减少它必须完成的工作量。

  • 确保数据库的查询缓存正常运行。
  • 使用Memcached之类的东西来存储常用的结果,而不是从数据库中获取它们。
  • 如果你有足够的内存,请尝试将所有内容保存在Memcached中,只有在缓存中没有内容时才使用数据库。
  • 如果您有大量的动态页面,但所有用户都相同,请尝试缓存这些块。例如,如果两个用户正在查看文章,那么每个用户的文章本身将完全相同,即使页面的其余部分不是这样。为文章生成HTML,然后将其放入缓存中。
  • 如果您有许多未经过身份验证的用户,那么他们完全可能会看到完全相同的页面。查看上述文章的两个未经过身份验证的用户不会只看到相同的文章 - 他们会看到相同的页面,直到登录链接。设置PHP脚本,以便可以使用HTTP缓存标头(检查上次修改日期,如果未更改,则返回304 Not Modified)。完成后,在网络服务器前面放一个Squid反向代理,然后让Squid从它的缓存中提供页面。

在那之后,一般的方法是开始使用更多的服务器,问题变成了缩放而不是原始速度。总体计划是确保您的网站具有无共享架构 - 所有持久性数据都存储在数据库中。然后,您安装多个Web服务器,将数据库服务器移动到单独的计算机,并在缓存反向代理后面运行整个事务。要添加更多容量,请添加更多计算机。

答案 1 :(得分:1)

单向:php accelerators,例如APC

另一个;阅读博客文章,例如performance tuning overview

答案 2 :(得分:1)

我会说一般性问题。尝试在线寻找优化提示......

涉及几个参数:

  • I / O访问(使用它很多 - file_exists,is_file开销)
  • 数据库访问(优化查询,使用存储过程,检查数据库缓存)
  • 使用操作码缓存(如APC)
  • 压缩输出
  • 服务js / css缩小和压缩(并使用子域将其传递到浏览器)
  • 使用memcache将数据缓存到内存中以便更快地访问

您可以使用基准测试工具在优化之前和之后测试您的环境。

以apache bench为例。

答案 3 :(得分:1)

<强>文件大小。

500 KB的文件需要更长的时间才能下载300 KB的文件。因此,尽可能优化和裁剪。

<强> Accelators

自我解释:List of PHP accelerators

服务器升级

虽然这需要花钱,但在处理大量流量时,它会影响.php文件获取进程的速度以及将数据发送给用户的速度。 我不建议这样做,因为还有其他(免费)方法来提高速度。

不要使用外部资源

如果您通过其他网站链接某些图片,则下载速度将无法控制。相反,如果您计划使用其他人的图像,请首先将它们下载到您自己的服务器(或将它们上传到您自己的服务器)并以这种方式加载它们。

查看并改进您的代码

查找捷径,删除不必要的代码,删除未使用的变量,重用其他变量等。

还有其他方法,但我相信上述信息对您的速度影响最大

答案 4 :(得分:0)

你应该搜索一下这个问题的现有答案,但是......

  • APC for opcode caching
  • 用于对象存储的Memcached(以减少数据库查询的数量)
  • 检查/优化慢速SQL查询
  • 衡量并找到瓶颈
  • 不要在每个页面加载等上依赖(慢速)Web服务。

答案 5 :(得分:0)

雅虎在加速网页方面有一些good basic advice,其中很多都很容易实现。你可能还想为firefox下载yslow + firebug;它们将从客户请求的角度帮助指出可能存在的基本瓶颈。

这里的其他建议是好的,所以我不会添加其他的东西;在您100%确定已发现瓶颈之前,不要费心优化任何代码。我不能强调这一点。不要浪费时间调整代码或实现新的东西(即缓存),因为你“感觉”会使事情变得更快,只对真实的证据(即性能分析)采取行动。