PHP网站优化
Posted
技术标签:
【中文标题】PHP网站优化【英文标题】:PHP website Optimization 【发布时间】:2012-01-05 17:05:00 【问题描述】:我有一个高流量网站,我需要确保我的网站足够快,以便快速向所有人展示我的网页。
我在 Google 上搜索了许多关于速度和优化的文章,以下是我发现的:
缓存页面 保存到磁盘在内存中缓存页面:
这非常快,但是如果我需要更改页面的内容,我必须将其从缓存中删除,然后将文件重新保存到磁盘上。
将其保存到磁盘
这很容易维护,但每次访问页面时我都必须在磁盘上读取。
我应该采用哪种方法?
【问题讨论】:
您应该添加有关您网站的更多详细信息:操作系统、服务器、cms ?...等 我使用 apache+php+mysql+centos - 没有 cms 或框架 你有什么类型的主机?共享?专用? 我有一个专用服务器 【参考方案1】:你有一个好主意,这与我自己的做法很接近。如果我有一个 100% 静态的页面,我将保存它的 html 版本并将其提供给用户,而不是每次都再次生成内容。这在某些情况下可以同时保存 mysql 查询和几个 io 操作。每次我进行一些更改时,我的管理界面都会简单地删除 html 文件并重新创建它。
事实证明,这种方法在我的服务器上的速度提高了大约 100 倍。
【讨论】:
这是最好的缓存方法之一,只需在更改时重新创建静态 html 页面。 这个过程可以很容易地自动化。【参考方案2】:我可以补充:
尽可能缓存所有内容
最小化包含数
使用加速器
请调查一下,是什么让您的网站运行缓慢。不要忘记 YSlow 和类似的东西,它们可以帮助你很多。
此外,如果您有大量计算,您可以为它们编写 php 扩展,但我不认为这是您的情况
【讨论】:
【参考方案3】: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
对于缓存内容甚至页面,您可以使用:Memcached 或 Redis。
内存缓存: 免费和开源、高性能、分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态 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
您也可以安装Varnish、nginx或G-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
【讨论】:
我用的是 nginx + redis,他们的回答速度超级快 +1【参考方案4】:网站性能的最大问题是“您提供静态页面,还是提供动态页面?”。
静态页面
加速静态页面的最佳方法是将它们缓存在您的网站之外。如果您负担得起,请从 CDN(Akamai、Cotendo、Level3)为他们提供服务。在这种情况下,流量永远不会到达您的网站。有几种方法可以控制缓存 - 从固定持续时间到标准 HTTP 缓存指令。
即使您无法从 CDN 提供 HTML,在 CDN 上存储您的图像、javascript 和其他静态资产也可以加快您的网站速度 - 您可以为此使用像 Amazon 这样的云服务。
如果您买不起 HTML 的 CDN,您可以使用自己的缓存代理层,正如宙斯之书所建议的那样。我用 Varnish 取得了很好的效果。理想情况下,您应该在自己的硬件上运行缓存代理 - 但您可以在现有服务器上运行它。
动态页面
动态页面更难缓存 - 因此您需要集中精力使页面本身尽可能高效。这基本上意味着寻找瓶颈——在大多数系统中,瓶颈是数据库(但并非总是如此)。
如果您确信您的瓶颈是数据库,则有多种缓存方式可供选择 - 您可以缓存 HTML 的“sn-ps”,或者您可以缓存数据库查询。使用加速器有助于解决这个问题——我不会从头开始发明一个。这可能意味着重新构建(部分)您的应用程序。
【讨论】:
【参考方案5】:您必须先配置您的网站。
人们必须确定某些瓶颈,然后解决该特定问题,而不是胡乱猜测。
Cahin 不是灵丹妙药,也不是优化的代名词。 有时缓存不适用(例如,对于广告),有时它无济于事,因为 ht 网站速度慢的原因可能在一些不相关的地方。 您的网站可能内存不足。所以,内存缓存会让事情变得更糟。
我不敢相信有人拥有高流量网站,却对之前的分析只字未提。你怎么能在不知道它的内部结构的情况下运行它? CPU 负载、内存负载、磁盘 I/O 等。
【讨论】:
以上是关于PHP网站优化的主要内容,如果未能解决你的问题,请参考以下文章
nginx优化php-fpm优化 压力测试达到每分150万访问量webbench网站压力
教程DW CS6+网页制作(HTML5+PHP)+网站优化(SEO)