我接手了一个运行在 IIS 上的非常慢的 PHP 网站,我正在尝试最大限度地提高它的性能。问题在于第一个字节的时间 (TTFB),几乎空白的页面的 TTFB 为 1500 毫秒,大多数页面的平均 TTFB 为 2500 毫秒。数据库查询时间(数据库托管在另一台服务器上)是可以接受的,连接/下载速度最多为几十毫秒;处理 PHP 的速度似乎是唯一的问题,它几乎使用了服务器双核 CPU 的一个核心的 100% 来提供服务单个页面请求。
它当前运行的是 IIS 6.0、PHP 5.2.5 和 Cake PHP 1.2,我正在努力将其升级到 IIS 7.0、PHP 5.3.6 和 Cake 1.3.10,并在升级 PHP 版本后安装 PHP 缓存组件。PHPinfo() 显示“服务器 API”为 ISAPI,我们安装了 Fast CGI,Fast CGI 是首选,对吗?
我还应该采取其他步骤来确保服务器以最佳方式运行 PHP 吗?在尝试运行 Apache 和 IIS 来运行我的 PHP 网站之前,我想确保我能充分利用服务器(在生产服务器上,还有其他网站驻留在同一个服务器上)。
答案1
正如其他人所说,根本问题在于应用程序构建的效率低下,因此,如果可以解决这个问题,就这样做吧。
解决此问题后,我注意到在切换到具有 FastCGI 和非线程安全 PHP 5.3 的 IIS 7 后性能显著提高。我认为大部分改进来自 FastCGI 和 NTS PHP 5.3,这在 IIS 6 下完全可行且易于实现。
这使我的页面处理时间减少了约 40%。
答案2
你几乎肯定会从清理代码中获得更多收益;一些知道自己在做什么的人进行的简单分析和优化应该会让事情得到某种控制(1500ms 的完整核心是很多CPU 周期)。只有当您了解代码有多糟糕时,您才应该开始查看服务器 —— 很少有地方会让您把代码搞得一团糟(至少需要 1.5 秒的 CPU 时间才能生成任何有用的内容 —— 这太荒谬了)。
答案3
您可以尝试使用法朗格。它是 .Net 的 PHP 编译器,由于您正在运行带有 IIS 的 Windows 服务器,因此这似乎是最好的选择,因为它将提高 PHP 应用程序的性能。