Temps de chargement

Par ciramor, il y a 11 ans


Bonjour à tous !

Tout d'abord, je tiens à dire que ce framework CakePHP est un vrai bijou pour les développeurs qui ne souhaitent pas s'emmêler les pinceaux avec Zend ou Symph.

J'ai donc codé un site complet (frontend/backend) grâce à ce dernier. Le fonctionnement est niquel.

Si je viens vers vous, c'est pour vous faire part du temps de chargement des requêtes, plus précisément, de la 1ère requête lorsque j'appelle une page. Peu importe l'appel, il faudra 5000ms + le reste des requêtes. Aucune requête ne démarre jamais avant cette fâmeuse barre des 5000ms. Tout ceci entrave l'expérience de l'utilisateur final et donc, paralise mon site.

Voilà, le dernier petit bémol avant de lancer la prod' !

Merci à tous pour votre lecture et un grand merci pour les futures aides ;)

Aperçu Console Web Réseau :
http://hpics.li/180794a

25 réponses

Azorgh, il y a 11 ans

Salut,

Et bien écoute j'ai remarqué la même chose il y a quelques jours.
Si quelqu'un trouve pourquoi, je serais aussi intéréssé. Je vais tout de même continuer à fouiller ce soir si je trouve quoi que ce soit sur le sujet ;)

Muxabble, il y a 11 ans

avez vous limite lds requete ? avec field ?

Muxabble, il y a 11 ans

avez vous limite lds requete ? avec field ?

Azorgh, il y a 11 ans

Personnellement oui, je choisis mes champs avec fields.

Par contre ce qui est bizzare, c'est que le chargement de la page, "visuellement" est quasi instatané. Par contre, une fois les données affichés, on attend 5 secondes avant que le chargement se termine.

ciramor, il y a 11 ans

Je n'ai pas limité les requêtes, mais je doute que cela soit la cause. Etant donné que j'ai fait un projet à côté, très similaire, mais sans délai d'attente de 5 secondes! Merci toutefois de la piste.

PS: Le pire, c'est que mon autre projet est bien plus "touffu" que ce dernier qui est très très basique...

ciramor, il y a 11 ans

En débuggant le code bout par bout, je vois que c'est dans mon layout "Default" que ça coince. Sans le layout, les pages se chargent en 200ms maximum. Je continue de creuser

Muxabble, il y a 11 ans

le css/js pas minifie ?

Azorgh, il y a 11 ans

Perso j'ai tout minifié a fond (sauf 10 lignes de JS).

ciramor, il y a 11 ans

Pareil de mon côté.

Azorgh, il y a 11 ans

Et de toute manière, dans le cas ou se serait un JS qui mettrait longtemps à charger, nous le verrions dans l'onglet NETWORK de la console non ?

Je ne comprend vraiment pas.

Sarith, il y a 11 ans

J'avais le même soucis. Mon site est dev entièrement CakePHP et la page d'accueil est une simple onepage.
Aucun problème à ce niveau mais dès qu'un membre se connecte à son espace ou qu'un visiteur essais de s'inscrire, catatrophe! ^^

J'ai décidé de passer sur Cake 3.0 et pour l'instant, aucun problème de lenteur, à voir mais c'est tout de même étrange.

ciramor, il y a 11 ans

Je rejoins PallMallShow. Chez moi, aucune requête n'est problèmatique il me semble. C'est juste que la récupération d'HTML (ConsoleWeb Network) fait toujours 5000+ ms. C'est tellement incompréhensible ! Si je modifie mon layout en fichier complètement vide, ça charge en 200 ms grand maximum. J'ai déjà testé les scripts du layout, et ils fonctionnent proprement.

Se frappe la tête contre son clavier

PS: Loone15, j'ai aucun problème sur CakePHP 3 aussi, mais par curiosité, j'aimerais régler ce problème sous CakePHP 2

Azorgh, il y a 11 ans

J'ai vais passer sur CakePHP 3 mais pas sur ce projet. Pas envie de tout me retapper ! Et je rejoins ciramor sur le faite que si on pouvais corriger le soucis plutôt que de le contourner ;)

ciramor, il y a 11 ans

Merci de ta réponse, Grafikart. Je posterai ici si je trouve ce qui cloche.

Grafikart, il y a 11 ans

Sur la console on voit clairement que c'est la page qui met du temps et pas les ressources. Si le retrait du layout boost le truc c'est que tu vois avoir laissé une fonction "lente" sur la partie layout.

De manière générale ne pas hésiter en prod à mettre un truc du genre de APC qui va mettre en cache ton code dans la mémoire pour un chargement bcp plus rapide.

ciramor, il y a 11 ans

Voici mon layout. Si je laisse que les tags <'html'><'/html'>, le chargement est okay.
Du moment où je laisse n'importe quel autre parcelle de code à l'intérieur, il renverra la page avec le délai de 5000 + ms.
Si vous avez une piste, je suis toujours preneur !

