35

这是我长期以来一直存在的问题。我想在我的 Windows 计算机上运行 PHP 应用程序,它的加载时间非常长,大约 10-25 秒。我尝试了很多事情:

  • 首先我尝试了一个简单的 XAMPP 安装
  • 我读 WAMP 可能会更快,所以我也尝试了 WAMP。它给了我同样的结果
  • 然后我用 PHP 安装了一个 nginx 服务器,但它也没有帮助
  • 最后,我在 VirtualBox 中安装了 Ubuntu 11.10,并分享了包含我的项目的 windows 文件,但结果更糟:每次加载时间超过 22 秒。

更新:我什至尝试过 APC - 它改进了一点,但仍然是 6-8 秒/页

我将文件上传到 linux 服务器(共享主机),它在 300-500 毫秒左右运行。在 XAMPP 安装上,我也尝试运行其他(即不是 Symfony2)应用程序(例如 phpmyadmin),它们也比在共享主机上慢,但不是非常慢,加载时间为 2-3 秒。在我改用 Linux 作为主要操作系统之前,我怎样才能提高性能?我有一台配备 i7 CPU、4 GB RAM、5400RPM HDD、Win7 x64 的笔记本电脑。

谢谢您的帮助!

UPDATE2:出于某种神秘的原因,我的 Symfony 路由不能与 fcgid 一起使用(它给了我一个 404 错误)所以我回去使用 PHP 作为一个模块。现在,它已经成为有史以来最糟糕的(比以前作为一个模块更糟糕):应用程序模式 20-25 秒,在开发模式下,每次超过 30 秒,所以我得到一个超时错误,它与 or 相同没有启用 APC。

在这里你可以看到这个错误。这是可重现的:每次在 30 秒内到达不同的执行点:

在此处输入图像描述

4

10 回答 10

25

更新:

由于 PHP 5.5 现在已经集成了 PHP OPCache,这加快了执行时间。在我的设置中,一个完整的数据库访问请求现在需要 180 毫秒。

脚步:

  1. 更新到最新的php版本
  2. 启用 OPCache
  3. 禁用 xdebug
  4. 将 realpath_cache_size = 2M 设置为 DemonTPx 提到的

php.ini设置:

realpath_cache_size = 2M
[XDebug]
xdebug.profiler_enable = 0
xdebug.remote_enable = 0
[opcache]
zend_extension = "C:\xampp18\php\ext\php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000

为什么 Windows 比 Unix 慢?

正如这里所讨论的,PHP 在 file_exists 和 Windows 上的 filemtime() 中非常慢。因为 Symfony2 在开发模式下大量使用这些功能。在 Windows 上,我们不会低于 700 毫秒(在 <= 5.4 中)。PHP 5.5 现在允许 180 毫秒。

一个解决方案可能是微软为解决 IIS 上的这个问题而开发的WinCache 。但由于它只适用于几个 Windows 版本并且也只适用于 IIS,所以它对我来说不是解决方案。

选择

我可以推荐的一个不错的解决方案是在 Virtualbox 上安装一个 Linux 虚拟机。这很容易设置,也更像是生产环境。

于 2013-06-10T10:00:04.047 回答
20

我有完全一样的问题。在 php.ini 中设置以下内容将我的性能从 ~800ms 提高到 ~300ms:

php.ini:

realpath_cache_size = 2M

仍然不是我从 unix 机器上得到的~100ms,但至少它有所不同

于 2013-07-23T17:55:49.387 回答
9

我曾经在 XP 和 Server 2003 上遇到过 symfony 1 的类似问题。解决方案是安装 PHP 加速器(对我们来说是 eAccelerator,现在 APC 可能是更好的选择)加上 FastCGI/fcgid。

附录:自从我在 Windows 上使用 Apache 已经很久了。我普遍认为它的表现一直在稳步好转,而不是更糟;然而,与大多数不寻常的设置一样,不能保证良好的结果。根据我之前的评论,我建议在Apache Lounge提出您的问题,我之前在那里收到了一些很棒的专家建议。

如果内存服务正确,他们可以为您提供免费的 Apache 二进制文件,该二进制文件使用比 Apache 网站上提供的标准工具更好的工具编译。

于 2012-03-24T19:38:35.480 回答
3

哇,在尝试了许多不同的事情之后,我终于成功地使用 wamp 在 windows7 上从 15 秒的执行时间转移到了 3 秒的执行时间。

如何安装 wincache 扩展: http ://us2.php.net/manual/en/wincache.installation.php

在哪里下载 wincache dll:http: //sourceforge.net/projects/wincache/

我的 php.ini 配置更改:

[PHP]
realpath_cache_size = 2M
extension=php_wincache.dll
; XDEBUG Extension
;zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "C:/Net Generation/wamp/tmp"
xdebug.show_local_vars=0
xdebug.max_nesting_level=200

[opcache]
zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/ext/php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
于 2015-01-27T14:20:16.037 回答
1

只是一个猜测(可能不是正确的猜测),但它可能与 MySQL 相关。看到你提到 PhpMyAdmin 和 Symfony 2 作为你测试的 PHP 应用程序,它们都依赖于 MySQL(假设你在 Symfony 2 中设置了 MySQL)。您在帖子中没有提到这一点,但是在您的 VirtualBox 设置中,您是否有机会让在 Ubuntu 上运行的脚本连接到 Windows 主机上的 MySQL 服务器?

您可以查看PHP Benchmark以获得一些性能测试脚本,看看这些脚本在时间上是否表现更好。

您可以尝试的另一件事是使用Xdebug并查看是否发现(一个)某些(一组)函数占用了太多时间。

我肯定会把这个问题保留为我的最爱,因为我很好奇现在不知道它是什么 :) 祝你好运!

于 2012-07-27T14:29:02.123 回答
1

我认为您的缓存机制有问题。检查 app\cache 目录。必须有一个名为 dev 的文件夹。如果它不存在或为空,请检查文件夹权限。当我删除 app\cache 目录下的 dev 和 prod 目录时,加载页面需要 18 秒,但之后只需要 500 毫秒。

于 2012-04-03T00:01:50.127 回答
1

几年前我有同样的问题。您在后台运行哪些防病毒软件?尝试出于开发目的停用它或更改它。它也可能是一些在后台运行的索引服务。Symfony 2 包含超过 15000 个与供应商的文件 :) 也尝试通过从头开始重新安装 Windows 以经典方式进行。我的网站通常需要 100-500 毫秒,我的笔记本电脑比你的慢。(英特尔 C2D P8600)

于 2012-04-09T15:06:53.553 回答
0

使用http://oca.microsoft.com/en/windiag.asp检查您的计算机随机存取内存、RAM或运行您的 Ubuntu CD 引导选项附带的内存测试应用程序。

在这两种情况下,选择所谓的额外或深度测试 - 我不记得确切 - 但是,选择更长时间的测试,这些测试没有结束,你只需等到测试完成两个阶段并且你的任何问题RAM,通常,显示。

此外,请使用任何检查方式检查您的硬盘驱动器。之后尝试执行磁盘碎片整理

我有点,你的问题是硬件相关的问题。

于 2012-07-28T11:32:02.520 回答
0

我的页面需要 20 秒才能执行。我安装了快速cgi,增加了内存限制,一切都不起作用。然后开始查看时间线,发现 symfony 防火墙模块占用了大部分时间。原来在我的教义配置中有“localhost”是导致问题的原因。将其更改为 127.0.0.1 解决了该问题。不知道为什么,但这里有描述:

http://12wiki.blogspot.ca/2012/11/why-does-symfony-2-firewall-take-so.html

于 2015-05-17T00:25:14.580 回答
-1

页面加载时间也取决于 CSS + JS + 图片加载时间。我在 CakePHP 中遇到了同样的问题,并通过mod_expires在 htaccess 中使用解决了这个问题。

您是否在您的服务器 htaccess 文件中为 CSS、JS 和图像尝试过“ExpiresByType”?检查页面。

于 2012-07-24T05:04:27.160 回答