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

时间:2017-03-29 16:42:19

标签: php symfony twig symfony-2.7

我在最近几个月遇到的问题是在我的本地环境中命令缓存: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

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

4 个答案:

答案 0 :(得分:5)

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

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

;zend_extension=xdebug.so

答案 1 :(得分:1)

我在提高xdebug的同时提高Windows 10性能的事情。

  

已启用的操作缓存

     

禁用了xdebug.remote_autostart

     

添加了x-debug帮助程序扩展

提示:如果您具有带有remote_autostart 1的xdebug扩展,即使没有任何断点,也应始终在IDE中保持监听器,否则,一切将运行得非常慢(请参阅案例) 6)。

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

  1. xdebug打开,remote_autostart 0,IDE中的侦听器打开,禁用调试 对于chrome扩展名:
    • 无缓存:9.5秒
    • 缓存后:580-620ms
  2. xdebug打开,remote_autostart 0,IDE中的侦听器打开,为chrome启用调试 延期:
    • 没有缓存:16.35秒
    • 缓存后:950ms-1s
  3. xdebug打开,remote_autostart 0,IDE中的监听器关闭,chrome扩展的调试禁用:
    • 没有缓存:9.02秒
    • 缓存后:565-650ms
  4. xdebug打开,remote_autostart 0,IDE中的侦听器关闭,为chrome扩展启用调试:
    • 没有缓存:13.99秒
    • 缓存后:5.54秒
  5. xdebug打开,remote_autostart 1,IDE中的侦听器打开:
    • 无缓存:14.92秒
    • 缓存后:1.02秒
  6. xdebug打开,remote_autostart 1,IDE中的监听器关闭:
    • 无缓存:14.92秒
    • 缓存后:5.69秒
  7. xdebug关闭:
    • 没有缓存:6.66秒
    • 缓存后:483-525ms

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

更新

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

  • 启用xdebug的时间为6.5秒,但监听器已关闭
  • 启用xdebug并启用侦听器的时间为9.5秒
  • 2.5秒!!!禁用xdebug

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

PS:要使WSL正常工作,您必须禁用Windows Defender实时保护,否则,所有操作的速度将比没有WSL时慢2倍。也许有一些选项可以保留实时保护并排除WSL,但我目前不知道。

答案 2 :(得分:0)

我对cache:clear的速度感到惊讶的是,用xdebug.profiler_enable = off关闭了探查器。

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

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

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

当探查器最终关闭时,cache:clear至少快了5倍。

答案 3 :(得分:-1)

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

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

twig:
    cache:false