Optimiser la vitesse de chargement du panneau d'administration de Bootstrap
Performance Enhancement Guide

Apprenez à configurer correctement vos listes avec le générateur CRUD pour éviter les temps de chargement trop longs.


Optimiser la vitesse de chargement de votre panneau d'administration

Avec PHP CRUD Generator, le temps de chargement des listes READ de votre panneau d'administration devrait généralement être rapide et ne pas dépasser quelques secondes au maximum. Des temps de chargement anormalement longs sont dus soit à la configuration de vos filtres, soit au nombre de requêtes nécessaires pour afficher les données.

Dans les deux cas, la solution est simple à mettre en œuvre en utilisant le générateur CRUD. Voici comment procéder pour réduire votre temps de chargement.


1. Filtres d'enregistrement

Fonctionnement

Select with all records loaded
Sélectionner avec tous les enregistrements chargés

Lorsque vous ajoutez un filtre d'enregistrement à votre liste READ, le programme envoie la requête SQL et récupère tous les enregistrements de la base de données. Il génère ensuite un champ de sélection qui comprendra autant d'options que vous avez d'enregistrements.

C'est parfait pour un tableau qui contient quelques dizaines, voire quelques centaines d'enregistrements, mais si votre tableau en contient des milliers, cela augmentera considérablement le temps de chargement de la page.

Solution

Dans ce cas, vous devez activer le chargement Ajax lorsque vous créez votre filtre à partir du générateur CRUD.
Si le chargement Ajax est activé, la page chargera un simple champ de saisie lié à un plugin d'autocomplétion. Le plugin récupérera les enregistrements à la demande pour l'autocomplétion. De cette manière, vous évitez de charger des données lourdes et inutiles lors du chargement de votre page principale.

Enable Ajax loading for your filter from the generator
Activez le chargement Ajax pour votre filtre à partir du générateur
Admin filter with Ajax loading enabled
Filtre d'administration avec chargement Ajax activé

Remarque : les filtres sont interdépendants. Par exemple, si une liste de films peut être filtrée par titre et par langue, si vous n'affichez que les films en anglais, le filtre du titre ne proposera que les titres des films en anglais.


2. Requêtes envoyées à la base de données

Fonctionnement

Lorsque vous chargez une liste d'enregistrements dans votre base de données, le programme effectue les requêtes suivantes :

  • Une requête pour récupérer le nombre total d'enregistrements, ce qui permet de construire la pagination.
  • Une requête pour récupérer les enregistrements affichés sur la page.
  • Une requête par filtre si vous avez activé des filtres et qu'ils ne sont pas chargés avec Ajax.

Si vous avez activé les relations externes, le programme effectuera également les requêtes suivantes :

  • Une requête par enregistrement et par relation pour récupérer les enregistrements liés (si vous avez activé les relations externes).

Exemple

Admin panel count queries
Requêtes de comptage du panneau d'administration

Par exemple, si vous avez une table de films liée à une table d'acteurs et à une table de catégories, et que vous avez activé l'affichage des noms et des catégories d'acteurs dans la liste des films, le programme effectuera deux requêtes pour chaque film afin de récupérer les noms et les catégories d'acteurs.
Si vous affichez 20 films par page, vous obtenez ceci :

  1. Pagination : 1 requête
  2. Enregistrements : 1 requête
  3. Filtres non-Ajax : 1 requête par filtre
  4. Acteurs (relation externe) : 20 requêtes
  5. Catégories (relation externe) : 20 requêtes

Total : 42 requêtes (+ filtres)

Solution

En général, même s'il y a un nombre relativement important de requêtes, cela ne pose pas de problème car ces requêtes ne renvoient qu'un nombre limité d'enregistrements. Elles sont donc efficaces et rapides. Si toutefois vous avez des temps de chargement trop longs, vous pouvez désactiver l'affichage de certaines relations externes dans la liste principale et les afficher sur une autre page. Vous pouvez également limiter le nombre d'enregistrements affichés par page.


3. Utiliser les index MySQL

Fonctionnement

Cela ne concerne pas le PHPCG, mais directement la structure de votre base de données. Ajoutez un index à chaque champ qui sera utilisé régulièrement dans vos requêtes. Le moteur MySQL est plus rapide et plus efficace avec des champs indexés.

Solution

Pour indexer vos champs :

  1. Ouvrez votre gestionnaire de base de données (phpMyAdmin ou autre).
  2. Montrez la structure de votre tableau.
  3. Cochez les champs que vous souhaitez indexer.
  4. Cliquez sur le bouton index.

Page principale du tutoriel CRUD PHP