Avatar billede hanne-rk Nybegynder
30. september 2003 - 12:42 Der er 12 kommentarer og
2 løsninger

optimering af script

denne lille bid :-)  tager en krig om at blive færdig på min server.

Hvad er det der tager så lang tid ? og hvad kan optimeres.
Jeg skal bare have listet alle varer, og have mulighed for at slette dem og tilføje en ekstra tekst til en vare.

Tager det ekstra lang tid pga tabellen ? eller hvad går galt ?

----

<html>
<head>
<meta http-equiv="Content-Language" content="da">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>varer-admin</title>
</head>

<body link="#000080" vlink="#000080" alink="#000080">
<%Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("../webshop-dk/data/priser.mdb")
Conn.Open DSN
%>
<p align="center"><font size="6" color="#808080">Slet / rediger varer</font></p>
<div align="center">
  <center>
<table cellspacing="0" border="1" height="48" width="651" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0">
<tr>
    <td align="center" bgcolor="#808080" height="19" width="60">
    <font color="#FFFFFF">varenummer</font></td>
    <td align="center" bgcolor="#808080" height="19" width="74">
    <font color="#FFFFFF">Gruppe</font></td>
    <td align="center" bgcolor="#808080" height="19">
    <font color="#FFFFFF">Betegnelse</font></td>
    <td align="center" bgcolor="#808080" height="19" width="150">
    <font color="#FFFFFF">Ekstra tekst (fx udsolgt)</font></td>
    <td align="center" bgcolor="#808080" height="19" width="75"><font color="#FFFFFF">action</font></td>
  </tr>
  <%
' SQL forespørgsel
strSQL = "Select * from varer order by nr"
' Udfør forespørgsel (rs indeholder nu resultatet)
Set rs = Conn.Execute(strSQL)

' Gennemløb Recordset (rs) med en løkke
        if rs.eof OR rs.bof then
Response.Write "<b><center>Der er ingen varer i din butik endnu<br><br>"
else

' Gennemløb Recordset (rs) med en løkke
Do
%>

<form method="post" action="varerettet.asp?id=<%response.write rs("id")%>" name="f<%response.write rs("id")%>">

  <tr>
    <td align="left" bgcolor="#FFFFFF" height="19" width="60"><font color="#000080" size="2"><%response.Write rs("nr")%></b></font>&nbsp;</td>
    <td align="left" bgcolor="#FFFFFF" height="19" width="74"><font color="#000080" size="2"><%response.Write rs("gruppe")%></b></font>&nbsp;</td>
    <td align="left" bgcolor="#FFFFFF" height="19"><font color="#000080" size="2"><%response.Write rs("betegnelse")%>&nbsp;</td>
    <td align="left" bgcolor="#FFFFFF" height="19" width="150">
    <p align="center"><input type="text" name="tekst" size="20" value="<% response.write rs("tekst")%>"></td>
    <td align="center" bgcolor="#FFFFFF" height="19" width="75"><font color="#000080" size="2"><a href="vareslet.asp?id=<%response.write Rs("id")%>">
    <font color="#FF0000">Slet</font></a><font color="#FF0000"> </font></font>
    <a href="java script:document.f<%response.write rs("id")%>.submit();">
    <font size="2">opdater</font></a></td>
  </tr>
  </center>
</div>
</form>
<%
' Gå til næste Record i rs
  rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
end if%>
</table>
</div>
<p>&nbsp;</p>

</body>

</html>
Avatar billede medions Nybegynder
30. september 2003 - 12:46 #1
Prøv sådan her:

<html>
<head>
<meta http-equiv="Content-Language" content="da">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>varer-admin</title>
</head>

<body link="#000080" vlink="#000080" alink="#000080">
<%Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("../webshop-dk/data/priser.mdb")
Conn.Open DSN
%>
<p align="center"><font size="6" color="#808080">Slet / rediger varer</font></p>
<div align="center">
  <center>
