我在最近几个月遇到的问题是在我的本地环境中命令缓存: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
任何帮助将受到高度赞赏:)
在我的cli环境中启用xdebug时遇到了类似的问题。 Twig解析对模板文件进行了大量迭代,因此xdebug对twig缓存生成性能有很大影响。
尝试在php cli配置中注释掉这一行:
;zend_extension=xdebug.so
我做的事情是为了提高Windows 10的性能,同时保持xdebug。
启用opcache
禁用xdebug.remote_autostart
添加了x-debug帮助扩展
提示:如果你有一个带有remote_autostart 1的xdebug扩展,你应该让你的IDE中的监听器始终保持开启,即使你没有任何断点,否则一切都会运行得非常慢(见案例6)。
一些使用小型symfony 4.2项目的测试,在开发模式下,时间是从Chrome获取的DomContentLoaded:
我通常使用案例1,当我需要调试时,我切换到案例2.案例3,4,5,6与可能不了解IDE侦听器和调试cookie的含义的人员相关。
我在启用Windows子系统Linux(WSL)的情况下测试了同一个项目,并得到了一些改进。加载时没有缓存是这样的:
整体WSL改善了一切,减少了50%的加载时间。
PS:要使WSL正常工作,您必须禁用Windows Defender实时保护,否则一切都将比没有WSL慢2倍。也许有一些选项可以保持实时保护并排除WSL,但我现在还不知道。
我的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倍。
一个symfony核心开发人员问我他总是做rm -fr var/cache/*
所以我总是在运行我的应用程序之前这样做。
同样在config_dev.yml中,make template caching为false
twig:
cache:false