Symfony 5 TraceableFirewallListener 非常慢
Symfony 5 TraceableFirewallListener very slow
我对 Symfony 比较陌生。我目前正在使用 Symfony & Docker 开发原型。
今天我通过登录实现了一个 AuthenticationService(像这样:https://symfony.com/doc/current/security.html)。当我现在加载我的应用程序时,服务器响应时间约为 1500 毫秒。如果没有此身份验证,响应时间约为 70 毫秒。
我打开了分析器,"TraceableFirewallListener" 似乎花费了很多时间。
Symfony Profiler Result
我已经尝试过 comman tipps(更改为 prod env,禁用调试)。
我真的不知道为什么要花那么长时间,但我很确定这不正常。我也不想从这里 () 实施 "solution",因为这对我来说似乎是一个非常糟糕的做法。
我的security.yaml在下面。如果您还需要什么,请问我,我会附上。
提前感谢您的帮助
更新
安装了 blackfire 并发现了一些有趣的图表,也许这会有所帮助:
https://blackfire.io/profiles/197c3e1c-c53b-4c28-b793-a384fdb90755/graph
security:
encoders:
App\Entity\User:
algorithm: auto
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: lazy
provider: app_user_provider
guard:
authenticators:
- App\Security\LoginFormAuthenticator
logout:
path: app_logout
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
为什么我的回复时间这么长?我该如何缩短它?
事实证明,它与Authenticator本身没有任何关系。 Symfony 根本无法使用缓存,这导致每次请求都重新构建/重建 LoginFormAuthenticator。在这种情况下,较长的响应时间可能是由于此服务使用了很多 类 并且重新创建了其中的每一个。
我的解决方法是 1. 将 'var' 文件夹添加到 .dockerignore,因此在构建时该目录不会复制到容器中。其次,我必须删除整个 'app' 文件夹的挂载(其中包含 'var' 文件夹和其中的缓存)。不要忘记 "remount" 必要的文件夹。我认为这个问题首先发生的原因是,我确实在我的主机上创建了 symfony 项目,并且认为一切都必须在容器内。似乎这导致没有使用缓存的权限。
响应时间回到 ~70 毫秒
此问题的另一个原因可能与 WSL 2 上的 运行 Symfony 有关。在我的例子中,我的代码在 Windows 10 上,但使用的是 WSL 命令提示符和 运行 服务器关闭 /mnt/...
目录。这导致了与问题中概述的情况类似的显着放缓。
将存储库直接克隆到 Ubuntu WSL 主文件夹,并像以前一样 运行 服务器,显着减少了请求延迟。
我对 Symfony 比较陌生。我目前正在使用 Symfony & Docker 开发原型。
今天我通过登录实现了一个 AuthenticationService(像这样:https://symfony.com/doc/current/security.html)。当我现在加载我的应用程序时,服务器响应时间约为 1500 毫秒。如果没有此身份验证,响应时间约为 70 毫秒。
我打开了分析器,"TraceableFirewallListener" 似乎花费了很多时间。 Symfony Profiler Result 我已经尝试过 comman tipps(更改为 prod env,禁用调试)。
我真的不知道为什么要花那么长时间,但我很确定这不正常。我也不想从这里 (
我的security.yaml在下面。如果您还需要什么,请问我,我会附上。
提前感谢您的帮助
更新
安装了 blackfire 并发现了一些有趣的图表,也许这会有所帮助: https://blackfire.io/profiles/197c3e1c-c53b-4c28-b793-a384fdb90755/graph
security:
encoders:
App\Entity\User:
algorithm: auto
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: lazy
provider: app_user_provider
guard:
authenticators:
- App\Security\LoginFormAuthenticator
logout:
path: app_logout
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
为什么我的回复时间这么长?我该如何缩短它?
事实证明,它与Authenticator本身没有任何关系。 Symfony 根本无法使用缓存,这导致每次请求都重新构建/重建 LoginFormAuthenticator。在这种情况下,较长的响应时间可能是由于此服务使用了很多 类 并且重新创建了其中的每一个。
我的解决方法是 1. 将 'var' 文件夹添加到 .dockerignore,因此在构建时该目录不会复制到容器中。其次,我必须删除整个 'app' 文件夹的挂载(其中包含 'var' 文件夹和其中的缓存)。不要忘记 "remount" 必要的文件夹。我认为这个问题首先发生的原因是,我确实在我的主机上创建了 symfony 项目,并且认为一切都必须在容器内。似乎这导致没有使用缓存的权限。
响应时间回到 ~70 毫秒
此问题的另一个原因可能与 WSL 2 上的 运行 Symfony 有关。在我的例子中,我的代码在 Windows 10 上,但使用的是 WSL 命令提示符和 运行 服务器关闭 /mnt/...
目录。这导致了与问题中概述的情况类似的显着放缓。
将存储库直接克隆到 Ubuntu WSL 主文件夹,并像以前一样 运行 服务器,显着减少了请求延迟。