2

我对 Symfony 比较陌生。我目前正在使用 Symfony 和 Docker 开发原型。

今天我通过 Login 实现了一个 AuthenticationService(像这样:https://symfony.com/doc/current/security.html)。当我现在加载我的应用程序时,服务器响应时间约为 1500 毫秒。如果没有此身份验证,响应时间约为 70 毫秒。

我打开了探查器,似乎“TraceableFirewallListener”需要很多时间。 Symfony Profiler 结果 我已经尝试了命令提示(更改为 prod env,禁用调试)。

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

我的 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 }

为什么我的回复时间这么长?以及如何使它更短?

4

2 回答 2

1

事实证明,它与 Authenticator 本身毫无关系。Symfony 根本无法使用缓存,这导致每个请求都重新构建/重建 LoginFormAuthenticator。在这种情况下,较长的响应时间可能是由于该服务使用了很多类并且重新创建了每一个类。

对我的修复是 1. 将 'var' 文件夹添加到 .dockerignore,因此在构建时不会将目录复制到容器中。其次,我必须删除完整的“app”文件夹(其中包含“var”文件夹和其中的缓存)的挂载。不要忘记“重新安装”必要的文件夹。我认为首先发生这个问题的原因是,我确实在我的主机上创建了 symfony 项目,并认为一切都必须在容器内。似乎这导致没有使用缓存的权限。

响应时间回到 ~70 ms

于 2020-03-27T22:29:00.910 回答
0

此问题的另一个原因可能与在 WSL 2 上运行 Symfony 有关。就我而言,我的代码在 Windows 10 上,但使用的是 WSL 命令提示符并在/mnt/...目录外运行服务器。这导致了与问题中概述的类似的显着放缓。

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

于 2021-09-24T16:10:10.503 回答