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


Onouriis
Réponse acceptée

Je ne sais pas si tu as trouvé ton bonheur mais j'ai eu le même problème lors de la mise en production sur un serveur mutualisé OVH.
http://forum.ovh.com/showthread.php?100242-Lenteur-requ%EAte-Ajax&p=615027
Cela pourra peut être t'aider. (je n'ai pas eu à faire cette manipulation lors de la migration vers CakePHP 3)

ciramor
Auteur
Réponse acceptée

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

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 ;)

avez vous limite lds requete ? avec field ?

avez vous limite lds requete ? avec field ?

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
Auteur

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
Auteur

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

le css/js pas minifie ?

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

ciramor
Auteur

Pareil de mon côté.

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.

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
Auteur

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

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 ;)

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
Auteur

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

ciramor
Auteur

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>

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
Auteur

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

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)

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
Auteur

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

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

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

PallMallShow.