webForumDet fria alternativet

Optimeringstips (Det var ett tag sen)

ASP

25 svar · 757 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Ju mer man håller på att kodar i ASP desto mer lär man sig. Jag tänkte ge några nya optimeringstips. Skulle vara intressant att höra några av era favoriter.

  1. Response.redirect
    Iställer för att använda response.redirect kan man använda sig av server.transfer som är en aning snabbare.

  2. Arrays kombinerat med konstanter

Innan kodade jag på detta sätt:

strSQL = "SELECT (din sqlfråga)"
Set RecSet = Connect.Execute(strSQL)

			IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows

FOR I=0 to UBound(arrRecords,2)
		
			variabelX = arrRecords(0,I)
			variabelY = arrRecords(1,I)

			response.write variabelX & variabelY
Next

Idag försöker jag mer arbeta på detta sätt:

const variabelX = 0
const variabelY = 1

strSQL = "SELECT (din sqlfråga)"
Set RecSet = Connect.Execute(strSQL)

			IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows

FOR I=0 to UBound(arrRecords,2)
			response.write arrRecords(variabelX,I) & arrRecords(variabelY,I)
Next

Rekommenderat är att namnge sina konstanter med det innehåll de innehåller så att man får en bra överblick över koden.

Kom gärna med fler tips som sagt...

Medlem sedan dec. 19998 577 inlägg
#2

Bara en liten notering på punkt ett: skillnaden mellan response.redirect och server.transfer är att all "state" följer med till nästa sida när du använder transfer, vilket inte sker med redirect... varför det också låter konstigt att det skulle gå snabbare...

Mvh, Vide

Medlem sedan aug. 20003 575 inlägg
#3

Stäng alltid databas kopplingen

Connect.Close
Set Connect = Nothing
Set RecSet = Nothing

Loopa inte in text i variabler som du senare vill skriva ut skriv ut det direk.

Använd helst bara
<%%>
en gång

Medlem sedan nov. 20017 144 inlägg
#4

Vide skrev:

Bara en liten notering på punkt ett: skillnaden mellan response.redirect och server.transfer är att all "state" följer med till nästa sida när du använder transfer, vilket inte sker med redirect... varför det också låter konstigt att det skulle gå snabbare...

Mvh, Vide

Vad är all "state"?

Medlem sedan juni 20022 599 inlägg
#5

Att jämföra response.redirect och server.transfer är som att jämföra äpplen med päron. response.redirect är i allt väsentligt en klientfunktion och kräver två rundturer över nätverket. Ganska givet att den är långsammare under de flesta förhållanden.

Medlem sedan feb. 200112 078 inlägg
#6

Använd ,,128 vid databasoperationer som inte returnerar ett recordset.

objConn.execute("UPDATE table SET kolumn = " & value & "")[red],,128[/red]

Använd option explicit överst på alla sidor (för felhantering) och dim:a alla variablar.

Medlem sedan dec. 19998 577 inlägg
#7

Jesper T skrev:

Vad är all "state"?

Från DevGuru:
This transfered information includes all objects and variables that have been given a value in an Application or Session scope, and all items in the Request collections.

Medlem sedan feb. 200112 078 inlägg
#8

OT: Tycker det verkar lite konstigt att de skriver Application och Sessionscope i den beskrivningen, för de samlingarna följer ju med oavsett hur du länkar/skickar/postar till en ny sida. :)

Medlem sedan sep. 20026 425 inlägg
#9

Exakt vad gör 128 Override?

Mer:
- använd sessioner så lite som möjligt - stäng helst av användningen av dem
Kod: <%@enablesessionstate=false%>

- använd oledb i stället för odbc till databaser
Kod: Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("din_databas.mdb")

Medlem sedan feb. 20022 594 inlägg
#10

Använd mySQL istället för Access!

Medlem sedan feb. 200112 078 inlägg
#11

Konstanterna ,,128 ser till att det inte returneras ett tomt recordset vid INSERT eller UPDATE i ett execute-anrop.

Prestandamässigt bättre med andra ord.

Alltså:

'vill ha ett recordset tillbaks
[red]set rs = [/red]conn.execute("select * from table")

'vill inte ha ett recordset tillbaks
conn.execute("update table set kolumn = 1 where id = 5")[red],,128[/red]
'eller
conn.execute("insert into table (kolumn) values('nåt')")[red],,128[/red]
Medlem sedan juni 20003 076 inlägg
#12

Fråga, vad är skillnaden:

const variabelX = 0
const variabelY = 1

strSQL = "SELECT (din sqlfråga)"
Set RecSet = Connect.Execute(strSQL)

			IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows

FOR I=0 to UBound(arrRecords,2)
			response.write arrRecords(variabelX,I) & arrRecords(variabelY,I)
Next
strSQL = "SELECT (din sqlfråga)"
Set RecSet = Connect.Execute(strSQL)

			IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows

FOR I=0 to UBound(arrRecords,2)
			response.write arrRecords(0,I) & arrRecords(1,I)
Next
Medlem sedan maj 20011 312 inlägg
#13

Override: Men returnerar update eller insert något?

Medlem sedan maj 20011 312 inlägg
#14

doggelito: Skillnaden är att du inte har någon aning om vad som finns i arrayn när du skriver ut det på det sättet. konstanter ska hjälpa en att få en bättre överblick över koden.

Medlem sedan juni 20003 076 inlägg
#15

Lukaspojken skrev:

doggelito: Skillnaden är att du inte har någon aning om vad som finns i arrayn när du skriver ut det på det sättet. konstanter ska hjälpa en att få en bättre överblick över koden.

Sant!

Mitt tips och kanske det allra bästa tipset är att om man skriver samma saker väldigt ofta och på flera ställen så för guds skull gör en function eller sub isället!
Vet du inte vad function eller sub är så gör en sökning här på wF eller på msdn. :)

Medlem sedan feb. 200112 078 inlägg
#16

Lukaspojken skrev:

Override: Men returnerar update eller insert något?

Nej, inte om du kör det på det sättet. Däremot kan du få dem att returnera felkod eller mess eller liknande om man använder klasser eller funktioner.

Medlem sedan feb. 200112 078 inlägg
#17

Lukaspojken skrev:

doggelito: Skillnaden är att du inte har någon aning om vad som finns i arrayn när du skriver ut det på det sättet. konstanter ska hjälpa en att få en bättre överblick över koden.

Konstanter har väl en fördel i prestanda också tror jag, om man jämför med variablar. En konstant kan inte ändra värde under runtime vilket gör den readonly i koden, och därmed ökar prestandan.

Så är det väl iallafall i VB, rätta mig någon om jag har fel. :)

Medlem sedan juni 20003 076 inlägg
#18

Lukaspojken skrev:

Override: Men returnerar update eller insert något?

Dock kan det returnera antalet träffade poster.

conn.execute("update table set kolumn = 1 where id = 5"),rows,128
response.write rows
Medlem sedan feb. 200112 078 inlägg
#19

doggelito, ja det kan det. Men om vi bortser från konstanter så returnerar ju inte ett execute-anrop nåt direkt konkret. ;)

Medlem sedan feb. 2002116 inlägg
#20

Jag har hört att det skall vara bra att ha

Response.Buffer=True

Överst på alla sidor, eftersom det betyder att alla ASP-kod, databaskopplingar osv. görs innan sidan börjar ladda hem HTML-koden. Har använt mig av det på några sidor, och tycker att sidorna laddar snabbare då.

267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)