Hej!
Jag håller på med en hemsida som är kopplade till en databas. Bla ska jag presentera en meny som är kopplade till databasen samt en sökfunktion. Det är en ganska stor databas. Jag skulle vilja att hemsidan blir snabbare än vad den är nu. Är där någon som har förslag på förändringar för att göra hemsidan snabbare?
Tacksam för svar
Om du söker på optimering i det här forumet så hittar du nog en del.
Men några tips från min sida. :)
- Option Explicit längst upp i koden
- Stäng object så fort du är klar med dem (öppna sent, stäng tidigt)
- Försök hålla nere antalet databashämtningar, vill du hämta från en annan tabell i en loop så använd JOIN i SQL.
- Kapsla in koden. COM-objekt är bäst, men klasser ska också vara bra.
- Se till att använda rätt drivrutin om du kör med Access (Jet...).
- Använd frånkopplade recordsets.
SPiNMedlem sedan mars 20007 896 inlägg Jag hade bara en liten synpunkt på följande:
# Kapsla in koden. COM-objekt är bäst, men klasser ska också vara bra.
COM-objekt kan användas för att göra sidan snabbare, eftersom att det då handlar om kompilerade klasser, metoder och funktioner. Men klasser i ASP gör inte sidan snabbare utan mer skalbar, vilken är en enorm fördel vid större system.
LAMPMedlem sedan mars 2002777 inlägg Kika på metoderna getstring() och getrows() ;)
SPiNMedlem sedan mars 20007 896 inlägg
Stängda Recordset?
Hur går det till?
DittRecordSet.Close
set DittRecordSet = Nothing
Sätter du även det stängda recordset:et till Nothing så rensar du upp lite i minnet, vilket också är bra. :)
SPiN: Har inte använt klasser i ASP eftersom att det känns ganska kasst i jämförelse med COM. Därför har jag inte så mycket koll på det. ;)
danielpetersson: Inte stängda utan frånkopplade recordsets.
När man öppnar recordsettet så använder man adOpenStatic som cursortype och sen rs.ActiveConnection = Nothing.
ADO stänger själv recordsettet (.Close) när man sätter det till Nothing. Så det enda man behöver skriva är set DittRecordSet = Nothing.
ToonsterMedlem sedan feb. 20001 590 inlägg Försök optimera databasfrågan, använd också execute() metoden, så slipper du en massa reserveade resurser för recordset.
/T
Men Toonster, då kan man ju inte ha frånkopplade recordsets...
Jesper TMedlem sedan nov. 20017 144 inlägg Liten fråga:
Är det inte bra att lägga in recsetet i variabler och sedan stänga det med en gång.
öppna databas
skapa recset
sätta variabler ifrån kolumner
stänga recset
stänga databas
presentera recset med variablar
MVH Jesper
Du kan stänga databaskopplingen direkt efter du har skapar recordsettet. :)
Jesper TMedlem sedan nov. 20017 144 inlägg
Du kan stänga databaskopplingen direkt efter du har skapar recordsettet.
Kan man?
Men om du har stängt databaskopplingen och försöker göra så här:
variabel=rs("något")
så får man väl ett felmeddelande????
MVH Jesper
SPiNMedlem sedan mars 20007 896 inlägg För att optimera bör man använda GetRows, och inte recordset:et.
set objRecordset = objConnection.Execute ( "SELECT blah FROM lah" )
arrGetRows = Null
If Not objRecordset.EOF Then
arrGetRows = objRecordset.GetRows
End If
objRecordset.Close
set objRecordset = Nothing
' Gör vad du vill med dina värden som numer är lagrade
' i den två-dimensionella arrayen arrGetRows
LAMPMedlem sedan mars 2002777 inlägg Ser rätt omständigt ut:
sql ="SELECT fält1, fält2 FROM tabell ORDER BY fält1"
arrMyArray = connect.Execute(sql).GetRows()
connect.close()
set connect = nothing
if isarray(arrMyArray) then
'loopa ut den tvådimentionella arrayen
end if
SPiNMedlem sedan mars 20007 896 inlägg Men då missar man kontrollen om den är tom. Man måste kolla mot EOF har jag för mig för att få reda på om det returneras några rader.
LAMPMedlem sedan mars 2002777 inlägg Finns inget blir väl if isarray(arrMyArray) then false?
SPiNMedlem sedan mars 20007 896 inlägg Nope, inte vad jag har hört. Var så länge sedan jag pillade ASP, så jag är osäker - men jag har för mig att det inte gick så bra för mig. :)
LAMPMedlem sedan mars 2002777 inlägg IsArray ska visst det funka... Men jag hänvisar till en tidigare tråd där jag argumenterat till varför man inte ska använda GetRows...
http://www.webforum.nu/showthread.php?s=&postid=331937#post331937