Avatar billede styrbaek Nybegynder
17. maj 2001 - 12:20 Der er 13 kommentarer og
2 løsninger

Langsom ASP

Jeg er netop ved at ligge sidste hånd på en e-shop der er baseret på en accessdatabase. Desværre er siderne med dbudtræk ret langsomme. En side der udtrækker ca. 95 records tager meller 30 og 40 sekunder at åbne. Er det normalt at det tager så lang tid for 95 records??? Kan det være webserveren der er for langsom???
Vil det gå hurtigere hvis jeg deler udtrækket ud på flere sider med f.eks. 15-20 records pr. side?


I kan se siden på http://www.ejstrupholm.dk/ti-krydderier/test.htm
Prøv at klikke på mixkrydderier.

Avatar billede madrich Nybegynder
17. maj 2001 - 12:23 #1
det skulle ikke være de 95 records der afgjorde at det tager så lang tid, men hvis du poster noget kode kan det være at man kan se hvad du laver (og subsidært hvorfor det tager så lang tid)!
Avatar billede nute Nybegynder
17. maj 2001 - 12:27 #2
En av grunnene til at det tar lang tid å laste ned, er nok fordi du genrerer en relativt tung side. 47K for en side, tar faktisk et stykke tid å laste. En annen ting jeg er interessert i å se koden som genererer selve HTML koden din...
Avatar billede styrbaek Nybegynder
17. maj 2001 - 12:29 #3
Koden er meget rodet da jeg bare har omskrevet en gratis e-shop. Der er rigtig mange variabler og variabler i variabler så man bliver nødt til at gennemse alle aspsiderne til systemet for at kunne se sammehænget i det.
Men det mærkelige er at siderne der kun udtrækker under 10 records kommer nogenlunde hurtig.
Avatar billede nute Nybegynder
17. maj 2001 - 12:31 #4
så kan det jo nesten tyde på at koden er tung å eksekvere for serveren, og gjerne i kombinasjon med en ikke så god webserver ?!
Avatar billede styrbaek Nybegynder
17. maj 2001 - 12:41 #5
Her har i koden der genere siden.

