Page 1 sur 1
[R] Détecter lenteur d'affichage page web
Posté : sam. 25 janv. 2014 15:02
par aulus
Bonjour,
Mon programme fait appel à des pages stockées sur internet pour y trouver des données. Lorsque l'hébergeur a des problèmes de serveur, l'affichage est très lent. Ce qui impatiente l'utilisateur de mon programme. Autoit permet-il de détecter ce problème pour, par exemple, afficher un avertissement priant l'utilisateur de patienter en raison des problèmes de vitesse du serveur, afin qu'il ne désespère pas ?
Je vous remercie.
Re: [..] Détecter lenteur d'affichage page web
Posté : sam. 25 janv. 2014 16:54
par mikell
Comment le programme récupère-t-il ces pages ? par _IE*, InetGet, autre ?
Le bout de code correspondant serait le bienvenu
Re: [..] Détecter lenteur d'affichage page web
Posté : sam. 25 janv. 2014 17:30
par aulus
Voici ce que je tente de faire. Est-ce que je comprends bien la fonction Ping et son retour ?
Code : Tout sélectionner
$var = Ping("www.monsite.net", 250)
if $var = 0 Then
msgbox(48,"Avertissement","La connexion a échoué... ")
else
$oIE = ObjCreate("Shell.Explorer.2")
GUICtrlCreateObj($oIE, 13, 35, @DesktopWidth - 20, @DesktopHeight - 20)
If $var > 100 Then msgbox(48,"Avertissement","La connexion est lente... Merci de patienter...")
$oIE.navigate("http://www.monsite.net/mapage.html")
endif
Re: [..] Détecter lenteur d'affichage page web
Posté : sam. 25 janv. 2014 19:47
par mikell
Peut-être tenter un truc comme ça
Code : Tout sélectionner
$oIE.navigate("http://www.monsite.net/mapage.html")
$hTimer = TimerInit()
While $oIE.Busy
$diff = Round(TimerDiff($hTimer)/1000)
If $diff > 3 Then SplashTextOn("", "Merci de patienter ...", 300, 55, -1, -1, 49)
Sleep(1000)
Wend
SplashOff()
Re: [..] Détecter lenteur d'affichage page web
Posté : sam. 25 janv. 2014 21:42
par jguinch
Pour ce qui est du ping, je pense que tu as bien compris.
Mais le fait de faire un ping te donnera uniquement un temps de réponse "réseau". Le résultat ne sera pas représentatif quant à la charge du serveur web.
La méthode du timer proposée par Mikell sera bien plus adaptée.

