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

W.A*_*med 4 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

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

Pau*_*eux 5

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

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

;zend_extension=xdebug.so
Run Code Online (Sandbox Code Playgroud)


CRK*_*CRK 5

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

启用操作缓存

禁用 xdebug.remote_autostart

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

提示:如果你有带有remote_autostart 1的xdebug扩展,你应该让你的IDE中的listener始终保持ON,即使你没有任何断点,否则一切都会运行得非常慢(参见案例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 ON,remote_autostart 0,IDE 中的侦听器关闭,chrome 扩展禁用调试:
    • 无缓存:9.02 秒
    • 缓存后:565-650ms
  4. xdebug 打开,remote_autostart 0,IDE 中的侦听器关闭,为 chrome 扩展启用调试:
    • 无缓存:13.99 秒
    • 缓存后:5.54s
  5. xdebug ON,remote_autostart 1,IDE 中的侦听器 ON:
    • 无缓存:14.92 秒
    • 缓存后:1.02s
  6. xdebug 打开,remote_autostart 1,IDE 中的侦听器关闭:
    • 无缓存:14.92 秒
    • 缓存后:5.69s
  7. x调试关闭:
    • 无缓存:6.66 秒
    • 缓存后:483-525ms

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

更新

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

  • 6.5 秒,启用 xdebug 但监听器关闭
  • 9.5 秒(启用 xdebug 且监听器开启)
  • 2.5秒!!!禁用 xdebug

总体而言,WSL 改进了一切,将加载时间缩短了 50%。

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


小智 -3

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

另外在 config_dev.yml 中将模板缓存设置为 false

twig:
    cache:false
Run Code Online (Sandbox Code Playgroud)