Optimisation de la vitesse d’affichage de la liste des étudiants

Au départ, les tests effectués pour l’affichage de la liste des étudiants inscrits à une étape ou un élément pédagogique étaient fait sur une promotion d’une dizaine d’étudiants et il n’y avait aucun problème notable. Cependant, après avoir testé une promotion de 240 étudiants (et augmenté le timeout d’une portlet dans uportal) il s’est avéré que le laps de temps écoulé entre la validation du formulaire contenant le code étape et la visualisation de la liste sur la page suivante pouvait attendre 10 secondes, ce qui est beaucoup trop long pour prétendre à un certain confort de navigation. Il fallait donc résoudre ce problème. Nous avons procédé en trois étapes.

 

1/ gain de temps sur les requêtes SQL :

Précédemment, lorsqu’un utilisateur validait sa saisie, on récupérait la liste de tous les étudiants appartenant à cette étape (ou cet élément pédagogique), puis pour chacun d’eux on récupérait, avec une autre requête, son login pour constituer son adresse mail. On avait donc une requête pour chaque étudiant, et pour une ‘promotion’ de 200 étudiants, le temps d’exécution des 200 requêtes pouvait atteindre les 5secondes. Il fallait donc régler ce premier problème. Pour cela nous avons ajouté la récupération du login dans la requête principale qui récupère les étudiants d’une étape (ou d’un élément pédagogique) et les informations les concernant. Par exemple (de manière très simplifiée) une requête du type :

Select nom, prenom, adresse, date_naissance

From etudiant, etape

Where etudiant.code=etape.cod_etu

Devient

Select nom, prenom, adresse, date_naissance, login

From etudiant, etape, llogin

Where etudiant.code=etape.cod_etu

And llogin.cod_etu=etudiant.code

Nous avons ainsi gagné près de 5 secondes.

 

2/ Substitution des tags <c :forEach

Après la première modification, qui nous faisait gagnée un certain temps, il s’est avéré que l’affichage lui-même, c’est-à-dire après la redirection sur la page xhtml concernée, pouvait durer jusqu’à 5 secondes pour 240 étudiants. Ce qui était d’autant plus gênant que, contrairement l’attente due aux requêtes SQL, ce laps de temps était inévitable ; on avait 5 secondes d’attente après avoir fait la touche de retour depuis le dossier d’un étudiant ou depuis le trombinoscope par exemple.

Ceci était du au tag jstl ‘c :forEach’ que nous utilisions pour « rendre » la liste d’étudiant dans un tableau html. Nous l’avons remplacé par le tag tomahawk ‘<t:dataTable’ après avoir fait les modifications nécessaires (ajout du fichier tomahawk.taglib.xml et du paramètre facelets.LIBRARIES dans le web.xml).

 

3/ ajout d’un ‘dataScroller’ :

Suite à ces deux modifications, l’affichage des 240 étudiants durait approximativement 2 secondes. Nous avons donc décidé d’ajouter un dataScroller dans le footer de la datatable permettant ainsi d’afficher les étudiants par lots de 15, optimisant ainsi l’affichage de la page. Nous comptons prochainement rendre l’utilisation du Scroller paramétrage dans le fichier monDossierWeb.xml (utilisation facultative et ajustement du nombre d’étudiants affichés par page).

Laisser un commentaire