Re: [..] Détecter lenteur d'affichage page web
Posté : dim. 26 janv. 2014 21:08
par aulus
Merci mikell pour votre code très efficace.
Merci jguinch pour vos éclaircissements.
1. Comment adapter le code de mikell pour la fonction :
2. Dirigeant vers un second hébergeur si le premier est lent, j'ai codé ainsi :
Code : Tout sélectionner
SplashTextOn("", "Connexion à la page internet." & @CRLF & "Veuillez patienter...", 280, 55, -1, -1, 49)
Local $oIE = ObjCreate("Shell.Explorer.2")
GUICtrlCreateObj($oIE, 13, 35, @DesktopWidth - 20, @DesktopHeight - 100)
$oIE.navigate("http://monsite[color=#FF0000]1[/color].net/monfichier.php")
Local $hTimer = TimerInit()
While $oIE.Busy
Local $diff = Round(TimerDiff($hTimer)/1000)
If $diff > 3 Then
SplashOff()
SplashTextOn("Connexion à la page internet", "Connexion lente..." & @CRLF & "Merci de patienter ...", 300, 55, -1, -1, 49)
[color=#FF0000]$oIE.navigate("http://monsite2.org/monfichier.php")
ExitLoop[/color]
Sleep(1000)
endif
Wend
SplashOff()
Le code surligné est-il bien placé ?
Sleep(1000) ne me semble plus utile : ai-je raison ?
Re: [..] Détecter lenteur d'affichage page web
Posté : dim. 26 janv. 2014 22:04
par jguinch
C'est sûr, le Sleep() n'est pas utile si tu le mets là. Si tu veux le laisser (ce que je te conseille) , il faut le mettre après le EndIf
Par contre, le premier SplashOff() est inutile (cf doc SplashTextOn() )
Re: [..] Détecter lenteur d'affichage page web
Posté : dim. 26 janv. 2014 22:49
par mikell
Attention tout de même : contrairement au _IENavigate() qui (par défaut) attend sagement la fin du chargement de la page pour poursuivre le script, l'instruction COM $oIE.navigate() n'est pas bloquante
Il est donc vivement conseillé d'utiliser systématiquement une solution alternative de ce type pour éviter des soucis
Et un SplashTextOn() avertissant de la redirection serait certainement favorablement perçu par l'usager

Re: [..] Détecter lenteur d'affichage page web
Posté : lun. 27 janv. 2014 10:31
par aulus
jguinch a écrit :
Par contre, le premier SplashOff() est inutile (cf doc SplashTextOn() )
Ce splash indique à l'utilisateur que le programme tente d'ouvrir une page internet pour effectuer la tâche qu'il a sélectionnée. Il est informé par là qu'une connexion à internet est nécessaire pour cette tâche.
mikell a écrit :
Et un SplashTextOn() avertissant de la redirection serait certainement favorablement perçu par l'usager
J'ai placé les mêmes données chez deux hébergeurs différents afin que, si l'un d'eux venait à avoir des difficultés de connexion (ce qui est fréquent parce que je n'ai pas choisi les hébergeurs les plus chers !) , l'utilisateur de mon programme ne soit pas bloqué dans son travail.
Que les données proviennent de chez Pierre ou de chez Paul n'a donc pas beaucoup d'importance pour l'utilisateur qui, d'ailleurs, ne s'aperçoit de rien, les adresses ne s'affichant pas sur son écran. En fait, je ne redirige pas l'utilisateur, je redirige la recherche de données.
Les tentatives de connexion chez un premier hébergeur qui serait lent et une redirection, prennent du temps. C'est pourquoi je voulais en informer l'utilisateur par un message de patience afin qu'il ne pense pas que le programme ait planté.
Pour conclure, je laisse donc le sleep dans la boucle, et je le réduis à 10. Je ne comprends pas vraiment l'utilisation de cette boucle.
Re: [..] Détecter lenteur d'affichage page web
Posté : lun. 27 janv. 2014 11:04
par jguinch
Je parlais du SplashOff, pas du SplashTextOn.
Code : Tout sélectionner
While $oIE.Busy
Local $diff = Round(TimerDiff($hTimer)/1000)
If $diff > 3 Then
; SplashOff() ; Inutile car SplashTextOn va de toute façon avoir le même effet
SplashTextOn("Connexion à la page internet", "Connexion lente..." & @CRLF & "Merci de patienter ...", 300, 55, -1, -1, 49)
$oIE.navigate("http://monsite2.org/monfichier.php")
ExitLoop
endif
Sleep(10)
Wend
C'est quoi que tu ne comprends pas ?
La boucle sert simplement à vérifier le temps de chargement.
While $oIE.Busy veut dire
Tant que la page se charge
Re: [..] Détecter lenteur d'affichage page web
Posté : lun. 27 janv. 2014 11:54
par aulus
Tout marche à merveille. Le code répond tout à fait à mon attente et j'ai encore appris de nouvelles choses sur AutoIt.
Je vous remercie encore tous deux pour votre temps et votre patience, et l'efficacité de vos solutions, conseils et éclaircissements.
Re: [R] Détecter lenteur d'affichage page web
Posté : lun. 27 janv. 2014 12:02
par mikell
Idéalement dans ce genre de situation il faudrait faire comme ça
► Afficher le texte
Code : Tout sélectionner
$connected = 1
SplashTextOn("Connexion à la page internet", "Connexion en cours" & @CRLF & "Merci de patienter ...", 300, 55, -1, -1, 49)
While $oIE.Busy ; "tant que la page est en train de charger"
Local $diff = Round(TimerDiff($hTimer)/1000)
If $diff > 3 Then
$oIE.navigate("http://monsite2.org/monfichier.php") ; redirection
While $oIE.Busy ; "tant que la 2ème page est en train de charger"
$diff = Round(TimerDiff($hTimer)/1000)
If $diff > 6 Then
$connected = 0
ExitLoop 2
Endif
Sleep(10)
Wend
Endif
Sleep(10)
Wend
If $connected = 1 Then
SplashTextOn("Connexion à la page internet", "Connecté", 300, 55, -1, -1, 49)
Else
SplashTextOn("Connexion à la page internet", "Connexion impossible" & @CRLF & "Réessayer plus tard", 300, 55, -1, -1, 49)
Endif
Sleep(2000)
SplashOff()
sachant qu'avec "While $oIE.Busy" la sortie de boucle est automatique dès que la page est chargée
Re: [R] Détecter lenteur d'affichage page web
Posté : lun. 27 janv. 2014 16:56
par aulus
En effet, il faut aussi songer au cas où le second hébergeur ferait aussi des siennes ou au cas où il n'y a pas de réseau. Bref, songer au pire !
J'ai sorti le premier SplashTextOn de la boucle car elle sautille comme une puce frénétique lorsqu'elle lui appartient.
Enfin, j'ai supprimé la SplashTextOn de connexion réussie parce que, la page s'affichant, elle ne me paraît pas indispensable.
Merci mikell pour ce code qui me paraît maintenant au top.