PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 2024 → AJAXExécuteAsynchrone() bloquant
AJAXExécuteAsynchrone() bloquant
Started by sr33, Jun., 19 2017 10:10 AM - 2 replies
Posted on June, 19 2017 - 10:10 AM
Bonjour à tous,

La documentation de la fonction AJAXExécuteAsynchrone() précise que "cette fonction n'est pas bloquante [...] les autres traitements continuent de s'exécuter normalement".
Or après quelques tests, nous constatons que tous les appels ajax (manuels ou automatiques) postérieurs à l'appel sont mis en file d'attente côté serveur pendant l'exécution de la procédure serveur.

Le test effectué (en webdev 19) :

Lorsqu'on clique sur un bouton, 3 appels asynchrones à des procédures serveur lentes (ici 5 s chacune) sont lancés :

AJAXExécuteAsynchrone(test_proc_lente, test_proc_lente_js, 1, 500)
AJAXExécuteAsynchrone(test_proc_lente, test_proc_lente_js, 2, 500)
AJAXExécuteAsynchrone(test_proc_lente, test_proc_lente_js, 3, 500)

Procedure test_proc_lente(nId est un entier, nDurée est un entier)

sIdProc est une chaîne
sIdProc = ChaîneConstruit("test_proc_lente #%1", nId)

Trace(DateVersChaîne(DateSys()) + " " + HeureVersChaîne(HeureSys()) + TAB + sIdProc + " DEBUT")
Multitâche(nDurée)
Trace(DateVersChaîne(DateSys()) + " " + HeureVersChaîne(HeureSys()) + TAB + sIdProc + " FIN")

RENVOYER sIdProc

La trace d'exécution côté serveur obtenue :

19/06/2017 09:40:35:82 test_proc_lente #2 DEBUT
19/06/2017 09:40:40:87 test_proc_lente #2 FIN
19/06/2017 09:40:40:87 test_proc_lente #1 DEBUT
19/06/2017 09:40:45:85 test_proc_lente #1 FIN
19/06/2017 09:40:45:86 test_proc_lente #3 DEBUT
19/06/2017 09:40:50:89 test_proc_lente #3 FIN

Cela est particulièrement gênant d'un point de vue ergonomie, car pendant l'exécution de la procédure serveur, la première action de l'utilisateur sur un composant ajaxé fige totalement l'interface.

Avez-vous constaté le même comportement sur les versions plus récentes ?
Ne faudrait-il pas préciser cela dans la documentation ?

Merci pour vos retours !
Registered member
1,623 messages
Popularité : +100 (114 votes)
Posted on June, 21 2017 - 10:52 AM
Pour moi la fonction AJAXExécuteAsynchrone est non bloquante pour l'utilisateur, c'est a dire que le site web n'est pas figé, car celui ci n'attend pas de retour du serveur.
Mais il se peut effectivement que toute autre fonction ajax se fasse a la suite... ( ce qui peu conduire à un blocage de l'interface utilisateur..)

Peut être envisager d'utiliser dans ce cas les procédures différées ? Qui, il me semble s’exécute de manière complètement autonome.
Posted on June, 21 2017 - 6:44 PM
Merci pour votre réponse, cela peut en effet être une solution dans certaines situations, mais dans notre cas nous devons présenter au plus tôt le résultat de cette procédure lente côté client.

Nous avons un temps envisagé de créer une petite api rest, mais là encore, nous ne voyons pas quelle méthode navigateur webdev utiliser pour l'interroger de façon non bloquante, à la jQuery.getJSON().