Håller på och går igenom min webbsidas aspkoder som inkluderas på varje sida.
Och nu har jag kommit till nyhetsdelen av sidan och undrar om det går att korta ner denna kod en bit eller förbättra den.
<%
i = 0
Set Connect1 = Server.CreateObject("ADODB.Connection")
Connect1.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.Mappath("/database/nyheter.mdb")
Set RS = Server.CreateObject("ADODB.Recordset")
Addera1 = "SELECT * FROM nyheter order by id DESC"
RS.Open Addera1, Connect1
%> <% do while not rs.eof
i=i+1
if i <= 3 then %>
<img src="/top/pil.gif" width="9" height="10" border="0"> <b><a href=/news.asp?id=<%=RS("id")%>><%=RS("rubrik")%></a></b></br>
<%=RS("datum")%>
<p>
<%
end if
RS.MoveNext
Loop
RS.Close
Connect1.Close
%><br><b><a href="/aldrenyheter.asp">Äldre Nyheter</a></b>
@ndersMedlem sedan juni 200032 969 inlägg
- Om du ändå bara ska visa tre nyheter, begränsa det i SQL-frågan.
- Jag slängde bort lite tomma rader och ändrade öppningen av recordsetet.
- Jag bytte också namn på din hemskt namngivna SQL-fråga.
- Plockade bort onödiga context-switchar och ändrade till en response.write i do-loopen.
<%
Set Connect1 = Server.CreateObject("ADODB.Connection")
Connect1.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.Mappath("/database/nyheter.mdb")
strSQL = "SELECT * FROM nyheter order by id DESC"
set RS = Connect1.Execute (strSQL)
do while not rs.eof
Response.write "<img src=""/top/pil.gif"" width=""9"" height=""10" border=""0""> <b><a href=""/news.asp?id=" & RS("id") & """>" & RS("rubrik") & "</a></b></br>" & RS("datum") & "<p>"
RS.MoveNext
Loop
RS.Close
Connect1.Close
%>
<br><b><a href="/aldrenyheter.asp">Äldre Nyheter</a></b>
Du kan säkert tjäna på att byta från den Access-anslutningen du använder till en OLEDB-koppling.
mvh,
JosefMedlem sedan mars 20023 561 inlägg Dvs:
Connect1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/database/nyheter.mdb")
PeeerMedlem sedan mars 20025 907 inlägg
@nders skrev:
- Om du ändå bara ska visa tre nyheter, begränsa det i SQL-frågan.
Borde inte sqlfrågan se ut såhär då?
strSQL = "SELECT top 3 * FROM nyheter order by id DESC"
@ndersMedlem sedan juni 200032 969 inlägg
Peeer skrev:
@nders skrev:
- Om du ändå bara ska visa tre nyheter, begränsa det i SQL-frågan.
Borde inte sqlfrågan se ut såhär då?
strSQL = "SELECT top 3 * FROM nyheter order by id DESC"
Självklart. Jag glömde bara att lägga in det i koden. :)
*bankar hjärnan hårt i bordet*
Varför ta bort context-switchar när det gör koden tydligare och är effektivare än konkateneringar..?
Sen så skulle jag ändra till ett frånkopplat recordset. Och funktioner för att hämta ut recordsets och liknande.
@ndersMedlem sedan juni 200032 969 inlägg
Erik Juhlin skrev:
Varför ta bort context-switchar när det gör koden tydligare och är effektivare än konkateneringar..?
Förbaskat bra fråga faktiskt.
För mig är det bara naturligt. När jag började med ASP för ett par dagar sedan, så var det bättre att konkatenera, so I was told. Jag får väl ändra mig, om det är bättre med contextswitchar.
Om vi då spinner vidare på frågan: Erik, hur gick det med din konkateneringsfunktion skulle vara så mycket bättre än att konkatenera med &?
nikoMedlem sedan juni 20022 599 inlägg @nders>>
Kanske intressant:
http://www.developerfusion.com/show/1685/
Ska dock till många konkateneringar innan det börjar löna sig:
http://www.developerfusion.com/show/1685/3/
Fördeklarera dina variabler :P.
Dim strSql osv :D
@ndersMedlem sedan juni 200032 969 inlägg niko: Tack för länkarna. Det känns dock som att man oftast jagar millisekunder på fel ställen, om man inte har en stor, konkateneringsintensiv applikation vill säga. ;)
Mvh,
nikoMedlem sedan juni 20022 599 inlägg @nders>> Korrekt observation.
Nickemannen skrev:
Fördeklarera dina variabler
Källa?
JosefMedlem sedan mars 20023 561 inlägg God programmerarvana. ;)
Det blir för det mesta lättare att felsöka. Har även hört att variablerna hanteras lite snabbare om de är deklarerade, fast jag vet inte hur mycket sanning som ligger bakom det.
nikoMedlem sedan juni 20022 599 inlägg Om man dimmar variabler inne i funktioner/subbar så hjälper man så klart tolken på traven därför att den slipper undersöka om det redan finns en global variabel med samma namn. I annat fall är det väldigt svårt att förstå hur det skulle kunna ha nån betydelse.
@nders: Den la jag ner. Men när du säger att man jagar millisekunder på fel ställen så tycker jag det är konstigt att du börjat med konkatenering. För du gjorde väl det för att det ansågs vara snabbare..?
Sen så tycker jag inte bara man ska unvika konkatenering för att det är slött. Största anledningen till att undvika det är att koden ofta blir mer otydlig än om man använder context-switchar.
@ndersMedlem sedan juni 200032 969 inlägg
Erik Juhlin skrev:
@nders: Den la jag ner. Men när du säger att man jagar millisekunder på fel ställen så tycker jag det är konstigt att du börjat med konkatenering. För du gjorde väl det för att det ansågs vara snabbare..?
Sen så tycker jag inte bara man ska unvika konkatenering för att det är slött. Största anledningen till att undvika det är att koden ofta blir mer otydlig än om man använder context-switchar.
Att jag börjat med konkatenering? Jag har konkatenerat för fulla muggar i mer eller mindre fem år, eftersom, ja, det sades mig att konkatenering av strängar är bättre än mängder av contextswitchar.
Tydlighetsaspekten har du helt rätt i, men man ska inte optimera ihjäl sig med sådana här småsaker. ;)
Engine^Medlem sedan dec. 20003 887 inlägg Intressant tråd det här. Millisekundjakt är alltid skoj även om det kanske inte tillför användaren något ;) Optimering börjar bli ännu intressantare vid hiskeliga klientsides-recordsets, som loopas och modifieras. Där kan man titta på andra bitar, som kan slöa ner.
Den där Catter, som niko länkade till ska däremot jag titta på... jag har nämligen en rekursiv funktion med åtta konkateneringar för varje anrop och normalt anropas funktionen 2800 ggr. Det borde gå att tjäna in tid där ;)
nikoMedlem sedan juni 20022 599 inlägg Engine^ >>
Du har alltså 22400 (8*2800 ) konkateneringar?? Tabellen i min andra länk går bara upp till 2000, men om man extrapolerar så borde du kunna putsa bort ett par-tre veckor från din exekveringstid (om det är en och samma sträng).
Engine^Medlem sedan dec. 20003 887 inlägg Det är inte varje gång det konkateneras, men som värst har funktionen tagit cirka 4 ½ minut att köra :)
Jag har däremot tänkt till lite och har fått ner exekveringstiden till knappt 4 sekunder. Genom att inte använda konkatenering överhuvudtaget, utan pula in värden i en tabell istället... det fungerade bättre ;)
Jag tackar för er hjälp. Det funkar utan problem nu.