Que fait le pare-feu Symfony si longtemps?

ma page Symfony n'est pas trop lente (elle se charge en environ 400 ms) mais compte tenu du fait qu'il s'agit d'une simple page hello world avec authentification de base, elle devrait se charger en moins de 100 ms. Quand j'entre dans le profileur, je vois ceci:

Profiler timeline

remarquez qu'il est juste écrit "pare-feu" pour 250 ms. Je pensais que le pare-feu était juste responsable de garder les utilisateurs hors de certaines zones de la page - je ne peux pas imaginer que prendre plus de quelques millisecondes plus le temps qu'il faut pour récupérer les informations de l'utilisateur dans la base de données (qui dans ce cas est de 61 ms).

Quelqu'un pourrait-il expliquer ce que fait le pare-feu? Si vous avez des indications générales sur la façon d'augmenter les performances du pare-feu ainsi que serait grandement apprécié.


Note : j'ai googlé ceci bien sûr, et je tiens à préciser à l'avance que Je me connecte à la base de données MySQL par adresse IP, pas par nom d'hôte. Cela semblait être le problème pour tous les autres cas de pare-feu lent Symfony que j'ai pu trouver.


certaines ressources de mon projet qui pourraient être pertinentes:

55
demandé sur Hubro 2013-04-19 22:32:22

3 réponses

j'ai fait quelques recherches sur Google et je vois que ce type , semble avoir la réponse à votre question.

Après 15 minutes de recherche j'ai fini par comprendre que c'était dû au constructeur de PDO PHP (mon pare-feu est le premier à se connecter au base de données comme J'utilise des entités en tant qu'utilisateurs). Avec cette connaissance de la question a été trouvé assez rapidement ( [1] , [2] ): comme il s'avère utiliser un nom DNS (comme 'localhost') au lieu d'une IP (comme '127.0.0.1') sont les causes de ce problème.

une édition simple des paramètres.fichier yml (changer localhost en 127.0.0.1) a fait le tour de réduire le temps de chargement du pare-feu à un minimum.

10
répondu Rawdreeg 2017-05-23 12:10:14

hélas, il s'avère que Rawdreeg était en partie à droite. J'ai fait un script PHP de 20 lignes pour profiler le temps qu'il faut pour se connecter à mon serveur MySQL:

<?php

$time = microtime(true);

$con = new PDO(...);

$connect_time = microtime(true);

$result = $con->query('SHOW TABLES');

$query_time = microtime(true);

var_dump($result->fetchAll(PDO::FETCH_ASSOC));

$time_con = ($connect_time - $time) * 1000;
$time_query = ($query_time - $connect_time) * 1000;

echo "Connection took $time_con ms\n";
echo "Query took $time_query ms\n";

la sortie a été:

Connection took 230.18503189087 ms
Query took 64.532995223999 ms

qui remplit les blancs du profileur Symfony parfaitement . La bonne nouvelle est que lorsque mon application est active, elle se connecte au serveur MySQL localement par socket, donc il va probablement flamber vite! Il y a peu que je puisse faire au sujet de la vitesse pendant le développement cependant, autre que le miroir du serveur MySQL localement.

donc pour résumer la réponse; le pare-feu Symfony crée initialement la connexion à la base de données MySQL, et dans mon cas, cette connexion est assez lente. Le temps de connexion MySQL représente plus de 80% du temps profilé du pare-feu dans mon cas.


Note:: je me connecte déjà au serveur MySQL par adresse IP, et j'ai ajouté skip-name-resolve à la configuration MySQL en vain.

9
répondu Hubro 2017-05-23 12:01:59

votre serveur MySQL pourrait être le problème. Essayez d'ajouter skip-name-resolve à la section [mysqld] de votre fichier my.cnf . Cela empêche MySQL de faire une recherche DNS inversée sur l'adresse IP des connexions entrantes.

0
répondu longneck 2013-04-25 14:30:48