PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WEBDEV 23 → Différer un chargement dans une page
Différer un chargement dans une page
Iniciado por Chris, 06,nov. 2018 09:04 - 10 respuestas
Miembro registrado
34 mensajes
Publicado el 06,noviembre 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 ?
Miembro registrado
34 mensajes
Publicado el 08,noviembre 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 ?
Miembro registrado
822 mensajes
Popularité : +3 (3 votes)
Publicado el 08,noviembre 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.
Miembro registrado
34 mensajes
Publicado el 08,noviembre 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.
Miembro registrado
822 mensajes
Popularité : +3 (3 votes)
Publicado el 08,noviembre 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() ?
Miembro registrado
34 mensajes
Publicado el 08,noviembre 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 ?
Miembro registrado
822 mensajes
Popularité : +3 (3 votes)
Publicado el 08,noviembre 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 ??
Miembro registrado
34 mensajes
Publicado el 08,noviembre 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.
Miembro registrado
822 mensajes
Popularité : +3 (3 votes)
Publicado el 08,noviembre 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 :




Miembro registrado
34 mensajes
Publicado el 08,noviembre 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).
Miembro registrado
822 mensajes
Popularité : +3 (3 votes)
Publicado el 09,noviembre 2018 - 09:22
Ha o ui j'avais mal lu.. ça permet surtout aussi je pense de ne pas traiter la callback du coup.