QuentinC a écrit :
Bonne année, et vive mon 6000ème post !
Bravo pour cette importante somme de travail au service de tous!
QuentinC a écrit :
La remarque d'Olivier revient à ce dont j'avais déjà fait allusion dans un de mes posts précédents.
Pourquoi s'évertuer à utiliser AJAX quand tu pourrais charger directement la page avec son contenu final, avec PHP ou un autre langage côté serveur ?
Je me "m'évertue pas" à utiliser AJAX: je l'utilise simplement quand il correspond à mes besoins, comme n'importe quelle autre techno.
Je crois avoir expliqué pourquoi: si je voulais faire cela en PHP (ce que j'ai fait dans d'autre sites) il faudrait que le propriétaire du site -- qui, je le répète, est un égyptologue eta démarré son site en HTML basique -- se mette à écrire des choses dans un fichier qu'il ne connait pas, à savoir un fichier dont l'extension est '.php', qui contient des choses telles que <?php ... >?, include_once, des $ devant toutes les variables, etc.
QuentinC a écrit :
Tu as deux approches pour gérer l'asynchronisme:
1. Soit tu affiches quelque chose dès que c'est chargé
2. Soit tu attends que tout soit chargé avant d'afficher
Comment fais tu pour retarder
l'affichage de l'ensemble de la page?
C'est bien le point qui m'arrête et pour lequel je demande de l'aide.
Pour l'instant, mon programme avec chargement asynchrone produit l'effet suivant:
1) il affiche la page avec les <section> vides
2) il remplit les <sections> avec ce qui vient de mes requêtes AJAX.
C'est tout à fait normal, mais l'effet sur l'utilisateur est désastreux, car le chargement prend environ 1 ou 2 dixièmes de secondes, assez pour que l'utilisateur voie un horrible clignotement.
QuentinC a écrit :
Même si tu choisis l'approche n°2, comme je l'ai déjà expliqué plus haut, tu gagneras en temps de chargement par rapport à la solution synchrone. Donc si tu persistes dans AJAX pour ce cas, oublie vraiment la version synchrone, elle est mauvaise à tout point de vue (sauf pour sa simplicité de programmation).
Franchement je me moque que le téléchargement et donc l'affichage prenne 1 ou 2 dixièmes de secondes de plus. Ce n'est pas la simplicité de la programmation qui me gêne
(en 50 ans de carrière, j'en ai fait d'autres!). C'est quand j'ai eu terminé la version synchrone que je me suis rendu compte du résultat, ce que j'aurais dû anticiper.
QuentinC a écrit :
L'approche n°2 est peut-être un peu plus compliquée à mettre en place, mais pas tant que ça. Sur les navigateurs récents, tu peux utiliser les promesses (Promise) pour avoir un code clair et bien structuré.
Ensuite avec Promise.all c'est facile de faire une promesse qui se déclenche (attend, si on veut) quand les 3 ou 4 qui doivent être synchronisées sont toutes terminées.
Ca va encore plus loin avec l'API fetch qui simplifie beaucoup AJAX pour la récupération de données dans ce genre, et qui retourne directement une promesse sans devoir bidouiller, mais ce n'est pas encore supporté partout à moins d'utiliser du code de compatibilité.
Encore des choses qu'il faudrait que j'apprenne.
Mais avec mon âge et mon état de santé, je n'ai plus vraiment le temps d'apprendre de nouvelles choses si je n'en ai pas absolument besoin...