IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Optimiser le temps de chargement de données recueillies sur une page web (15 secondes c'est trop long) [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2015
    Messages : 8
    Par défaut Optimiser le temps de chargement de données recueillies sur une page web (15 secondes c'est trop long)
    Bonjour à la communauté Developpez,
    Je sollicite votre aide afin d'améliorer la vitesse de chargement de données sur une page web http://www.pronosoft.com/fr/concours...lotofoot_7.php

    Vous l'aurez compris je souhaite obtenir la répartition et le nom des équipes de la grille courante du lotofoot7.
    Je précise que je programme avec Visual Basic 2008
    J'ai déjà créer mon Form avec des Labels stockant le nom des équipes et des radioButtons (1,N,2) que l'utilisateur cocheras
    Voir l'image ci-jointe :Nom : Répartition.jpg
Affichages : 517
Taille : 221,9 Ko

    j'ai également fait le code suivant à partir des tutos et des discussions (qui m'ont pas mal aidé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
     Private Sub LinkLabel1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkLabel1.Click
            'nécéssite d'activer la référence Microsoft HTML Objects Library
            'nécéssite d'activer la référence Microsoft Internet Controls
            Dim i, j, k As Integer
            Dim IE As SHDocVw.InternetExplorer
            Dim maPageHtml As MSHTML.HTMLDocument
            Dim Helem As MSHTML.IHTMLElementCollection
     
            Dim Pourcent1, PourcentN, Pourcent2 As Double
            Dim Htable As MSHTML.IHTMLElementCollection
            Dim maTable As MSHTML.IHTMLTable
            Dim TblGame(0, 0) As String
            Dim StopWatch As System.Diagnostics.Stopwatch
     
            StopWatch = New Stopwatch
            StopWatch.Start()
     
            '1.On fait patienter 
            'LinkLabel1.Cursor = Cursors.WaitCursor
     
            '2.On ouvre la page internet "http://www.pronosoft.com/fr/concours/repartition_lotofoot_7.php"
            'qui contient la répartition
     
            IE = CreateObject("internetExplorer.Application")
            IE.Visible = False
            IE.Navigate("http://www.pronosoft.com/fr/concours/repartition_lotofoot_7.php")
     
            ' System.Diagnostics.Process.Start("chrome.exe", "http://www.pronosoft.com/fr/concours/repartition_lotofoot_7.php")
            '3.On attends le chargement complet de notre page internet
            Do Until IE.ReadyState = SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE
                Application.DoEvents()
            Loop
     
            '4.On commence par récupérer le n° et la date du LotoFoot7
            maPageHtml = IE.Document
            Helem = maPageHtml.getElementsByTagName("option")
     
            For i = 0 To Helem.length - 1
     
                If Helem(i).getAttribute("selected") = True Then
                    'idLF7 = Helem(i).value
                    LblGrilleNum.Text = Helem(i).innerText 'Grille n° XXX du XX/XX/2015
                    Exit For
                End If
     
            Next
            '5.On libère les variables qui ne sont plus necessaires : Helem
            Helem = Nothing
     
            '6.On récupère le n° des matchs , le nom des équipes et la répartition dans TblGame
            '  objet type table
            Htable = maPageHtml.getElementsByTagName("table")
            '  tableau dans la page Web contenant le n° des matchs , le nom des équipes et la répartition
            maTable = Htable(3)
     
     
            ReDim TblGame(7, 5)
            '  boucle sur toutes les lignes du tableau
            For j = 1 To maTable.rows.length - 2
                'boucle sur les cellules dans chaque ligne
                For k = 1 To maTable.rows(j - 1).Cells.Length
                    TblGame(j - 1, k - 1) = maTable.rows(j - 1).Cells(k - 1).innerText
                Next k
            Next j
     
     
            'le nom des équipes
            LblTeamA.Text = TblGame(1, 1).ToString
            LblTeamB.Text = TblGame(1, 2).ToString
            LblTeamC.Text = TblGame(2, 1).ToString
            LblTeamD.Text = TblGame(2, 2).ToString
            LblTeamE.Text = TblGame(3, 1).ToString
            LblTeamF.Text = TblGame(3, 2).ToString
            LblTeamG.Text = TblGame(4, 1).ToString
            LblTeamH.Text = TblGame(4, 2).ToString
            LblTeamI.Text = TblGame(5, 1).ToString
            LblTeamJ.Text = TblGame(5, 2).ToString
            LblTeamK.Text = TblGame(6, 1).ToString
            LblTeamL.Text = TblGame(6, 2).ToString
            LblTeamM.Text = TblGame(7, 1).ToString
            LblTeamN.Text = TblGame(7, 2).ToString
     
            'la répartition
            Dim m As Integer
            Dim n As Integer = 0
            Dim TblBase(6) As Double
     
            For m = 1 To 7
     
                'Pour comparer les pourcentages : Remplacement des % par des espaces puis 
                'supression des espaces à gauche et à droite
                Pourcent1 = CDbl(Trim(Replace(TblGame(m, 3).ToString, "%", "")))
                PourcentN = CDbl(Trim(Replace(TblGame(m, 4).ToString, "%", "")))
                Pourcent2 = CDbl(Trim(Replace(TblGame(m, 5).ToString, "%", "")))
     
                If Pourcent1 > PourcentN And Pourcent1 > Pourcent2 Then
                    TblChoix(n) = "X"
                    Répartition = Répartition & "1"
                    TblBase(m - 1) = Pourcent1
     
                ElseIf PourcentN > Pourcent1 And PourcentN > Pourcent2 Then
                    TblChoix(n + 1) = "X"
                    Répartition = Répartition & "N"
                    TblBase(m - 1) = PourcentN
     
                ElseIf Pourcent2 > Pourcent1 And Pourcent2 > PourcentN Then
                    TblChoix(n + 2) = "X"
                    Répartition = Répartition & "2"
                    TblBase(m - 1) = Pourcent2
     
                End If
                n = n + 3
            Next m
     
            Dim Max As Double
     
            Max = TblBase(0)
            Base = 1
     
            For i = 1 To TblBase.GetUpperBound(0)
                If TblBase(i) > Max Then
                    Max = TblBase(i)
     
                    Base = Base + 1
                End If
            Next i
     
     
            For Each ctrl As Control In GroupBox1.Controls
                If ctrl.GetType Is GetType(Label) Then
                    If ctrl.Text = Base.ToString Then
                        ctrl.Text = "B"
                        ctrl.ForeColor = Color.White
                        ctrl.BackColor = Color.FromArgb(255, 128, 0)
                        ctrl.Font = New System.Drawing.Font("Microsoft Sans Serif", 11, FontStyle.Bold)
     
                        Exit For
                    End If
                End If
            Next
     
            Array.Sort(TblBase)
     
            '5.On libère les variables qui ne sont plus necessaires : Helem
            Helem = Nothing
            Htable = Nothing
            maTable = Nothing
            TblGame(7, 5) = Nothing
            n = 0
     
            IE.Quit()
            'LinkLabel1.Cursor = Cursors.Default
            LinkLabel1.LinkVisited = True
            LinkLabel1.LinkColor = Color.Teal
     
     
            Call Tableau_To_RadioButton(Panel1)
            Call Synthèse() ' mise à jour de la synthèse
     
            ' Activation des filtres
            BtnAucun.Enabled = True
            BtnNiv1.Enabled = True
            BtnNiv2.Enabled = True
            BtnNiv3.Enabled = True
            'LinkLabel1.Enabled = False
     
            StopWatch.Stop()
            MsgBox("Execution time in seconds: " + CStr(StopWatch.Elapsed.TotalSeconds))
        End Sub
    Le problème c'est qu'avec mon code je mets entre 13 et 18 secondes pour charger la répartition de pronosoft lotoFoot7 dans mon application.
    Pouvez-vous me dire ce que je peux optimiser dans mon code ou si il y moyen de faire plus rapide notamment au niveau de l'appel d'internet(serait-ce plus rapide en passant par Google que par IE)

    Merci d'avance

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    découpe ton stowatch pour savoir d'où ca vient réellement parce que ton code fait plein de choses
    genre déjà savoir combien de temps met ta boucle moche avec le doevents, puis chaque morceau de code

    après tu peux paralléliser certains traitements, divisant le temps par le nombre de coeur de ta machine en moyenne
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2015
    Messages : 8
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    découpe ton stowatch pour savoir d'où ca vient réellement parce que ton code fait plein de choses
    genre déjà savoir combien de temps met ta boucle moche avec le doevents, puis chaque morceau de code

    après tu peux paralléliser certains traitements, divisant le temps par le nombre de coeur de ta machine en moyenne
    Bonjour,Pol63
    Ma boucle avec le do events sert à attendre le chargement complet de ma page web
    j'obtiens entre 10 à 15 secondes(apparemment c'est ici que ça rame)

    j'obtiens environ 0.10 secondes pour obtenir le numéro et la date :
    Grille n° XXX du XX/XX/2015 (ma 1ère boucle :For i = 0 To Helem.length - 1...next)

    j'obtiens environ 0.70 secondes pour obtenir le nom des équipes :
    (ma 2ème boucle : For j = 1 To maTable.rows.length - 2...next j)

    Pour ce qui est de ma machine ce n'est pas une bête de guerre : EeeBox(cpuN270;1.6 ghz et 1.50 de ram et windows xp)
    Cordialement

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    si tu es trop long sur le chargement de la page, une des solutions envisageable est d'utiliser le httpwebrequest ou équivalent
    c'est beaucoup plus rapide que le webbrowser qui lui va charger toutes la page y compris les images, alors que le httpwebrequest ne va charger que la page http, c'est à toi ensuite de le traiter
    c'est plus complexe certes, mais ca peut te réduire le temps de chargement de la page à quelques allez retour réseau, soit quelques fois 50ms
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2015
    Messages : 8
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    si tu es trop long sur le chargement de la page, une des solutions envisageable est d'utiliser le httpwebrequest ou équivalent
    c'est beaucoup plus rapide que le webbrowser qui lui va charger toutes la page y compris les images, alors que le httpwebrequest ne va charger que la page http, c'est à toi ensuite de le traiter
    c'est plus complexe certes, mais ca peut te réduire le temps de chargement de la page à quelques allez retour réseau, soit quelques fois 50ms
    Alors là je vais en terrain inconnu 1ère fois que j'entends parler d'httpwebrequest
    Bon merci je vais faire des recherches
    Si t'as des liens je prends volontiers

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    à l'origine http est protocole de dialogue sur le protocole de communication tcp
    donc en théorie tu peux utiliser le tcp pour dialoguer avec le site, mais ca fait coder beaucoup de choses

    entre le tcp et webbrwoser il y a une classe intermédiaire, httpwebrequest, qui sert à dialoguer avec un site et qui s'occupe d'envoyer ce qu'il faut
    tu lui donnes le site, le type de requete (get/post), les paramètres, les cookies, des headers, bref tout ce qui peut etre utile pour du dialogue http et utilisable par des propriétés
    et tu recois le contenu de la page web en tant que string (donc les balises)

    après il doit exister des parseurs html pour te permettre de faire de la recherche par balise, ce qui sera plus pratique que de faire du indexof et du substring
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par taur33 Voir le message
    Alors là je vais en terrain inconnu 1ère fois que j'entends parler d'httpwebrequest
    Bon merci je vais faire des recherches
    Si t'as des liens je prends volontiers
    Bonjour,

    Lorsqu'il s'agit d'interagir avec des pages j'utilise nécessairement des webrequests.
    Il existe une classe développées par Idb qui simplifie grandement la constitution d'une requête.
    Regardes mon dernier projet et recherches sur le forum car nous avons déjà traité de webrequests :

    ---> Mon dernier projet qui interface un site de conversion en ligne : https://bitbucket.org/3dotdev/ovc-yo...3-converter-hq
    PS: Dans ce projet il y a la classe de gestion de webrequest d'Idb

    ---> 1 post instructif : http://www.developpez.net/forums/d14...te-web-vb-net/
    ---> 1 autre post très complet sur la construction d'une webrequest en réponse au post précédent : http://proghelp.fr/demande-aide-f44/...veur-t545.html

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Exporter des données C# Sur une page Web
    Par massilia68 dans le forum C#
    Réponses: 3
    Dernier message: 16/10/2013, 00h05
  2. récupération de données sur une page web
    Par tomkiki dans le forum Web & réseau
    Réponses: 2
    Dernier message: 26/10/2009, 08h38
  3. Réponses: 2
    Dernier message: 30/09/2009, 16h43
  4. Afficher une image d'une base de données sur une page web
    Par tortuegenie dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/10/2008, 14h11
  5. Recupération de donnée sur une page web apès authentification
    Par Analfabete dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 02/01/2007, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo