Optimisation

Utiliser les vues SQL dans CakePHP

Une vue SQL est une sorte de table virtuelle construite à partir d’une requête SQL. Nous allons nous en servir pour présenter une liste globale des derniers contenus ajoutés dans plusieurs tables de la base de données. Lire la suite

I18n : optimiser la table des traductions

La solution de gestion du multilingue de CakePHP suppose le stockage de tous les champs textuels dans une seule table nommée ‘i18n’. Le principe est simple à mettre en place et fonctionne parfaitement, mais sur une application gourmande, il convient d’optimiser cette table. Lire la suite

Quelques astuces pour la génération des requêtes SQL

Nous allons voir comment contrôler finement les requêtes SQL préparées par CakePHP sans nous écarter des méthodes habituelles, c’est à dire le passage d’un tableau d’options à la méthode Model::find();. Lire la suite

Le piège du counterCache avec un modèle en arbre : le CounterBehavior

Dans le tutoriel précédent : Mise en place du counterCache : un piège à éviter, nous avions vu comment mettre en place le counterCache entre deux modèles associés en belongsTo et comment mettre à jour le compteur d’origine, lorsqu’un enregistrement change de parent.

L’astuce consistait à placer notre logique dans les callbacks beforeSave et afterSave du modèle Post, dans lequel est déclarée l’association belongsTo avec le modèle Category. Tout cela fonctionne bien pour un modèle dont les enregistrements n’ont aucune relation entre eux.

Mais si le modèle Category est construit comme un arbre hiérarchique, avec des sous-catégories sur plusieurs niveaux, l’astuce ne met à jour que le compteur de la branche finale à laquelle est attaché le post. Si nous avions besoin d’afficher le nombre total d’enregistrements de tous les enfants d’une branche parente, il faudrait faire une requête ou un traitement PHP spécifique pour le calculer et le passer à la vue. Lire la suite

Mise en place du counterCache : un piège à éviter

Le counterCache est une fonctionnalité très intéressante pour économiser des requêtes dans une relation belongsTo entre deux modèles. Le principe est simple : il suffit d’ajouter une colonne dans la table parente pour enregistrer le nombre d’enfants. Dans le cadre d’un simple blog avec des Posts et des Commentaires, cela permet d’afficher le nombre de Commentaires d’un Post sans avoir à les compter, puisque le compte se fait automatiquement dans une colonne de la table parent, Post, à chaque ajout d’un enfant, un Commentaire. Lire la suite

Eviter les requestAction dans le layout

Il n’est pas un projet de site qui ne fasse apparaître certains éléments dynamiques dans le layout général, comme un menu construit à partir d’une liste de catégories, une liste des dernières actualités publiées ou des commentaires récents. CakePHP propose pour ce faire une méthode bien pratique mais très gourmande en ressources, la méthode requestAction(). Nous allons proposer une autre approche qui évite d’y faire appel. Lire la suite

Optimiser les URL pour le référencement

Nous allons voir comment générer facilement des suffixes d’URL optimisés pour le référencement. Prenons l’exemple d’un catalogue de produits. Par défaut, une URL que CakePHP va produire pour une fiche produit va ressembler à ceci : /produits/view/12 (le nom du Contrôleur, le nom de l’action et l’id du produit à afficher). Nous aimerions qu’elle soit plutôt de la forme /article/12/Livre-de-recettes. Lire la suite

Optimiser les requêtes SQL de CakePHP

Lorsque l’on crée une application dont les tables contiennent des dizaines ou des centaines de milliers d’enregistrements, il s’agit de bien contrôler les requêtes SQL qui vont être lancées afin d’éviter les « goulets d’étranglement » qui ne manqueront pas de ralentir l’application, voire de planter le serveur de base de données.

Au sommaire :

  1. Définir les bons index ;
  2. Spécifier les champs attendus ;
  3. Régler le niveau de récursivité ;
  4. Utiliser le Comportement Containable ;
  5. Forcer les jointures avec les relations hasMany.
Lire la suite