salut,
j'aurais voulut savoir comment optimiser le temps de réponse de mes pages asp?
Ma base (access) semble etre optimiser j'ai des index, etc..
merci.
salut,
j'aurais voulut savoir comment optimiser le temps de réponse de mes pages asp?
Ma base (access) semble etre optimiser j'ai des index, etc..
merci.
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Bonjour,
un des tutoriels du site aborde la question.
Merci, j'ai suivi les indications de ce tutoriel mais cela n'à accéléré mon script que de quelque secondes (35 au lieu de 40, je voudrais au moins arriver à 15 sinon mon projet ne sera pas validé)
Bizzarement lorsque je rajoute le <% OPTION EXPLICIT %> mon script est plus long, alors que d'apres le tuto cela devrait l'accélérer.
j'attend toujours d'autre solution merci.
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Bonjour
35 secondes me semblent énormes !!
j'ai personnellement la même architecture (asp + access), les temps d'interrogation des tables les plus "lourdes" (de l'ordre de 600.000 enregistrements) ne prennent que quelques secondes (5 au grand maxi)
En es tu bien sûr ? j'avais réussi à obtenir ces temps de réponses en définissant justement les bons index au bon endroit. (avant, j'avais aussi des temps de réponse énormes, supérieurs à la minute)Ma base (access) semble etre optimiser j'ai des index,
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
oui je suis bien sur!
j'ai mis des index dans tout les champs où je faisait des recherches, comparaisons, etc..
Je ne vois pas où je peux en mettre d'autre si ce n'est en en mettant dans tout les champs, mais je pense pas que cela serve à grand chose.
Le temps d'éxécution qui est si enorme vient d'une requete laquelle je parcours à l'aide d'une boucle elle meme contenue dans une autre boucle.
le nombre de passage dans la premiere boucle dépend du nombre de choix de l'utilisateur dans la premiere page .
pour chaques choix de l'utilisateur je dois afficher des valeurs pour 52 semaines= 2ème boucle.
autrement dis si 10 choix sont selectioné alors je vais boucler 10 fois et dans chaque bouclage je reboucle 52 fois.
je sais que je suis pas tres clair mais je pense et je suis sur que le temps aussi grand que met mon script a etre executé viens de là et non pas de ma table qui je le répète est bien optimisée.
Merci encore.
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Bonjour
Si on peut voir la requete et/ou l'algo que tu utilises, il doit y avoir moyen d'optimiser, car effectivement, des boucles dans des boucles, "ça bouffe"
Si tu execute 52 * 10 requetes (si j'ai bien compris), effectivement, Access, même avec la meilleure volonté du monde, doit montrer ses limites.
Le principe serait d'écrire une requete et une seule contenant tout ce dont tu as besoin, puis de gérer les ruptures par prog (si c'est possible, il faut connaitre ta BdD pour voir ça)
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
Je te remercie de ta reponse, en effet j'ai trouvé un moyen de sortir ma requete de la boucle et , en effet cela m'a permis de diviser le temps d'éxécution par 3.
Cepandant, j'ai une autre requete que je pourrais sortir de la boucle, mais en utlisant la méthode find, car j'ai un critere qui evolue dans ma boucle.
Le souci c'est que ASP ne semble pas reconnaitre la methode find et j'obtiens une erreur du type:
ADODB.Recordset (0x800A0CC1)
Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé
ex:
cet exemple doit afficher 52 colonne avec la valeur de chaque semaine (1 semaine par valeur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <tr> <% rercordset.source="select * from valeur where année = 2006" recordset.open for semaine=1 to 52 recordset.Find("semaine=" & semaine)%> <td><%=recordset("valeur")%></td> <%next%> </tr>
le problème vient du find, et j'ai testé
car je suis sur que j'ai dans ma base une valeur pour la semaine 2 mais toujours la meme erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part recordset.Find("semaine=" & 2)
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Cette erreur vient normalement du fait qu'il n'y a pas de champs nommé "semaine" dans ta table "valeur"ADODB.Recordset (0x800A0CC1)
Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé
PS : eviter autant que possible les accents dans les noms de champs, ainsi que les espaces
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
Envoyé par roro06
Je sais mais je n'avais pas le choix pour nommer mes champs.
Envoyé par roro06
Pourtant il y a bien un champs nommée semaine dans ma table, je pense que cela vient de la methode find, car si je rajoute le critere dans ma requete ca fonctionne
ceci fonctionne mais il faut que la requete soit dans la boucle car semaine est incrémentée de 1 à 52.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "select * from valeur where année=2006 and semaine=" & semaine
Or c'est ce que je cherche à éviter.
Peut etre que j'utilise mal cette methode mais dans tous les tutoriels que j'ai trouvé c'est comme ça que c'était expliqué.
J'ai essayé la métrhode filter mais j'ai le meme msge d'erreurs.
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
le mieux que je ferai, c'est :
Ceci a condition d'être certain que toutes les semaines sont bien présentes dans la table
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <% recordset.source="select * from valeur where année = 2006 order by semaine" recordset.open while not recordset.eof %> <td><%=recordset("valeur")%></td> <% recordset.movenext wend%>
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
le souci est là, il peut y avoir des semaines abscentes dans la table, alors voilà ce que j'ai fait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <% recordset.source="select * from valeur where année = 2006 order by semaine" recordset.open for i= 1 to 52 if not recordset.eof if recordset("semaine")=i then <td><%=recordset("valeur")%></td> <%end if recordset.movenext end if Next%>
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
cela fonctionne, mais en réalité le problème est un peu plus complexe, mais je ne voulais pas précipité les choses
en fait cette boucle est contenue dans une autre boucle:
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 for l=1 to 2 recordset.source="select * from valeur where année =" & annee & " order by semaine" recordset.open 'code précédent response.write("<tr>") if l=1 then annee=annee+1 else annee= annee-1 end if recordset.close next
mon souci est que le critere annee evolue egalement dans la boucle mais pas de maniere ordonnée, donc je suis obligée de laisser la requete à l'interieur de la boucle, d'où l'utilité de la methode find
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
C'est pas très judicieux :
Ca n'apporte rien par rapport à la solution que je te donnais, au contraire :
imagines que la semaine 1 soit absente de ta table : tu n'aura aucun affichage.
de deux choses l'une (l'autre c'est le soleil ! ) :
Soit tu veux afficher une ligne par semaine présente dans ta table : cf ma soluce précédente
Soit tu veux afficher 52 semaines, et les éventuelles valeurs trouvées dans la table. Dans ce cas, fais :
Je pense que ça se rapprochera plus de ce que tu veux.
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 <% dim cp cp=1 recordset.source="select * from valeur where année = 2006 order by semaine" recordset.open while not recordset.eof %> <tr> <td><%=cp%></td> <td><%if cp=recordset("semaine") then %><%=recordset("valeur")%><%end if%> </td> </tr> <% cp=cp + 1 recordset.movenext wend %> <% for i=cp to 52 %> <tr> <td><%=cp%></td> <td> </td> </tr> <% next %>
Les temps de réponse sont ils plus "acceptables" ?
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
Re,
Je ne fais que passer, mais j'ai eu à gérer ce genre de calendrier et pour m'en sortir, j'ai été obligé de créer une table des semaines (ANNEE NUMSEMAINE).
J'utilises ensuite cette table pour faire des jointures au cas où dans mes données il y a une semaine qui n'existe pas.
tout d'abord je n'ai pas compris l'interet de ta deuxieme boucle for.
ensuite mais entetes sont deja créé hors de la boucle
for i= 1 to 52
<td><%=i%></td>
next
avec ma methode si une semaine est manquante j'aurais une case vide, et c'est ce que je veux:
entetes: 1 2 3 4 5 6 7 ... 52
valeur: v1 v2 v3 v4 v6 v7 ... v52
c'est ce qu'il m'affiche et c'est ce que je veux.
les temps d'acces sont nettement plus raisonable, mais je pense pouvoir encore les amelioré en resolvant le pb que j'ai soumis juste avant ton poste.
merci
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
j'avais pas vu ce post (le #12)
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
ok pas de souci, par contre, maintenant que tu la vu lol, t'aurais pas une solution, je suis persuadée qu'avec find ça serait cool, mais bon.
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
N'ayant pas tous les éléments, difficile de répondre. seulement, pour find, il faut savoir qu'il n'autorise des recherches que sur un seul champs :
recordset.find("champs=" & valeur)
ca veut dire qu'il est impossible de faire quelquechose du style :
recordset.fin("champs1=" & valeur & " and champs2=" & valeur2)
ensuite, si tu dois faire plusieurs recherches, il faut "revenir au début" de ton recordset a chaque fois :
if not recordset.bof then recordset.movefirst
recordset.find(...)
if recordset.eof then
' pas trouvé
else
' trouvé !!
end if
il faut aussi avoir pris la précaution de déclarer ton curseur en dynamique :
recordset.cursorType= 2
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
J'ai remplacé:
Par:
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 for l=1 to 2 recordset.source="select * from valeur where année =" & annee & " order by semaine" recordset.open for i=1 to 52 [...] next response.write("<tr>") if l=1 then annee=annee+1 else annee= annee-1 end if recordset.close next
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 recordset.source="select * from valeur where année =" & annee & " order by semaine" recordset.open for l=1 to 2 Recordset3.movefirst Recordset3.FIND("année=" & annee) for i=1 to 52 [...] next response.write("<tr>") if l=1 then annee=annee+1 else annee= annee-1 end if recordset.close next
et j'obtiens l'erreur suivante a la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part Recordset3.FIND("année=" & annee)
erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ADODB.Recordset (0x800A0CC1) Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé.
Ps: mon recordset.cursortype vaut 2
BaudelaireLa plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Je serai toi, je ferais un test sur une autre base de données de test (avec access, c'est rapide), en supprimant cet accent qui me chagrine beaucoup
Encore une fois, cette erreur est donnée par un champs inexistant
Ou peut-etre, essaie ceci :
recordset3.find("[année]=" & annee)
(sans conviction : pas testé)
N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP
" La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
(J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)
Chuck Norris comprend JC Van Damme.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager