59 votes

Que fait le pare-feu Symfony qui dure si longtemps?

Mon Symfony page n'est pas trop lent (il charge à environ 400 ms) mais compte tenu du fait que c'est juste un simple hello world page avec l'authentification de base, il convient de chargement en moins de 100 ms. Quand je rentre dans le profiler, je vois ceci:

Profiler timeline

Avis il a juste dit "Pare-feu" pour les 250 ms. Je pensais que le pare-feu était seulement responsable de la tenue des utilisateurs de certaines zones de la page - je ne peux pas imaginer que le fait de prendre plus que quelques millisecondes, plus le temps qu'il faut pour récupérer les informations de l'utilisateur à partir de la base de données (qui dans ce cas est de 61 ms).

Quelqu'un pourrait expliquer ce que le pare-feu fait réellement? 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é ce qui bien sûr, et je tiens à préciser que je suis de la connexion à la base de données MySQL par adresse IP, pas de nom d'hôte. Ce qui semblait être le problème pour tous les autres cas, de la lenteur de Symfony pare-feu que j'ai pu trouver.


Certaines ressources de mon projet qui pourrait être utile:

12voto

Rawdreeg Points 59

J'ai fait quelques recherches sur google et je vois que ce gars, semble avoir la réponse à votre question.

Après 15 minutes de recherche j'ai fini par comprendre que c'était dû pour le PHP PDO constructeur (mon Pare-feu est la première à se connecter à l' base de données comme je le recours à des Entités comme les utilisateurs). Avec cette connaissance de la question a très vite trouvé ([1], [2]): il s'avère que l' à l'aide d'un nom DNS (comme 'localhost') au lieu d'une adresse IP (de type '127.0.0.1') sont les causes de ce problème.

Une simple modification des paramètres.fichier yml (changement de localhost 127.0.0.1) a fait le tour de réduire le Pare-feu le temps de chargement de seulement un minimum.

9voto

Hubro Points 13319

Hélas, il s'avère Rawdreeg a été en partie droite. J'ai fait un 20 script PHP en ligne de profil de combien de temps 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é:

Connexion a pris 230.18503189087 ms
Requête a pris 64.532995223999 ms

Qui remplit les espaces vides de l'Symfony profiler parfaitement. La bonne nouvelle, c'est que lorsque mon application va vivre, il va se connecter au serveur MySQL en local par socket, donc ça va probablement être ultra-rapide! Il y a peu que je peux faire au sujet de la vitesse au cours du développement, d'autres que la mise en miroir du serveur MySQL local.

Donc, pour résumer la réponse; Symfony pare-feu d'abord crée la connexion à la base de données MySQL, et dans mon cas, que la connexion est assez lente. La connexion MySQL temps, représente plus de 80% de la pare-feu du profilé de temps dans mon cas.


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

1voto

longneck Points 5884

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 d'effectuer une recherche DNS inversée sur l'adresse IP des connexions entrantes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X