La base de données PostgreSQL du projet MAVISE fournit les données de base sur l’ensemble du marché audiovisuel accessible dans l’Union européenne.
Elle a été développée par Easter-eggs en collaboration avec l’Observatoire Européen de l’Audiovisuel, pour le compte de la direction générale de la communication de la Commission européenne.
Nous allons décrire dans cet article les différentes méthodes que nous avons mises en place pour optimiser les performances de cette application.
La base de données contient un grand nombre d’informations :
L’ensemble de ces données ne sont pas accessibles au grand public.
D’un point de vue technique, la base de données PostgreSQL contient :
Cela donne une petite idée de la taille de l’application.
La complexité de l’application, la quantité de données disponibles et leur affichage ont soulevé certaines problématiques pour gérer les transferts entre le client et le serveur Web et les requêtes complexes.
Pour l’optimisation de la base de données, il faut être vigilant sur les points suivants :
– L’ORM (DB_DataObject dans notre cas) ne doit faire aucune opération de jointure . Il utilise toujours une vue dédiée pour chaque fonctionnalité ;
– Chaque vue ne calcule que les champs qui sont nécessaires à l’affichage ;
– Le plan d’exécution de chaque vue est optimisé à l’aide d’index. Pour trouver quels sont les index à créer, il faut utiliser l’instruction EXPLAIN ANALYSE , comme décrit sur le wiki de PostgreSQL : Using EXPLAIN.
Le travail principal consiste donc à exécuter toutes les vues de l’application pour optimiser les plans d’exécution à l’aide d’index.
Pour mieux comprendre la sortie de l’instruction EXPLAIN ANALYSE, nous utilisons l’outil suivant : explain-analyze.info.
Pour savoir quelles sont les optimisations les plus pertinentes, il est intéressant d’analyser les logs du serveur PostgreSQL à l’aide du logiciel Practical Query Analysis.
Il faut aussi “tuner” la configuration du serveur de base de données pour utiliser le maximum de la mémoire disponible sur le serveur.
Nous avons utilisé le framework Javascript Mootools, le contrôleur de tableau dhtmlxGrid et l’éditeur de contenu TinyMCE.
Dans chaque page de l’application, il faut veiller à ne charger que les fichiers nécessaires.
En effet, ces outils, bien que très pratiques, sont très volumineux et augmentent la taille des pages dans des proportions importantes.
Dans certains cas, nous avons dépassé plus de 640 Ko de code Javascript dans une page !
Les solutions que nous avons mises en place pour réduire la taille de ces fichiers :
L’application dispose de nombreux systèmes de cache :
Nous avons travaillé pour réduire au maximum la taille des échanges entre le navigateur web et le serveur.
Pour cela nous avons utilisé la compression Gzip sur :
Celle-ci est réalisée par le gestionnaire de tampon de PHP, à l’aide de la fonction ob_gzhandler .
L’optimisation d’une application est toujours empirique, il est nécessaire d’avoir de bons outils pour observer les effets des modifications.
Pour cela nous avons utilisé :
Pour finir, voici quelques liens très intéressants sur l’optimisation d’une application Web :