PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 23 → Différer un chargement dans une page
Différer un chargement dans une page
Débuté par Chris, 06 nov. 2018 09:04 - 10 réponses
Membre enregistré
34 messages
Posté le 06 novembre 2018 - 09:04
Bonjour,

Sur un site dynamique j'ai une page qui prends un peu de temps à se charger dû à des requêtes un peu grosse. Mais je souhaite garder le principe.
Ce que j'essai de faire c'est afficher la page et charger son contenu en différé sans bloquer l'utilisateur.
J'utilise AjaxExecuteAsynchrone().
Le problème c'est que si je veux changer de page, il y a un délai d'attente que la fonction serveur soit quand même exécutée.

Du coup je cherche un vrai moyen permettant de faire un chargement différé dans une page.
Comme procédez-vous ?
Membre enregistré
34 messages
Posté le 08 novembre 2018 - 08:55
Dans Windev, j'utilise une tâche parralèle pour les traiteement serveur et un ExecuteThreadPrincipal pour l'affichage.
Y a t-il un schémas de programmation similaire en Webdev ?
Membre enregistré
823 messages
Popularité : +3 (3 votes)
Posté le 08 novembre 2018 - 11:19
Il faut comprendre le principe de AjaxExecuteAsynchrone()

Le navigateur demande au serveur d'executer une action sans attendre de réponse.
La partie navigateur est donc disponible pour d'autres traitements navigateurs.
Pendant ce temps, la session SERVEUR est en train de bosser.

Si le navigateur fait une nouvelle demande au serveur alors que la session SERVEUR est toujours occupée par la précédente requete, il est évident qu'il y aura un délai d'attente. La nouvelle requete est dans la file d'attente coté serveur, il faudra attendre la fin du premier traitement.

Pour résoudre ce problème, il faudrait essayer (Attention, je n'ai pas testé c'est une hypothèse) ceci :
La procédure SERVEUR exécutée par AjaxExecuteAsynchrone() devrait effectuer son traitement dans un thread secondaire coté serveur, laissant ainsi la session serveur disponible pour une nouvelle demande.

Ainsi, une demande de changement de page ne devrait plus poser de problème puisque la session ne sera plus bloquée par un traitement en cours dans le thread principal.
Membre enregistré
34 messages
Posté le 08 novembre 2018 - 14:54
Je suis preneur d'une solution qui permet de faire des threads.
D'après mes tests, on ne peux pas faire de retour vers la page que ce soit :
- ThreadExecute()
- En ayant paramétré la procédure serveur comme thread (bouton en haut à droite dans le code) (Equivalent threadexecute)
- TâcheParallèleExécute

D'ailleurs je comprends pas du tout comment fonction le TâcheParallèleExécute() en Webdev :-(
Je n'ai trouvé aucun exemple qui parle de tâche parallèle ou thread en Webdev.
Membre enregistré
823 messages
Popularité : +3 (3 votes)
Posté le 08 novembre 2018 - 15:55
http://doc.pcsoft.fr/fr-FR/?3077004
ThreadExecute()

A la fin du traitement il est possible de faire un
ExecuteThreadPrincipal() pour effectuer les modifications né
nécéssaires sur les données communes.

Pour le retour de la page je ne sais pas.. comment faisait tu déjà avec ton AjaxExecuteAsynchrone() ?
Membre enregistré
34 messages
Posté le 08 novembre 2018 - 16:03
C'est bien ça que j'ai essayé mais la page n'est pas modifiée à l'affichage par le code dans ExecuteThreadPrincipal().
Avec AjaxExecuteAsynchrone c'est une procédure navigateur qui s'occupe de l'affichage...

Quelqu'un ici a t-il déjà utilisé ExecuteThreadPrincipal en WEBDEV ?
Membre enregistré
823 messages
Popularité : +3 (3 votes)
Posté le 08 novembre 2018 - 16:06
Ha oui c'est vrai il y une callback a la fin du traitement avec AjaxExecuteAsynchrone() ...
C'est pas simple du coup..

Voir du coté des websocket peut etre ??
Membre enregistré
34 messages
Posté le 08 novembre 2018 - 16:38
J'ai pas mal de traitement de ce genre que j'aimerais mettre en place.
Par exemple afficher un tableau, afficher un nombre de message non lus, ...
Je vais pas me faire un serveur de websocket par fonction, ça risque de faire grosse usine à gaz.
Membre enregistré
823 messages
Popularité : +3 (3 votes)
Posté le 08 novembre 2018 - 18:17
Apparemment il est possible, avant de changer de page, de vérifier si la procédure est toujours en cours et de la stopper le cas échéant :




Membre enregistré
34 messages
Posté le 08 novembre 2018 - 20:23
Malheuresement AjaxAnnuleAppelAsynchrone() ne permet pas l'arrêt de la procédure serveur. C'est juste la procédure navigateur qui sera stoppée s'il elle prends du temps à s'exécuter (ce qui est très rarement le cas).
Membre enregistré
823 messages
Popularité : +3 (3 votes)
Posté le 09 novembre 2018 - 09:22
Ha o ui j'avais mal lu.. ça permet surtout aussi je pense de ne pas traiter la callback du coup.