[R] Détecter lenteur d'affichage page web

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

[R] Détecter lenteur d'affichage page web

#1

Message 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.
Modifié en dernier par aulus le lun. 27 janv. 2014 11:54, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#2

Message par mikell »

Comment le programme récupère-t-il ces pages ? par _IE*, InetGet, autre ?
Le bout de code correspondant serait le bienvenu
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#3

Message 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
 
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#4

Message 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()
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#5

Message 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:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#6

Message 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 ?
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#7

Message 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() )
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#8

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#9

Message 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.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#10

Message 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
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Détecter lenteur d'affichage page web

#11

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Détecter lenteur d'affichage page web

#12

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] Détecter lenteur d'affichage page web

#13

Message 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.
Répondre