<table cellspacing="0" border="1" height="48" width="651" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0">
<tr>
    <td align="center" bgcolor="#808080" height="19" width="60">
    <font color="#FFFFFF">varenummer</font></td>
    <td align="center" bgcolor="#808080" height="19" width="74">
    <font color="#FFFFFF">Gruppe</font></td>
    <td align="center" bgcolor="#808080" height="19">
    <font color="#FFFFFF">Betegnelse</font></td>
    <td align="center" bgcolor="#808080" height="19" width="150">
    <font color="#FFFFFF">Ekstra tekst (fx udsolgt)</font></td>
    <td align="center" bgcolor="#808080" height="19" width="75"><font color="#FFFFFF">action</font></td>
  </tr>
  <%
' SQL forespørgsel
strSQL = "Select * from varer order by nr"
' Udfør forespørgsel (rs indeholder nu resultatet)
Set rs = Conn.Execute(strSQL)

' Gennemløb Recordset (rs) med en løkke
        if rs.eof OR rs.bof then
Response.Write "<b><center>Der er ingen varer i din butik endnu<br><br>"
else

' Gennemløb Recordset (rs) med en løkke
Do
intID = rs("id")
%>

<form method="post" action="varerettet.asp?id=<%response.write rs("id")%>" name="f<%response.write rs("id")%>">

  <tr>
    <td align="left" bgcolor="#FFFFFF" height="19" width="60"><font color="#000080" size="2"><%response.Write rs("nr")%></b></font>&nbsp;</td>
    <td align="left" bgcolor="#FFFFFF" height="19" width="74"><font color="#000080" size="2"><%response.Write rs("gruppe")%></b></font>&nbsp;</td>
    <td align="left" bgcolor="#FFFFFF" height="19"><font color="#000080" size="2"><%response.Write rs("betegnelse")%>&nbsp;</td>
    <td align="left" bgcolor="#FFFFFF" height="19" width="150">
    <p align="center"><input type="text" name="tekst" size="20" value="<% response.write rs("tekst")%>"></td>
    <td align="center" bgcolor="#FFFFFF" height="19" width="75"><font color="#000080" size="2"><a href="vareslet.asp?id=<%response.write intID %>">
    <font color="#FF0000">Slet</font></a><font color="#FF0000"> </font></font>
    <a href="java script:document.f<%response.write intID %>.submit();">
    <font size="2">opdater</font></a></td>
  </tr>
  </center>
</div>
</form>
<%
' Gå til næste Record i rs
  rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
end if%>
</table>
</div>
<p>&nbsp;</p>

</body>

</html>

Men for mig ser det ikke rigtig ud til at den skal optrimeres, jeg tror hellere du skal overveje at genstarte din server!

//>Rune
Avatar billede the_bma_man Nybegynder
30. september 2003 - 12:50 #2
Du har inde i en løkke et skift mellem "html-mode" og "asp-mode". Dette tager tid hver gang.
Du kan overveje at undlade dette skift, og så putte en response.write på dine linier, der skal skrives ud.
Dette vil muligvis give dig lidt.
Avatar billede medions Nybegynder
30. september 2003 - 12:53 #3
the_bma_man> Nej, det kan ikke ha' nogen betydning, tværtimod!

