webForumDet fria alternativet

Trög kod...

ASPur ASP

13 svar · 341 visningar · startad av Frezze

FrezzeMedlem sedan apr. 2004114 inlägg
#1

Hejsan.
Jag har en kod på min startsida som visar dom senaste forumposterna. Länge har startsidan varit trög, och jag har funderat på vad som har varit fel. Jag fick fram det nu när jag bestämde mig för att lägga in alla funktioner igen, tog bort och lade till funktionerna igen för att se vad som gick snabbast.
Jag kom till att det var koden som visade dom senaste forumposterna.

Koden ni ser nedan är den jag använder, jag dimmar alla variablarna och tycker att jag försökt göra det så smidigt som möjligt.

Men det bör väll gå att göra koden mycket smidigare? Eller?

Testa själv att gå in på: http://www.n-spot.se
Visst laddar det långsamt?

Här är hela koden:

strSql = "select t.fID, t.Rubrik, t.svDatum, t.inlagg, greatest(max(s.datum),t.SvDatum) as Senaste, count(s.svID) as AntalSvar from forumet t left join forumsv s on (s.Tillid=t.fID) group by t.fID, t.Rubrik order by Senaste desc limit 5"
Set rs = objCon.execute(strSql)
If rs.eof then
Response.write ""
Else
Const t_fID = 0
Const t_Rubrik = 1
Const t_svDatum = 2
Const t_inlagg = 3
Do until rs.eof
If Farg = "F0F0F0" then
Farg = "FFFFFF"
Else
Farg = "F0F0F0"
End if
strRubrik = NowOnForm(Rs(t_Rubrik)& "")
strFtext = Server.HTMLEncode(Rs(t_inlagg))
Response.Write " <tr bgcolor=""#"&Farg&""">"& vbCrlf &_
"  <td width=""90%""><img src=""bilder/nsb_arrows.gif"" alt="""" width=""15"" height=""7""><a href=""default.asp?p=readForum&amp;id="&rs(t_fID)&""" onMouseOver=""lagerinfo_visa('<b>"&strRubrik&"</b><br><b>Datum:</b> "
ForSvDate = rs("Senaste")
Select case DateDiff("d",ForSvDate,Date())
Case 0
Response.write "Idag, kl "&FormatDateTime(ForSvDate,4)
Case 1
Response.write "Igår, kl "&FormatDateTime(ForSvDate,4)
Case else
Response.write FormatDateTime(ForSvDate,2)&", kl "&FormatDateTime(ForSvDate,4)
End select
Response.Write "<br>"&Left(strFtext,221)&"..."
Response.Write "');"" onMouseOut=""lagerinfo_visa();"">"&strRubrik&"</a></td>"& vbCrlf &_
"  <td align=""right"">"&rs("AntalSvar")&"</td>"& vbCrlf &_
" </tr>"
rs.moveNext:Loop
End if
rs.Close:Set rs=nothing
J.N.Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

Laddar långsamt, minst sagt, det är helt oanvändbart!
Ca 35 sek på 2 Mbit!!

Koden ser normal ut, liknar något jag själv skulle gjort.

Kan du lägga upp en kopia av sidan utan din troliga krångelkod, så vi får se laddningstiden då?

Synpunkter: (och svar)
- Greatest/Count, är det bra att kombinera dessa i samma fråga?
-- Bör inte påverka, säkert gjort så själv.

- Du jämför datum med nollor, är det bra?
-- Det är nog inget problem direkt, men jag undrar varför du har poster med inga datum?

Vad gör funktionen NowOnForm()?

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#3

Har troligen inget med ASP-koden att göra utan SQL-koden.
Vad kör du med för databas?

Lite index skulle kanske hjälpa...

FrezzeMedlem sedan apr. 2004114 inlägg
#4

J.N. skrev:

HEJ!

Laddar långsamt, minst sagt, det är helt oanvändbart!
Ca 35 sek på 2 Mbit!!

Koden ser normal ut, liknar något jag själv skulle gjort.

Kan du lägga upp en kopia av sidan utan din troliga krångelkod, så vi får se laddningstiden då?

Synpunkter: (och svar)
- Greatest/Count, är det bra att kombinera dessa i samma fråga?
-- Bör inte påverka, säkert gjort så själv.

- Du jämför datum med nollor, är det bra?
-- Det är nog inget problem direkt, men jag undrar varför du har poster med inga datum?

Vad gör funktionen NowOnForm()?

http://www.n-spot.se/default.asp?p=startpage2
Utan forum koden, och den går rejält mycket snabbare =/

Ups, det där med datumen kan du hoppa över, en grej som blivit kvar när jag inte använd mig av Greatest (kolla i första inlägget för att se redigeringen).

NowOnForm ser ut så här:

Function NowOnForm(text)
text = server.HTMLEncode(text)
text = Replace(text,vbCrLf,"<br>")
NowOnForm = text
End Function

Och är bara en vanlig funktion, och bör inte påverka.

Erik Juhlin skrev:

Har troligen inget med ASP-koden att göra utan SQL-koden.
Vad kör du med för databas?

Lite index skulle kanske hjälpa...

Kör på Mysql. Kolla länken som jag angivet innan. Tog bort den koden som jag visar längst upp.
Ganska mysko att det kan vara så stor skillnad? Därför tycker jag det räcker långt ;)

J.N.Medlem sedan apr. 20031 660 inlägg
#5

HEJ!

Tack, ca 5-10 sek, men inte riktigt bra, eftersom hela sidan dyker upp på en gång, dvs det verkar inte hända något alls, men det gör det till sist.
Verkar fungera bättre efter ett tag, lär sig IE?

Då undrar jag som Erik Juhlin över databasen istället!

FrezzeMedlem sedan apr. 2004114 inlägg
#6

J.N. skrev:

HEJ!

Tack, ca 5-10 sek, men inte riktigt bra, eftersom hela sidan dyker upp på en gång, dvs det verkar inte hända något alls, men det gör det till sist.
Verkar fungera bättre efter ett tag, lär sig IE?

Då undrar jag som Erik Juhlin över databasen istället!

Ehm, jag kan väll inte säga mer än Mysql som svar till det? =/

J.N.Medlem sedan apr. 20031 660 inlägg
#7

HEJ!

Frezze skrev:

Ehm, jag kan väl inte säga mer än Mysql som svar till det? =/

Nä, jag svarade under tiden du gjorde din redigering.

Jag har ingen aning, men håller med om att det är konstigt.
Fast, det hjälper ju inte dig. :OO

FrezzeMedlem sedan apr. 2004114 inlägg
#8

J.N. skrev:

HEJ!

Frezze skrev:

Ehm, jag kan väl inte säga mer än Mysql som svar till det? =/

Nä, jag svarade under tiden du gjorde din redigering.

Jag har ingen aning, men håller med om att det är konstigt.
Fast, det hjälper ju inte dig. :OO

Hehe, nej.. det gör inte det :p
Tusan.. känns som jag får skippa koden =/

NickemannenMedlem sedan aug. 20003 575 inlägg
#9

Prova att bara köra sql strängen mot databasen och se hur lång tid den tar att exekveras.

jawbreakerMedlem sedan jan. 2003296 inlägg
#10

Jag säger som Erik Juhlin, kolla över nycklar och index i databastabellerna...

Jag antar att forumet.fID och forumsv.svID är satta som primärnycklar på respektive tabell?
Och så bör väl forumsv.Tillid vara indexerad.

Om det saknas nycklar eller index så kan sql-frågorna bli apslöa när det kommit in lite data i tabellerna nämligen.

FrezzeMedlem sedan apr. 2004114 inlägg
#11

Nickemannen skrev:

Prova att bara köra sql strängen mot databasen och se hur lång tid den tar att exekveras.

La in koden:

strSql = "select t.fID, t.Rubrik, t.svDatum, t.inlagg, greatest(max(s.datum),t.SvDatum) as Senaste, count(s.svID) as AntalSvar from forumet t left join forumsv s on (s.Tillid=t.fID) group by t.fID, t.Rubrik order by Senaste desc limit 10"
Set rs = objCon.execute(strSql)
rs.close:Set rs=nothing

i http://www.n-spot.se/default.asp?p=startpage2

Och helt plötsligt gick den sidan också långsamt. Vad är fel med koden igentligen?? Ska den verkligen ta så mycket kapacitet? :l

FrezzeMedlem sedan apr. 2004114 inlägg
#12

jawbreaker skrev:

Jag säger som Erik Juhlin, kolla över nycklar och index i databastabellerna...

Jag antar att forumet.fID och forumsv.svID är satta som primärnycklar på respektive tabell?
Och så bör väl forumsv.Tillid vara indexerad.

Om det saknas nycklar eller index så kan sql-frågorna bli apslöa när det kommit in lite data i tabellerna nämligen.

Wow! Vilken jädrans skillnad det blev nu. Har bara använt Mysql i några månader, så jag har inte lärt mig alla dens hemligheter ännu. Men jag tackar så himmla mycket för hjälpen!

Fattar fortfarande inte att det kunde bli en så stor skillnad :p

jawbreakerMedlem sedan jan. 2003296 inlägg
#13

Man kan bli förvånad ibland. Men det är så - ett index på rätt ställe kan snabba upp en sql-fråga med ett antal tusen procent eller så...

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#14

Mmm... Index är bra...

Har inte MySql något motsvarande Profilern som finns till SQL Server? Alltså ett verktyg där man kan övervaka vilka SQL frågor som körs, hur lång tid de tar o.s.v.

Har använt det till en del system för att hitta tunga SQL-frågor och sen bara satt in lämpliga index. Har hjälpt mycket för prestandan! :)

138 ms totalt · 3 externa anrop · v20260731065814-full.c74b5be1
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)