webForumDet fria alternativet

Snabbare hemsida

34 svar · 949 visningar · startad av danielpetersson

danielpeterssonMedlem sedan apr. 2002123 inlägg
#1

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

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#2

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
#3

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.

danielpeterssonMedlem sedan apr. 2002123 inlägg
#4

Stängda Recordset?

Hur går det till?

LAMPMedlem sedan mars 2002777 inlägg
#5

Kika på metoderna getstring() och getrows() ;)

SPiNMedlem sedan mars 20007 896 inlägg
#6

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. :)

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#7

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.

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#8

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
#9

Försök optimera databasfrågan, använd också execute() metoden, så slipper du en massa reserveade resurser för recordset.

/T

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#10

Men Toonster, då kan man ju inte ha frånkopplade recordsets...

Jesper TMedlem sedan nov. 20017 144 inlägg
#11

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

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#12

Du kan stänga databaskopplingen direkt efter du har skapar recordsettet. :)

Jesper TMedlem sedan nov. 20017 144 inlägg
#13

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
#14

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
#15

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
#16

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
#17

Finns inget blir väl if isarray(arrMyArray) then false?

SPiNMedlem sedan mars 20007 896 inlägg
#18

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
#19

Det är nog så spin, jag ger mig ;)

http://www.webforum.nu/showthread.php?s=&threadid=13306&highlight=isarray

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#20

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

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