Bonjour à tous,
Cela fait très longtemps que j'explore ce site que je trouve vraiment pas mal, mais je ne m'étais jamais inscrit, car jamais l'occasion de le faire.
Je me permet de venir à vous pour un problème un peu particulier, et malgré mes recherches sur la toile, je n'ai rien trouvé de concluant. J'explique ce que je compte faire et mon problème.
Pour mon site en symfony 2.5, j'ai décidé de mettre en place un mode Maintenance relié à la base de données, qui me permettrais de mettre en site en maintenance depuis l'administration.
La mise en place de ce listener fonctionne très bien, je fais bien appel au service dans le config.yml comme vous voyez ci-dessous :
Mais quand je vais sur la page d'accueil du site depuis l'environnement de dev, la toolbar m'indique que 4 requêtes ont été effectué. Quand je me dirige sur le profiler, voici ce que je vois :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 services: dcl.listener.maintenance: class: DCL\ParametersBundle\Listener\MaintenanceListener arguments: ["@service_container"] tags: - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
La requête comme vous le voyez s'exécute 4 fois ! Alors que je ne la demande qu'une fois. Si on va sur une autre page que l'accueil, la requête est bien exécuté qu'une seule fois. Bien évidemment, cela ne représente que 2ms niveau requête pour l'ensemble, mais si on multiplie par le nombre de requête que je vais devoir mettre, on arrivera à tes temps de chargement assez long, surtout quand le site sera beaucoup fréquenté.
J'aurais donc besoin de vos conseils, et de voir quel est l'origine de cette quadruple exécution.
Au besoin, voici la classe MaintenanceListener si cela vous intéresse.
Je vous remercie par avance de votre aide et de vos conseils,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 class MaintenanceListener { private $container; public function __construct(ContainerInterface $container) { $this->container = $container; } public function onKernelRequest(GetResponseEvent $event) { $doctrine = $this->container->get('doctrine') ->getManager() ->getRepository('DCLParametersBundle:Parameters') ->findOneByName('maintenance_mode'); $maintenance = $doctrine->getValue(); $debug = in_array($this->container->get('kernel')->getEnvironment(), array('test', 'dev')); if ($maintenance && !$debug) { $engine = $this->container->get('templating'); $content = $engine->render('::maintenance.html.twig'); $event->setResponse(new Response($content, 503)); $event->stopPropagation(); } } }
Marc
Partager