<!-- #include file=\"db.asp\" -->
<%
Response.Buffer = true
Dim catid, strcat
catid = Request.QueryString(\"id\")
strcat = Request.QueryString (\"cat\")

If catid = \"\" OR (IsNumeric(catid) = false) Then
    Response.Redirect \"default.asp\"
End if

Dim catname, productslist, vpris
sub productInfo(connObj,category)
    q = chr(34)
    set cmd = server.CreateObject(\"ADODB.Command\")
    cmd.ActiveConnection = connObj
    cmd.CommandText = \"qryProdsCategory\"
    cmd.CommandType = adCmdStoredProc
    set param = cmd.CreateParameter(\"theCategory\",adInteger,adParamInput,4)
    cmd.Parameters.Append(param)
    cmd(\"theCategory\") = Cint(category)
    set rs = server.CreateObject(\"ADODB.Recordset\")
    sql = \"Select * FROM categories ORDER BY categoryid ASC;\"

    set rs = cmd.Execute


   
    if not rs.EOF then

        catname = rs(\"catdescription\")
        strHTML = \"<table border=2 cellPadding=4 cellSpacing=2 width=\'100%\'>\"
        strHTML = strHTML & \"<tr>\"
       
        i = 1
        while not rs.EOF

            strHTML = strHTML & \"<td valign=top>\" & vbcrlf
       
            strHTML = strHTML & \"<h4>\" & rs(\"cname\") & \"</h4>\"
            strHTML = strHTML & \"<h4>\" & rs(\"cweight\") & \" gram\" & \"</h4>\"       
            strHTML = strHTML & \"<form action=\"&q&\"addtocart.asp\"&q&\" method=\"&q&\"POST\"&q&\" name=form\"&i&\" onSubmit=\"&q& \"return checkItems(form\"&i&\")\" &q&\">\"
   
    strHTML = strHTML & \"<td>\"
            if rs(\"cprice\") = 0 then vpris = 12 else vpris = 0 end if

strHTML = strHTML & \"Pris: \" & FormatCurrency(vpris + rs(\"cprice\"),2) &  \"<input type=\"&q&\"hidden\"&q&\" name=\"&q&\"fproductid\"&q&\" value=\"&q & rs(\"catalogID\")& q&\"><br><br>\" & vbcrlf





    strHTML = strHTML & \"Antal: <input maxLength=\"&q&\"1\"&q&\" name=\"&q&\"fquantity\"&q&\" size=2 value=\"&q&\"1\"&q&\">\"
            strHTML = strHTML & \" <input type=\"&q&\"submit\"&q&\" value=\"&q&\"BESTIL\"&q&\" name=\"&q&\"order\"&q&\" style=\"&q&\"font-family: Arial; color: #800000; font-weight: bold\"&q&\">\"
            strHTML = strHTML & \"</form>\"
            if (i mod 1) = 0 then
                strHTML = strHTML & \"</tr><tr>\" & vbcrlf
            end if
            i = i + 1   
            rs.MoveNext
        wend


   
        strHTML = strHTML & \"<tr></table>\"
    else
        strHTML = \"Product information not found.\"
        catname = \"Error\"
    end if
        productslist = strHTML
    rs.Close
    set rs = nothing
    set cmd = nothing

end sub

%>
<html>
<head>
<title>Products</title>
<SCRIPT LANGUAGE=javascript>
<!--
function checkItems(formobj)
{
    var quant = formobj.fquantity.value
    if (isNaN(quant) == true || quant < 1 || quant > 9)
    {
        alert(\"Please enter a number between 1 and 9\");
        formobj.fquantity.focus();
        return false
    }else
    {
        return true;
    }
}
//-->
</SCRIPT>
<link rel=\"stylesheet\" type=\"text/css\" href=\"eposter.css\">
        <meta name=\"site-config-URL\" content=\"\">
    </head>
<body>

<table border=\"0\" width=\"600\" cellpadding=\"4\">
  <tr>
    <td width=\"100%\" colspan=\"2\" valign=\"top\">
    <h3><img src=\"images/eplogo2.gif\" alt=\"EPoster store\" width=\"187\" height=\"36\">
    <br><font face=\"Arial\">
    <%
    \'on error resume next
    call openConn()
    call productInfo(dbc,catid)
   
    call closeConn()
    response.write catname
    %>
    </font></h3></td>
  </tr>
  <tr>
    <td width=\"120\" bgcolor=\"#004080\" valign=\"top\">
    <!--#include file=\"navleft.htm\" --></td>
    <td width=\"480\">
    <%= productslist %>
    </td>
  </tr>
</table>


</body>
</html>
Avatar billede ellebaek Nybegynder
17. maj 2001 - 12:47 #6
hvis du har så mange records skal du ikke benytte en access database...
derimod skal du benytte MySQL eller msSQL ...
fordelen med dette er at det kan håndtere mange flere kald på en gang, og samtidig er det hurtigere at få forbindelse med osv. Så hvis du skal lave en hjemmeside hvor du skal tænke på hastigheden skal du klart benytte MySQL eller MSsql ....

hvis du gør det kan du sagtens bruge samme kode som du ellers bruger ...
Avatar billede nute Nybegynder
17. maj 2001 - 12:47 #7
hmmm....koden ser da fornuftig ut. Har du testet det på en maskin med PWS for å se om det kjører raskere ?

Men som jeg nevnte i min første posting, så har nok HTML koden endel av skylden. 47K er tungt å sende til klienter som gjerne sitter med en langsom forbindelse.
Avatar billede nute Nybegynder
17. maj 2001 - 12:52 #8
ellebaek >> ikke helt korrekt. Man kan saktens benytte Access til dette.

Access har derimot problemer med antall connections. Hvis man skalerer sitt site til mange samtidige brukere, så bør man heller vurdere å bytte database. Jeg har selv vært med på å kjøre access på et site som hadde 5000 besøkende om dagen uten særlige problemer.
Avatar billede ellebaek Nybegynder
17. maj 2001 - 13:08 #9
ja ...
og hvis der er mange der skal bruge siden vil den blive langsom i forhold til SQL !
Avatar billede styrbaek Nybegynder
17. maj 2001 - 13:16 #10
Min PWS kører på en virtual PC på en Mac, så det er lidt svært at vurderer om det kører hurtigt der.

Vil størrelsen på htmlkoden ikke blive mindre hvis jeg deler udtrækket op i flere sider med 15-20 records pr. side???
Avatar billede stoffer Nybegynder
17. maj 2001 - 13:34 #11
prøv lige at sætte en timer på

dvs. lave en variabel

timeStart =  now() - sæt i top
timeEnd =  now() - sæt i bund

og udskriv i bunden
response.write DateDiff(\"s\", timeStart , timeEnd ) - udkriver hvor mange sekunder der mellem start og slut.

så kan du se hvor hurtig serveren er om at lave det.

For det KAN være at din tabel struktur er for dårlig og det der for er IE og NS der er langsomme om at generere siderne...
Avatar billede stoffer Nybegynder
17. maj 2001 - 13:36 #12
jeg kunne nemlig godt forestille mig at de mange form tags mv. vil kunne gøre det langsomt...
Avatar billede nute Nybegynder
17. maj 2001 - 13:41 #13
styrbaek >> Du har vel en fornemmelse om det går hurtigere på din PWS enn på din server ?!

Ellers vil jeg støtte stoffer sitt forslag. Du kan da sammenligne om det går hurtigere på din PWS eller ikke.
Avatar billede styrbaek Nybegynder
17. maj 2001 - 14:48 #14
Ups for søren da osse, det var den forkerte kode jeg gav jer, det var originalen. Her er den jeg har omskrevet.

<!-- #include file=\"db.asp\" -->
<%

Response.Buffer = true
Dim catid, strcat
catid = Request.QueryString(\"id\")
strcat = Request.QueryString (\"cat\")

If catid = \"\" OR (IsNumeric(catid) = false) Then
    Response.Redirect \"default.asp\"
End if

Dim catname, productslist, vpris
sub productInfo(connObj,category)
    q = chr(34)
    set cmd = server.CreateObject(\"ADODB.Command\")
    cmd.ActiveConnection = connObj
    cmd.CommandText = \"qryProdsCategory\"
    cmd.CommandType = adCmdStoredProc
    set param = cmd.CreateParameter(\"theCategory\",adInteger,adParamInput,4)
    cmd.Parameters.Append(param)
    cmd(\"theCategory\") = Cint(category)
    set rs = server.CreateObject(\"ADODB.Recordset\")
    sql = \"Select * FROM categories ORDER BY categoryid ASC;\"

    set rs = cmd.Execute


        b = 1   
    if not rs.EOF then

        catname = rs(\"catdescription\")
        strHTML = \"<table border=0 cellPadding=3 cellSpacing=0 width=\'*\'>\"
   
        i = 1
        while not rs.EOF
        if b = 2 then
            strHTML = strHTML & \"<tr BGCOLOR=\'#ffffff\'>\"
            b = 1
            else
            strHTML = strHTML & \"<tr BGCOLOR=\'#d79423\'>\"
            b = b + 1
            end if

            strHTML = strHTML & \"<td valign=middle width=\'*\'>\"
            strHTML = strHTML &  \"<b>\" & rs(\"cname\")& \", </b>\" & rs(\"cweight\") & \" gram</td>\"       
            strHTML = strHTML & \"<form action=\"&q&\"addtocart.asp\"&q&\" method=\"&q&\"POST\"&q&\" name=form\"&i&\" onSubmit=\"&q& \"return checkItems(form\"&i&\")\" &q&\">\"
   
            strHTML = strHTML & \"<td valign=middle width=\'100\'>\"
            if rs(\"cprice\") = 0 then vpris = 12 else vpris = 0 end if
            strHTML = strHTML & \"Pris: \" & FormatCurrency(vpris + rs(\"cprice\"),2) &  \"<input type=\"&q&\"hidden\"&q&\" size=3 name=\"&q&\"fproductid\"&q&\" value=\"&q & rs(\"catalogID\")& q&\"></td>\"

    strHTML = strHTML & \"<td valign=middle width=\'*\'><input maxLength=\"&q&\"2\"&q&\" name=\"&q&\"fquantity\"&q&\" size=2 value=\"&q&\"\"&q&\"> stk.</td>\"
            strHTML = strHTML & \" <td><input type=\"&q&\"submit\"&q&\" value=\"&q&\"BESTIL\"&q&\" name=\"&q&\"order\"&q&\">\"
            strHTML = strHTML & \"</td></form>\"
            if (i mod 1) = 0 then
                strHTML = strHTML & \"</tr><tr>\"
            end if
            i = i + 1   
            rs.MoveNext
        wend
        strHTML = strHTML & \"</tr></table>\"
    else
        strHTML = \"Produktinformation ikke fundet!.\"
        catname = \"Error\"
    end if
        productslist = strHTML
    rs.Close
    set rs = nothing
    set cmd = nothing

end sub

%>
<html>
<head>
<title>Products</title>
<SCRIPT LANGUAGE=javascript>
<!--
function checkItems(formobj)
{
    var quant = formobj.fquantity.value
    if (isNaN(quant) == true || quant < 1 || quant > 99)
    {
        alert(\"Please enter a number between 1 and 99\");
        formobj.fquantity.focus();
        return false
    }else
    {
        return true;
    }
}
//-->
</SCRIPT>
<link rel=\"stylesheet\" type=\"text/css\" href=\"eposter.css\">
        <meta name=\"site-config-URL\" content=\"\">
    </head>
<body>
<center>

<!-- #include file=\"hoved.htm\" -->           
               
    <h2>
    <%
    \'on error resume next
    call openConn()
    call productInfo(dbc,catid)
   
    call closeConn()
    response.write catname
    %>
    </h2><div>
 

    <%= productslist %>
    </div></center>

</body>
</html>
Avatar billede styrbaek Nybegynder
14. juni 2001 - 17:41 #15
Det er vist ikke for tidligt at få afsluttet dette spm. Problemet er næsten  da jeg  fandt ud af at min webserver var ustabil. Nu er den blevet updateret og min siden tager kun 8-9 sekunder at gerererer nu.
ellebaek og stoffer må dele de 60 point.
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