Symfony 5 TraceableFirewallListener очень медленно - PullRequest
1 голос
/ 26 марта 2020

Я относительно новичок в Symfony. В настоящее время я работаю над прототипом с Symfony & Docker.

Сегодня я внедрил службу аутентификации через логин (например: https://symfony.com/doc/current/security.html). Когда я сейчас загружаю свое приложение, время ответа сервера составляет около 1500 мс. Без этой аутентификации время ответа составляет около 70 мс.

Я включил профилировщик, и кажется, что «TraceableFirewallListener» занимает много времени. Symfony Результат профилировщика Я уже попробовал всплывающие подсказки (переход на prod env, отключение отладки).

У меня нет ни малейшего понятия, почему это занимает столько времени, но я Я уверен, что это не может быть нормально. Я также не хочу реализовывать здесь «решение» ( TraceableFirewallListener, чрезвычайно долгое время загрузки ), так как это кажется мне очень плохой практикой.

Мой security.yaml ниже. Если вам нужно что-то еще, пожалуйста, спросите меня, и я приму это.

Заранее спасибо за помощь

ОБНОВЛЕНИЕ

Установлен черный огонь и найдены некоторые интересные графики, возможно, это поможет: 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 }

Почему мое время ответа так долго? И как мне сделать его короче?

1 Ответ

0 голосов
/ 28 марта 2020

Оказывается, это никак не связано с самим Аутентификатором. Symfony вообще не смог использовать кеш, что привело к перестройке / перестройке LoginFormAuthenticator при каждом запросе. Большое время отклика в этом случае, вероятно, связано с тем, что для этого сервиса используется много классов, и каждый из них воссоздается.

Исправление для меня: 1. добавление папки 'var' в .dockerignore, чтобы при сборке каталог не копировался в контейнер. Во-вторых, мне пришлось удалить монтирование для полной папки «app» (которая содержала папку «var» и кеш внутри нее). Не забудьте «перемонтировать» нужные папки. Я думаю, что причина, по которой эта проблема возникла в первую очередь, была в том, что я создал проект symfony на моей хост-машине и подумал, что все должно быть внутри контейнера. Похоже, что это привело к отсутствию разрешения на использование кэша.

Время ответа до ~ 70 мс

...