Symfony 5 TraceableFirewallListener very slow



我对Symfony比较陌生。我目前正在与Symfony&Docker。

今天,我通过登录实现了AuthenticationService(如下所示:https://symfony.com/doc/current/security.html)。当我现在加载我的应用程序时,服务器响应时间大约是1500毫秒。如果没有这种身份验证,响应时间大约为70毫秒。

我打开了探查器,"TraceableFirewallListener"似乎花了很多时间。Symfony Profiler结果我已经尝试了comman-tips(更改为prod-env,禁用调试(。

我真的不知道为什么要花这么长时间,但我很确定这不可能是正常的。我也不想从这里实现"解决方案"(TraceableFirewallListener加载时间非常长(,因为这对我来说似乎是一个非常糟糕的做法

我的保安在下面。如果你还需要什么,请问我,我会帮你的。

感谢提前提供的帮助

更新

安装了blackfire并发现了一些有趣的图形,也许这会有所帮助:https://blackfire.io/profiles/197c3e1c-c53b-4c28-b793-a384fdb90755/graph

security:
encoders:
AppEntityUser:
algorithm: auto
providers:
app_user_provider:
entity:
class: AppEntityUser
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: lazy
provider: app_user_provider
guard:
authenticators:
- AppSecurityLoginFormAuthenticator
logout:
path: app_logout
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }

为什么我的响应时间这么长?我该怎么把它变短?

事实证明,它与Authenticator本身完全无关。Symfony根本无法使用缓存,这导致每次请求都要重新构造/重建LoginFormAuthenticator。在这种情况下,响应时间长可能是因为这个服务使用了很多类,并且每个类都被重新创建。

对我来说是1。将"var"文件夹添加到.dokerignore中,因此在构建时没有将目录复制到容器中。其次,我不得不删除完整的"app"文件夹的挂载(其中包含"var"文件夹及其内部的缓存(。不要忘记"重新安装"必要的文件夹。我认为这个问题最初发生的原因是,我确实在主机上创建了symfony项目,并认为所有东西都必须在容器内。似乎这导致了没有使用缓存的权限。

响应时间恢复到~70ms

此问题的另一个原因可能与在WSL2上运行Symfony有关。在我的案例中,我的代码是在Windows 10上编写的,但使用的是WSL命令提示符,并在/mnt/...目录下运行服务器。这导致了与问题中概述的情况类似的显著放缓。

将存储库直接克隆到UbuntuWSL主文件夹,并像以前一样运行服务器,大大减少了请求延迟。

最新更新