<!DOCTYPE html> <html> <head> <?php echo $this->Html->charset(); ?> <title> <?php echo $title_for_layout; ?> </title> <?php $this->Session->flash(); echo $this->Html->meta('icon'); echo $this->Html->css('styles'); echo $this->fetch('meta'); echo $this->Html->css("http://fonts.googleapis.com/css?family=Open+Sans:400,800", null, array('inline' => true)); echo $this->Html->css("layerslider", null, array('inline' => true)); echo $this->Html->script("scripts", array('inline' => true)); echo $this->Html->script("jquery", array('inline' => true)); echo $this->Html->script("jquery-easing-1.3", array('inline' => true)); echo $this->Html->script("jquery-transit-modified", array('inline' => true)); echo $this->Html->script("layerslider.transitions", array('inline' => true)); echo $this->Html->script("layerslider.kreaturamedia.jquery", array('inline' => true)); echo $this->Html->script("layerslider", array('inline' => true)); echo $this->fetch('css'); echo $this->fetch('script'); ?> <!--[if lt IE 9]> <?php echo $this->Html->script("html5", array('inline' => true)); ?> <![endif]--> </head> <body> <!-- Header --> <div id="header"> <div class="container"> <?php echo $this->element('menu'); ?> <hr class="hidden" /> </div> </div> <!-- Fin du header --> <!-- Slider --> <div id="layerslider-container-fw"> <div id="layerslider" style="width: 100%; height: 200px; margin: 0px auto; "> <div class="ls-layer" style="slidedirection: right;"> <img src="/img/upload/slideshow/1.png" class="ls-bg" alt="Slide background"> </div> <div class="ls-layer" style="slidedirection: right;"> <img src="/img/upload/slideshow/2.png" class="ls-bg" alt="Slide background"> </div> <div class="ls-layer" style="slidedirection: right;"> <img src="/img/upload/slideshow/3.png" class="ls-bg" alt="Slide background"> </div> <div class="ls-layer" style="slidedirection: right;"> <img src="/img/upload/slideshow/4.png" class="ls-bg" alt="Slide background"> </div> </div> </div> <!-- Fin du slider --> <!-- Content --> <div id="content"> <?php echo $content_for_layout; ?> <!-- Fin du Content --> </div> <!-- Footer --> <div id="footer"> <div class="container"> <div id="menu_footer"> <ul> <li <?php if($this->params['controller'] == "news") echo 'class=current'; ?> > <?php echo $this->Html->link('<span>Accueil</span>', array('controller' => 'news', 'action' => 'index') , array('escape' => false)); ?> </li> <li <?php if($this->params['controller'] == "buildings") echo 'class=current'; ?> > <?php echo $this->Html->link('<span>Constructions</span>', array('controller' => 'buildings', 'action' => 'index') , array('escape' => false)); ?> </li> <li <?php if($this->params['controller'] == "achievements") echo 'class=current'; ?> > <?php echo $this->Html->link('<span>Réalisations</span>', array('controller' => 'achievements', 'action' => 'index') , array('escape' => false)); ?> </li> <li <?php if($this->params['controller'] == "property") echo 'class=current'; ?> > <?php echo $this->Html->link('<span>Immobiliers</span>', array('controller' => 'property', 'action' => 'index') , array('escape' => false)); ?> </li> <li <?php if($this->params['controller'] == "references") echo 'class=current'; ?> > <?php echo $this->Html->link('<span>Références</span>', array('controller' => 'references', 'action' => 'index') , array('escape' => false)); ?> </li> <li <?php if($this->params['controller'] == "organization") echo 'class=current'; ?> > <?php echo $this->Html->link('<span>Organisation</span>', array('controller' => 'organization', 'action' => 'index') , array('escape' => false)); ?> </li> <li <?php if($this->params['controller'] == "contacts") echo 'class=current'; ?> > <?php echo $this->Html->link('<span>Contacts</span>', array('controller' => 'contacts', 'action' => 'index') , array('escape' => false)); ?> </li> </ul> <hr class="hidden" /> </div> <div id="copyright"> © XXXXXXXXXX - </div> </div> </div> </body> </html>
Azorgh, il y a 11 ans

Oui c'est normal ça. Tu passe en mode "production" donc beaucoup de moins de LOGS etc ...
Le soucis c'est que moi je suis en PROD et c'est toujours aussi lent xD

ciramor, il y a 11 ans

Je crois qu'on est bon pour migrer nos projets sur CakePHP3. Je rame trop à essayer de comprendre et débugger ceci. x)

Grafikart, il y a 11 ans

Tu as essayé un debugguer pour voir le temps d'éxécution de chaque fonction et voir les points qui pouvait entrainer les lenteurs (xebug + webgrind)

Huggy, il y a 11 ans

Et pourquoi pas une petite fonction qui trace le timing dans un fichier ?

function logTxt($log){ $fp = fopen('logtiming.txt','a+'); fseek($fp,SEEK_END); $t = microtime(true); fputs($fp, $t . " " .$log."\r\n"); fclose($fp); } logTxt("ok1"); ... logTxt'"ok2");

dans le fichier
1427489083.8483 ok1
1427489083.8806 ok2

on peut bien sûr améliorer en gardant les deltas

ciramor, il y a 11 ans

Merci à tous pour vos réponses. Je vais regarder vos solutions !

ciramor, il y a 11 ans

Mon dieu! Onouriis, tu es un génie! Le problème venait effectivement de là !
A tous ceux qui cherchent encore... il suffit d'ajouter sans les ' :

<'IfModule mod_deflate.c'>
SetEnv no-gzip 1
<'/IfModule'>

dans le htaccess ! Toutes mes pages se chargent en 400ms grand max <3
Merci pour tout

Onouriis, il y a 11 ans

Je suis ravi d'avoir pu t'aider.
Bon développement.

Azorgh, il y a 11 ans

En effet merci Onouriis, ça a fonctionné pour moi aussi !
J'aurais appris quelque chose :D !

PallMallShow.