Bonjour,
Je termine un site avec cakephp.
C'est plus un shop ou il y a 3000 articles avec auntant d'images.
Quand je clique sur une categorie il affiche (pagination) les 12 premieres articles. Mais il est extrementment lent. Jusqu'a 10sec pour afficher les 12 articles
Dans mon fichier core.php j'ai changer ceci
Configure::write('Cache.disable', false);
Aussi, les images ne sont pas si grande que ca 450x300.
Le truc c'est que plugin de Garfikart les redomenssionnes
echo $this->Image->resize('/img/Articles/no-image.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
et crée une nouvelle image a 180x120.
Donc au premier chargement, on peut comprendre que ca prend un peu de temps, mais vu qu'il cree une nouvelle image à la bonne taille, dans le but de ne pas recréer une image a chaque fois, la deuxieme fois, ca doit ne pas prendre plus de temps?
Que puis-je controler pour améliorer ceci?
Milles mercis
la mise en cache c'est bien mais ce n'est pas la solution ultime.
ouvre une console de développement dans Chrome, va à l'onglet Networks et regarde le nombre de requêtes et le temps qu'elles mettent.
tu verras rapidement où se situent le problème. si ça vient des images, cherche à les compresser. si ça vient du js, cherche à le minifier. si ça vient de la page html, il y a deux solutions :
Sans avoir fait les test moi-même, Xdebug est connu pour rendre l’exécution des scripts nettement plus longue ... je ne sais pas s'il est activé dans ta config, mais si tu passes en prod pense bien a le virer.
Pour ce qui est du cache, c'est bien d'enlever le disable mais encore faut-il qu'il soit installé, non ? tu es sur d'avoir APC (ou un autre) correctement configuré ?
Enfin la question est peut-être débile (je ne connais pas cakePHP ni le plugin de Graf'), mais t'es bien sur qu'il n'y a pas de redimensionnement de tes images a chaque fois que tu appelles ton truc ?
Hello,
je vous remercie pour vos réponses.
Voici mes réponses.
@Amethise
function index(){
$this->Article->contain('Tag'); // Ceci a été ajouté pour la jointure des tag (ArticlessTags)
$this->paginate = array('Article'=>array('limit=>'12','order'=>'created DESC, name ASC'));
$d'articles'] = $this->Paginate('Article',array('type'=>'article','online'=>1,'created <= NOW()'));
$this->Session->write('Page.description',__("Articles et accessoires de sport. Mobilier urbain et les équipements pour collectivités."));
$this->Session->write('Page.keywords',__("mobilier,urbain,equipements,collectivités,sport,accessoires"));
$this->set($d);
$this->render('thumbnails');
}
Il y a d'autre action mais qui se ressmble mais voici la principale
@prbaron
Il y a pas mal de requete, mais je ne sais ce que ca représente
En gros il prend 37ms par image. Il y a en a 12
Il y a un scrpt qui prend 106ms
le logo prend 141ms
Le temps est carable avec Safari et Firefox.
Mais je pense que c'est surement a cause des images, car pour la page contact et presentation le temps est nettement inférieur mais 12 ce n'est pas enorme.
Oui je pense que le problème vient de là
<div class="overflow-hidden">
<?php
# App::uses('Folder', 'Utility');
# $dir = new Folder(APP.'webroot'.DS.'img'.DS.'Articles'.DS);/* Défini le chemin du répertoire */
# $files = $dir->findRecursive($v'image']);/* Trouve de façon récursive les fichiers se nommant */
$files="";
if(!empty($files)){
if(empty($v'image'])){
echo $this->Image->resize('/img/Articles/no-image.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}else{
echo $this->Image->resize('/img/Articles/'.$v'image'], 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
}else{
echo $this->Image->resize('/img/Articles/no-image-found.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
?>
</div>
Comme ceci ca va vite.
Comme ceci c'est lent, mais c'est genant car je dois controller si l0image existe dans le dossier image
<div class="overflow-hidden">
<?php
App::uses('Folder', 'Utility');
$dir = new Folder(APP.'webroot'.DS.'img'.DS.'Articles'.DS);/* Défini le chemin du répertoire */
$files = $dir->findRecursive($v'image']);/* Trouve de façon récursive les fichiers se nommant */
#$files="";
if(!empty($files)){
if(empty($v'image'])){
echo $this->Image->resize('/img/Articles/no-image.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}else{
echo $this->Image->resize('/img/Articles/'.$v'image'], 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
}else{
echo $this->Image->resize('/img/Articles/no-image-found.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
?>
</div>
J'essaye encore
J'ai finalement remplacer mon code commde ceci
Anciennement:
<div class="overflow-hidden">
<?php
App::uses('Folder', 'Utility');
$dir = new Folder(APP.'webroot'.DS.'img'.DS.'Articles'.DS);/* Défini le chemin du répertoire */
$files = $dir->findRecursive($v'image']);/* Trouve de façon récursive les fichiers se nommant */
if(!empty($files)){
if(empty($v'image'])){
echo $this->Image->resize('/img/Articles/no-image.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}else{
echo $this->Image->resize('/img/Articles/'.$v'image'], 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
}else{
echo $this->Image->resize('/img/Articles/no-image-found.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
?>
</div>
Maintenant:
<div class="overflow-hidden">
<?php
$filename = APP.'webroot'.DS.'img'.DS.'Articles'.DS.$v'image'];
if(file_exists($filename)){
if(empty($v'image'])){
echo $this->Image->resize('/img/Articles/no-image.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}else{
echo $this->Image->resize('/img/Articles/'.$v'image'], 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
}else{
echo $this->Image->resize('/img/Articles/no-image-found.jpg', 180, 120, array('class'=>'img-responsive','alt'=>$v'name'],'title'=>$v'name']));
}
?>
</div>
Ca va bien mieux.
Auriez-vous un commentaire?