http://plinn.org 0
Plinn
   Documentation
   Téléchargements

Réfection complète des scripts AJAX

Tous les scripts javascript ont été ré-écrits, rationalisés, factorisés pour accélérer le chargement des pages. Bien entendu, une navigation sans javascript est toujours possible et pleinement fonctionnelle.

 

Une nouvelle méthode de rafraîchissement des pages

Tous les clicks sur les liens ou les envois de formulaire sont interceptés par un programme javascript qui ajoute aux requêtes http quelques paramètres supplémentaires pour indiquer au serveur, d'une part que le navigateur utilise javascript, et d'autre part, l'état de la page actuellement chargée. Ces compléments d'informations permettent au serveur d'envoyer en réponse un fichier xml qui encapsule les différents fragments de code html qui serviront à rafraîchir les zones (non contiguës) de la page. La fonction qui traite le fichier xml reçu insère les fragments html (dont le nombre est variable) dans la page active comme illustré sur le schéma ci-dessous (fig. 1).

Schéma de fonctionnement Plinn / Ajax
Fig. 1 : Schéma de fonctionnement du traitement des requêtes par javascript

La destination des fragments (emplacements dans la page) est spécifié dans le fichier xml. Une fois inséré, le fragment html est analysé pour détecter la présence éventuelle de scripts afin de les exécuter dans leur ordre d'apparition. En effet, lors de l'ajout de code html, le navigateur omet d'exécuter les scripts, c'est la raison pour laquelle cette étape est nécessaire.

 

Une approche similaire aux pages templates zope

Le système de fragments html que l'on insère dans une page existante n'est pas sans rappeler le fonctionnement des pages templates zope. La plupart du temps, l'homogénéité graphique d'un site zope repose sur une page template gabarit permettant de définir la mise en page générale ainsi que des zones modifiables – les slots – qui permettront aux pages appelantes d'injecter leurs contenus html. Dans la majorité des cas, l'assemblage gabarit + zones modifiables peut (et a intérêt à) être déléguée au navigateur car cela présente le double avantage de réduire les volumes transférés sur le réseau et les ressources serveur. Cette délégation demande deux choses distinctes que l'on trouve dans Plinn 2 :

— une page template de gabarit qui est capable de ne produire que les slots sous forme d'un fichier xml ;
— une application javascript permettant au navigateur d'incorporer les slots dans la page en cours.

 

Historique du navigateur opérationnel

Les fonctions d'historique d'un navigateur sont très ancrées dans les habitudes des internautes et malheureusement, à ce jour, les chargements réalisés par javascript ne peuvent pas provoquer de nouveaux états d'historique sur lesquels on pourrait revenir au moyen des incontournables boutons « page précédente » et « page suivante ». Actuellement, une seule solution technique est possible ; elle n'a comme seul mérite d'exister tant elle est inesthétique... Quoi qu'il en soit, Plinn ne pouvait faire l'impasse sur un point aussi crucial.

Voici plus précisément les données techniques du problème :
— pour des raisons de sécurité, javascript ne peut accéder en écriture aux données d'historique ;
— le seul moyen d'ajouter un état d'historique consiste à entrer une nouvelle url dans la barre d'adresse ;
— entrer une nouvelle url dans la barre d'adresse provoque irrémédiablement un chargement complet du navigateur, sauf si la modification ne porte que sur l'ancre (champ à droite du caractère « # » à la fin d'une url).

La conclusion est donc immédiate : pour rendre opérationnelles les fonctions d'historique tout en utilisant ajax, la seule alternative consiste à exploiter l'ancre des urls. Une autre explication assez didactique avec un exemple d'implémentation se trouve sur la page « Fixing the Back Button and Enabling Bookmarking for AJAX Apps ».