令人难以置信的缓慢缓存:在开发环境中清除symfony

问题描述 投票:3回答:4

我在最近几个月遇到的问题是在我的本地环境中命令缓存:clear非常慢。很多时候需要一分多钟。我尝试了XAMPP和WAMP,但它没有帮助。我尝试通过删除不同的服务和捆绑来解决但情况仍然相同。

最后,我发现问题与我在Resources / Views文件夹中的Twig文件数量成正比。我甚至用标准命令创建了一个新的symfony项目

composer create-project symfony / framework-standard-edition test-performance-project“2.7。*”

并创建了一个简单的标准控制器和twig文件来检查我的假设。我在Resources / Views文件夹中添加的twig文件越多,cache:clear命令就越慢(或多或少成比例)。有没有办法防止这种情况,因为在我们的项目中,我们的Resources文件夹中有大量的twig文件。

我在用

Windows 10 PHP 7.0.15 Symfony 2.7.23 Twig 1.31.0

任何帮助将受到高度赞赏:)

php symfony twig symfony-2.7
4个回答
5
投票

在我的cli环境中启用xdebug时遇到了类似的问题。 Twig解析对模板文件进行了大量迭代,因此xdebug对twig缓存生成性能有很大影响。

尝试在php cli配置中注释掉这一行:

;zend_extension=xdebug.so

1
投票

我做的事情是为了提高Windows 10的性能,同时保持xdebug。

启用opcache

禁用xdebug.remote_autostart

添加了x-debug帮助扩展

提示:如果你有一个带有remote_autostart 1的xdebug扩展,你应该让你的IDE中的监听器始终保持开启,即使你没有任何断点,否则一切都会运行得非常慢(见案例6)。

一些使用小型symfony 4.2项目的测试,在开发模式下,时间是从Chrome获取的DomContentLoaded:

  1. xdebug ON,remote_autostart 0,IDE ON中的侦听器,chrome扩展的调试禁用: 没有缓存:9.5秒 缓存后:580-620ms
  2. xdebug ON,remote_autostart 0,IDE ON中的侦听器,为chrome扩展启用调试: 没有缓存:16.35秒 缓存后:950ms-1s
  3. xdebug ON,remote_autostart 0,IDE OFF中的侦听器,chrome扩展的调试已禁用: 没有缓存:9.02秒 缓存后:565-650ms
  4. xdebug ON,remote_autostart 0,IDE OFF中的侦听器,为chrome扩展启用调试: 没有缓存:13.99秒 缓存后:5.54s
  5. xdebug ON,remote_autostart 1,IDE ON中的侦听器: 没有缓存:14.92秒 缓存后:1.02s
  6. xdebug ON,remote_autostart 1,IDE OFF中的监听器: 没有缓存:14.92秒 缓存后:5.69s
  7. xdebug OFF: 没有缓存:6.66秒 缓存后:483-525ms

我通常使用案例1,当我需要调试时,我切换到案例2.案例3,4,5,6与可能不了解IDE侦听器和调试cookie的含义的人员相关。

UPDATE

我在启用Windows子系统Linux(WSL)的情况下测试了同一个项目,并得到了一些改进。加载时没有缓存是这样的:

  • 启用xdebug但听众关闭时为6.5秒
  • 启用xdebug并启用侦听器9.5秒
  • 2.5秒!!!禁用xdebug

整体WSL改善了一切,减少了50%的加载时间。

PS:要使WSL正常工作,您必须禁用Windows Defender实时保护,否则一切都将比没有WSL慢2倍。也许有一些选项可以保持实时保护并排除WSL,但我现在还不知道。


0
投票

我的cache:clear速度的奇迹是什么让xdebug.profiler_enable = off关闭了剖析器。

我在Windows上使用WAMP,使用PHP 7.1和7.2。

使用WAMP(但不仅仅是它)本地webhost和您的控制台可能没有使用相同的php.ini文件。如果您可能在浏览器中检查phpinfo()输出,您可能会发现探查器已关闭。但是,当你在控制台中运行cache:clear时,控制台可能没有使用相同的php.ini文件 - 就像我一样。

从控制台真正使用的php.ini运行了探查器,这导致PHP在后台创建了许多GB的cachegrind文件,对我来说是隐藏的。当我检查资源管理器的硬盘使用情况时,我才注意到它,而cache:clear正在发生。

当最终关闭探查器时,缓存:清除速度至少快5倍。


-1
投票

一个symfony核心开发人员问我他总是做rm -fr var/cache/*所以我总是在运行我的应用程序之前这样做。

同样在config_dev.yml中,make template caching为false

twig:
    cache:false
© www.soinside.com 2019 - 2024. All rights reserved.