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. :wink:

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 :

Code : Tout sélectionner

ShellExecute("http://monsite/mapage.html")
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

Code : Tout sélectionner

While $oIE.Busy
  Sleep(10)
  ; ...
Wend
Et un SplashTextOn() avertissant de la redirection serait certainement favorablement perçu par l'usager :mrgreen:

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
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.