Bonjour,

Je développe actuellement un petit site sur CakePHP et j'ai un problème car mes pages, et principalement les pages faisant des requêtes dans la base de données mettent vraiment beaucoup de temps à charger (jusque 7 secondes pour certaines).

Y a t-il une solution très efficace à cela ?

Merci d'avance

8 réponses


Bonjour,
Déjà il te faut identifier le problème

  • pourquoi cela met il autant de temps sur ta base ? N'y a-t-il pas moyen d'indexer certains éléments ?
  • y a-t-il une bonne gestion du cache serveur ?
  • Est ce que la vue ne fait pas trop appel à des Helpers complexes ? (qui pourraient appeler des services externes par exemple).
  • Est ce que le temps vient de : 1) la bdd ? 2) la génération de la vue ? 3) l'envoi au client ?

Ce que je fais pour ce genre de choses, c'est un affichage d'une page sans données, comme ça la page s'affiche en moins d'1s, et je charge mes données en ajax.

Il semblerait que CakePhp charge tous les Models déjà.
De plus, j'ai bien l'impression que mes passages de variables avec $this->set ralentissent beaucoup.
Et enfin, les redirect rallongent aussi le temps !

C'est vraiment problématique car c'est inacceptable en terme d'expérience utilisateur.

Si vous savez quoi faire ce serait vraiment super :D

Quand tu dis

Matthieu Petit:"Il semblerait que CakePhp charge tous les Controller déjà."

Il semblerait que tu n'ai pas compris le fonctionnement de type MVC, éventuellement tu pourrais charger tous les modèles, mais il nous faudrait un peux de ton code pour qu'on puisse comprendre.

Peux tu nous en dire un peu plus sur ta structure et nous copier les codes des éléments correspondant afin que l'on puisse t'aider.

Bonjour,

Lors de l'affichage d'une page "basique" il ne devrait pas y avoir de redirect car oui les redirect rallonge un peu.
Le site tourne sur windows? quel logiciel? ça peut être un facteur très important car souvent ça rame sur windows (genre wamp ou easyphp).

Il tourne sur un serveur Linux hébergé sur 1and1

Chalut,

Il faut que tu regardes que tes recursive soit régler à ton utilisation voulu. un recursive 2, tu es content ça marche mais ça te remonte x données dont tu n'as pas besoin.

Voilà une bonne piste à analyser =)

Merci pour ta réponse coloo, elle se rapproche de mon problème et est une solution de performance mais je crois que mon problème est ailleurs.

1 - Ma page redirige vers une action.
2 - Cette action fait appel à une API et redirige vers la page précédente
3 - Une fois redirigé cette page (point 1) fait à son tour appel à une API

J'ai bien l'impression que c'est cet appel à une API (deux fois) qui ralenti l'exécution. Ce même site web met déjà du temps quand il fait appel à l'API d'Indeed donc la, 2 appels font beaucoup.

Est-ce que quelqu'un sais comment réduire ce temps ? Je crois que ça va être compliqué car on est dans une problématique serveur la !

S'il n'y a aucune solution, comment feriez-vos pour améliorer le confort de l'utilisateur et qu'il est pas ou moins l'impression d'attendre ?

Merci d'avance pour vos réponses :)

Tu as deux moyens d'améliorations :

1) Parallélisme de tes requêtes
2) Asynchronisme

Pour le 1), voici le problème

RequeteA |---------------------|
RequeteB |--------------------------------|
---------------------------------------------------------------------
t(s) 0 1 2 3 4 5

Tu attends que la requeteA soit établie pour effectuer la requêteB.
Avec le parallélisme, tu peux avoir ça :

RequeteA |----------------------|
RequeteB |--------------------------------|
---------------------------------------------------------------------
t(s) 0 1 2 3 4 5

Résultat, tu peux afficher ton contenu au bout de 3s au lieu de 5s.

Pour le 2), voici comment le résoudre. Regarde comment fait Facebook, ils proposent un layout avec de fausses données (des images grises, ...) le temps que les requêtes s'exécutent.

L'idée s'est d'avoir une page index() sans aucune requête pour qu'elle s'affiche rapidement. Et tu fais tes appels à l'API en AJAX.