//>Rune
Avatar billede the_bma_man Nybegynder
30. september 2003 - 12:56 #4
medions> hvad mener du lige med 'tværimod'?
Det tager rent faktisk serveren tid at skifte mellem ASP mode og HTML mode.
Og gøres dette inden i et loop, vil det jo faktisk kunne blive hurtigere at undlade disse.
I fald du ikke er enig med mig heri, må du meget gerne uddybe hvorfor...
Avatar billede hanne-rk Nybegynder
30. september 2003 - 12:58 #5
-> medions
det giver ikke rigtigt noget -(

-> the bma man
Kan det virkelig give noget ? og hvordan skal det så se ud ?
Avatar billede the_bma_man Nybegynder
30. september 2003 - 13:03 #6
Under linien med intID = rs("id") har du en %>. Væk med den.
Under linen med </form> har du en <%. Væk med den.
Alle html-linierne her imellem skal du have udskrevet. Det gør du ved at sætte dem i en response.write "<din linie her"

Vær dog opmærksom på, at hvis du har "er i linierne, fx på bgcolor="#FFFFFF" skal de så rettes til "" - altså to af dem
Avatar billede nmh Nybegynder
30. september 2003 - 13:03 #7
Som Rune siger: Der er ikke meget der kan optimeres, så at det kører langsomt må skyldes noget andet.
bma man's forslag:
i stedet for at skrive
bla bla bla <%response.write(rs("nr")%> bla bla bla
så skrive
<%response.write("bla bla bla" & rs("nr") & "bla bla bla")%>
jeg tror nu ikke det vil hjælpe meget.
Avatar billede medions Nybegynder
30. september 2003 - 13:03 #8
the_bma_man> Det er nøjagtig det samme! Det jeg mener med tvært imod, er at det er dårlig programmeringsskik at kode HTML i ASP!

hanne-rk> Hvor mange records er der i din database og hvor hurtig er din server!? <- det kan have meget betydning for dit script, hvis der er mange records der skal loades kan du optrimere det ved at ligge dine poster ind i et Pageingsystem!

Her kan du bla. se hvordan du gør:

http://activedeveloper.dk/aspdigital/kapitel2/paging.asp


//>Rune
Avatar billede hanne-rk Nybegynder
30. september 2003 - 13:07 #9
der er ca 2000 varer i databasen, men jeg har lige testet på min interne server, og der er en del forskel på den og på min netserver, er det min hoteludbyder der trænder til nyt hardware ?

(dog skal det siges at der også går ca. 15 sek. med min interne server, på nettet tager det ca. 45 sek.)
Avatar billede medions Nybegynder
30. september 2003 - 13:09 #10
!!! har du 2000 records, og så ikke et Paginsystem :-D
Det er jo helt piliplam ;o)

Du skal kigge på det link jeg sendte til dig ovenfor, det vil optrimere din kode 100% :-)

Så henter du max. 50 records ud ad gangen...

//>Rune
Avatar billede hanne-rk Nybegynder
30. september 2003 - 23:47 #11
hvordan bruger dette "paging" ? hvordan sætter jeg det ind i ovenstående script ?
Avatar billede medions Nybegynder
01. oktober 2003 - 07:27 #12
Har du prøvet dig frem? -det er slet ik' så svært!

//>Rune
Avatar billede nielle Nybegynder
01. oktober 2003 - 08:13 #13
Der er to ting som kan sluge tid:

1) Hentning af data fra databasen, og
2) Udskrivning af siden.

Pagning vil ikke hjælpe synderligt hvis det er det første som er problemet. Recordsettet bliver nemlig under alle omstændigheder fyldt op med det samme, hvorefter at databasen ikke røres mere. Dog skal det nævnes at der altså findes hurtigere databaser end lige Access (f.eks. MySQL eller MS SQL).

Mht. 2) så er 2000 poster meget at skrive ud. Serveren burde nu alligevel nok kunne klare det uden de store problemer. MEN en side med 2000 poster er ret stor og tager også tid at overføre fra web-serveren til dig og din browser. Dette er i øvrigt den største ændring i forhold til at have siden liggende hos sig selv - den lange vej mellem server og browser.

Du kan nemt finde ud af om det er 1) eller 2) som er problemet; Lav en bogus side, som bare indeholder 2000 pseudo-poster - altså poster som ligner de rigtige, men er mere eller mindre hardcodet (måske med lidt randomize og rnd smidt ind i blandingen). Hvis denne side tager ligeså lang tid at præsentere, så er det 2).

Hvis det viser sig at være 2) som er problemet så er pagning en rigtig god løsning.

Dertil kommer det faktum at 2000 poster i sig selv er ret meget at skulle overskue, og at pagning OGSÅ er en god ide ud fra den vinkel!
Avatar billede hanne-rk Nybegynder
01. oktober 2003 - 10:39 #14
->medions tak for forslaget med pageing, det er nok det jeg skal forske lidt i.

nielle -> tak for forklaringen, jeg prøvede at gemme et resultat, og det viste sig at filen fyldte 1,5mb, så det er helt sikkert her fejlen ligger. 1,5mb skulle jo så overføres inden jeg kan se resultatet, så mon ikke jeg skal lave et paging, eller opdale i flere undergrupper.

Det er nok den vej jeg skal gå.

Endnu en gang tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester