Symfony 4 在 Windows 上非常慢
Posted
技术标签:
【中文标题】Symfony 4 在 Windows 上非常慢【英文标题】:Symfony 4 extremely slow on windows 【发布时间】:2018-06-29 00:13:06 【问题描述】:我在 Windows 10 上为我的项目(SF2、SF3)使用 Symfony 已经有几年了,最近我搬到 Symfony 4 来构建一个新项目但表演是灾难性的。
Symfony 初始化时间需要 5 到 25 秒,如本例所示
控制台也一样:比如cache:clear
可以持续1分钟。
我在Symfony doc和论坛中搜索了类似的问题和问题,并测试了推荐的优化(增加opcache
的一些值,启用APCu
,禁用xdebug
,在@987654332中添加realpath_cache_size
@,使用 Composer 类映射功能)但在我的情况下它不会改变任何东西。
这是我的 APCu phpinfo: 和 Opcache:
我正在使用 PHP 7.1.9、Apache 2.4.27、MariaDB 10.2.8。
有人有同样的问题和/或想法吗?
【问题讨论】:
(适用于 PHP 7.1.9、Apache 2.4.27、MariaDB 10.2.8) 你的控制器发生了什么?它似乎需要大部分的请求处理。有子请求吗? 在这个具体的例子中:几乎没有。它只获取 DoctrineManager 和一个 Repository,然后返回一个空数组(用于极简测试)。所以没有子请求。但问题似乎发生在之前 先尝试不使用任何数据库。只需返回文本响应。使用调试器查看是什么让一切变慢(网络?文件系统?)。你使用挂载的文件系统吗? Linux ftw .. 但在 Windows 上应该不会太慢,快速谷歌:***.com/questions/9854848/…github.com/symfony/symfony/issues/22712 【参考方案1】:在 Windows 上,我推荐 WSL2。您可以安装 Apache2 和 mysql 并为您的项目设置一个虚拟主机。它的运行速度明显快于内置服务器。
【讨论】:
【参考方案2】:我遇到了一个 Symfony 问题,每个请求的初始化需要 3-5 秒,这使得本地开发非常缓慢。我尝试了一切来改进它(php.ini 设置更改、升级 php 等),我终于在 xDebug 中启动了 Symfony,发现开发缓存正在重建每个页面请求,并且文件 services.yaml 正在触发缓存重建。
当我查看 Services.yaml 文件时,我意识到修改的时间是未来的时间,因为我正在测试时间更改并将我的计算机时间移到未来并在此期间保存了 services.yaml 文件。当我在当前时间重新保存文件时,它停止每次都强制重建缓存。
【讨论】:
【参考方案3】:使用内置开发服务器而不是 WAMP。 安装开发服务器包:
composer 需要 --dev symfony/web-server-bundle
运行服务器:
php bin/控制台服务器:运行
【讨论】:
【参考方案4】:同样,我有 Windows 10 Professional,使用 XAMPP(尝试过 php 5 和 php 7,没关系)。
我也尝试过使用带有 php bin/console server:run 的内置服务器
我正在使用 json 响应控制器,运行大约需要 30 到 45 秒,有时甚至超过一分钟才能处理。我的 Api 请求甚至返回超时错误。
此外,我使用 php bin/console 执行的每项操作都非常缓慢。所以我认为不仅仅是 XAMMP 中的 Apache,而是与它一起分发的 PHP 包。
我刚刚从http://windows.php.net 安装了 php-7-2 包,现在它工作得更好了。响应时间最长为 3-4 秒。
所以不要浪费你的时间使用 XAMPP... 去原始的 PHP 和 Apache 就可以了。
【讨论】:
【参考方案5】:* 更新 *
我已经为这个问题找到了一个更好的解决方案。那是...vagrant。我知道你在想什么 - “Windows 上的流浪者?哈哈。”。但这里发生了变化——现在有一个plugin for NFS folder sync on windows。我已经在两台win10电脑上测试过,到目前为止一切都很好。这对我来说似乎很稳定,并且我得到 响应时间低至 40-50 毫秒(当然,除了 symfony 正在重新生成/加热缓存等的时间)。 Composer 安装、IDE 同步和其他工作也都正常。
此外,我在 ubuntu bionic virtualbox VM 上有相当标准的设置,包括 nginx 和 php7.2-fpm。没有什么特别或优化的地方。
如果您不喜欢流浪,我仍然会在下面留下我的旧答案以供参考。祝你好运,编码愉快!
* // 更新 *
Symfony 在 Windows 上的性能一直很差,至少对我来说是这样。
启用/禁用 opcache / apc / xdebug,调整 realpath 或任何可以 - 可能 - 让事情变得更好,至少一点点,但从来没有真正在我的经验中起作用。 而且...到底谁愿意在没有调试器的情况下工作?在我看来,这不是一个解决方案。
我的建议是完全删除 XAMPP / WAMP(或者您已经安装了当前的 php 堆栈)并安装 nginx + php-fpm。
您可以手动完成 - for example - 或安装 WinNMP。
WinNMP 是一个与 XAMPP / WAMP 非常相似的工具,但是基于 nginx。它带有 Nginx、PHP、MySQL 和 Redis。
唯一的缺点是你必须学习如何配置 nginx - 如果你不知道 - 但无论如何你都应该。 Nginx 的性能更高,因此 - 在大多数情况下 - 更适合生产环境,因此它在未来可能会有所帮助。
无论如何,这是我发现在 Windows 上使用 symfony 的唯一可行解决方案,我不必在每次刷新时禁用 xdebug 或等待时间 :)
【讨论】:
【参考方案6】:您是否使用localhost
连接到数据库(或其他任何东西)?改成127.0.0.1
如果配置不正确,JMS DI Extra 包可以在 Windows 上执行此操作。
其他人提到了 xdebug 和 realpath_cache_size,这些也是罪魁祸首。
【讨论】:
你有关于你的第二点的链接,关于 JMS DI 吗? 很遗憾我不能给你一个链接,所以我会描述。因此,在预热期间会处理捆绑服务注释。在开发模式下,服务文件中的每次更改都会触发预热。一个包含许多捆绑包的大型项目可以通过这种方式轻松达到 30 秒的预热时间。有帮助的是在配置中指定捆绑包。 jmsyst.com/bundles/JMSDiExtraBundle/master/configuration 即使指定了捆绑包,如果您摆脱额外的 DI,您可能会看到开发模式(和仅开发模式)的显着改进。正是因为这个变化,我继承的一个项目从 ~1s 变为 ~180ms。有了新的服务配置功能,该捆绑包几乎已经过时了。 因此,如果您的预热很慢,但在预热后其他请求很快,并且您安装了额外的 DI,这可能是罪魁祸首。 OP 的图片显示了一个很高的初始化时间...... 对,我可以想象。想知道:Auryn 这样的东西是否也能改善这一点?以上是关于Symfony 4 在 Windows 上非常慢的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 nfs 的 Vagrant 上运行 Symfony2 应用程序(例如在 Windows 上)?
Symfony 2.3 使用 handleRequest 验证表单非常慢