PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 23 → Différer un chargement dans une page
Différer un chargement dans une page
Started by Chris, Nov., 06 2018 9:04 AM - 10 replies
Registered member
34 messages
Posted on November, 06 2018 - 9:04 AM
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 ?
Registered member
34 messages
Posted on November, 08 2018 - 8:55 AM
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 ?
Registered member
823 messages
Popularité : +3 (3 votes)
Posted on November, 08 2018 - 11:19 AM
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.
Registered member
34 messages
Posted on November, 08 2018 - 2:54 PM
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.
Registered member
823 messages
Popularité : +3 (3 votes)
Posted on November, 08 2018 - 3:55 PM
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() ?
Registered member
34 messages
Posted on November, 08 2018 - 4:03 PM
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 ?
Registered member
823 messages
Popularité : +3 (3 votes)
Posted on November, 08 2018 - 4:06 PM
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 ??
Registered member
34 messages
Posted on November, 08 2018 - 4:38 PM
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.
Registered member
823 messages
Popularité : +3 (3 votes)
Posted on November, 08 2018 - 6:17 PM
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 :




Registered member
34 messages
Posted on November, 08 2018 - 8:23 PM
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).
Registered member
823 messages
Popularité : +3 (3 votes)
Posted on November, 09 2018 - 9:22 AM
Ha o ui j'avais mal lu.. ça permet surtout aussi je pense de ne pas traiter la callback du coup.