webForumDet fria alternativet

Optimering tills sista droppen

ASP

42 svar · 527 visningar · startad av Pace

Medlem sedan juni 20019 024 inlägg
Frågan#1

Finns det något jag glömt optimera?
(koden ligger på en förstasida så det är meningen att den ska gå ultrasnabbt)

Option Explicit
Response.Buffer = True
DIM rubrik, ingress, artikel, SQL, RS, nyheter, a, Connection, arrayp

SQL = "SELECT TOP 3 id, rubrik, ingress, artikel FROM Nyheter " & _
	"WHERE (start_datum < Now() OR start_datum IS NULL) " & _
	"AND (stop_datum >= Now() OR stop_datum IS NULL) " & _
	" ORDER BY publ_datum DESC, start_datum DESC, id DESC"

Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\inetpub\wwwroot\vf\nyheter\nyheter.mdb"
Set rs = Connection.Execute(SQL)

   If NOT rs.EOF Then arrayp = rs.GetRows()

rs.Close: Set rs = nothing
Connection.Close: Set Connection = nothing

For a = 1 to Ubound(arrayp, 2)
		If NOT isNull(arrayp(2, a)) Or NOT arrayp(2, a) = "" Then
		   arrayp(2, a) = Replace(arrayp(2, a), vbCrLf, "<BR>")
		End If

		Response.Write "<FONT FACE=""Arial, Helvetica"" SIZE=3><B>" & arrayp(1, a) & "</B></FONT><BR>" & _
			"<FONT FACE=""Verdana, Arial, Helvetica"" SIZE=1>" & arrayp(2, a)
		If arrayp(3, a) <> "" Then
		   Response.Write "<DIV ALIGN=""right""><A HREF=""nyheter/detail.asp?id=" & arrayp(0, a) & """>Läs mer</A></DIV>"
		End If
		Response.Write "</FONT><HR SIZE=1 ALIGN=""left"" COLOR=""#DDDDDD"">"
Next
Erase arrayp

[r] lite färgmarkeringar skadar väl aldrig :)
------------------
Peter D

[Redigerat av Pace den 25 aug 2001]

Medlem sedan feb. 20012 412 inlägg
#2

Tja!

Jepps, du kan slänga bort dina gräsliga <font> och använda CSS :e

mvh Jörgen

------------------
// Fin signatur
Jorgen hp = new Jorgen(this);

Medlem sedan juni 20019 024 inlägg
#3

Bah!!!

Det kommer, det kommer var lugn! I sådana här "utvecklingstider" så skiter man ju i allt vad CSS heter och kör på den gamla hederliga varianten. Men sen ska jag "implentera" skriptet på förstasidan.

Tiden för att gå igenom scriptet ligger på 49 ms som bäst och ca 60 i snitt.

------------------
Peter D

Medlem sedan dec. 19998 577 inlägg
#4

Istället för att skriva:

Set rs = Connection.Execute(SQL)

If NOT rs.EOF Then arrayp = rs.GetRows()

Kan du lägga det i ett array direkt utan att lagra recordsettet i ett objekt:

arrayp = Connection.Execute(SQL).GetRows()

Sedan kan du göra en check om det är ett array innan du försöker att använda den:

If IsArray(arrayp) Then
'Det var ett array
End if

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan dec. 200012 464 inlägg
#5

Det fungerar väl inte så bra om man får ett tomt recordset zom resultat, dvs

arrayp = Connection.Execute(SQL).GetRows()

ger ifrån sig celluiter då.

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20019 024 inlägg
#6

Jag testade "Connection.Execute(SQL).GetRows()" först, men det gav bara "Objekt krävs..."

------------------
Peter D

Medlem sedan maj 20011 312 inlägg
#7

Varför fungerar den inte för Pace, Vide? Det var en smart lösning annars.

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan dec. 19998 577 inlägg
#8

Jag brukar använda den lösningen när jag är absolut säker på att det finns data utifrån SQL-satsen. Och då är det inget problem... :)

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan maj 20011 312 inlägg
#9

Ok, ska lägga det på minnet. Apropå din if-sats. Minaa DB-hämtning ser idag ut så här:

		strSQL = "SELECT msgAntal FROM forumUpdate"
		Set RecSet = Connect.Execute(strSQL)

		IF NOT RecSet.EOF THEN
			arrRecords = RecSet.GetRows
			Records = "1"
		End If

Men jag skulle kunna ta bort Records = "1" (Markerar om den har gått in i if-satsen). Det skulle alltså räcka med att jag skriver så här sen senare i koden eller?

If IsArray(arrayp) Then
'Det var ett array
End if

Visste inte att det fanns ett sådant kommando.

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan maj 20011 312 inlägg
#10

Förresten Pace. Vill du öka hastigheten så kan du göra den till en statisk-sida, och vid uppdateringar så hämtar du bara värdena från DB:n och gör en writeLine funktion som skapar sidan statiskt automatiskt.

Då slipper du DB-kopplingen. Det kan ta några ms längre att göra uppdateringar för administratören men där är det egentligen bara en person som gör det. Första sidan besöks av så många fler än en. Eller vad tror du?

------------------
Alltid lär man sig något nytt varje dag...

[Redigerat av Lukaspojken den 25 aug 2001]

Medlem sedan juni 20019 024 inlägg
#11

Låter som en bra idé Lukaspojken, men "tyvärr" så ska sidan vara dynamisk.

... och data får jag när jag använder GetRows, så jag vet inte vad som kan vara problemet. :q

------------------
Peter D

Medlem sedan maj 20011 312 inlägg
#12

Vad är det som är dynamiskt på första sidan?

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan juni 20019 024 inlägg
#13

Allt annat :)
Nej, en poll och lite småsaker...

------------------
Peter D

Medlem sedan maj 20011 312 inlägg
#14

Du kan ju fortfarande ha det dynamiskt, du skipar bara DB-kopplingarna. Alltså DB-hämtningen görs bara en gång och det är när administratören gör uppdateringen.

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan juni 20019 024 inlägg
#15

Nej. "Lite småsaker" innefattar dynamiska saker som jag eventuellt inte kan kontrollera - och kan därmed inte skapa statiska filer.

------------------
Peter D

Medlem sedan maj 20011 312 inlägg
#16

Ok, men de du kan påverka kan du bara inkludera i en include-fil till första sidan. På så sätt får du bort onödiga DB-hämtningar, som tex din kod ovan.

------------------
Alltid lär man sig något nytt varje dag...

[Redigerat av Lukaspojken den 25 aug 2001]

Medlem sedan juni 20019 024 inlägg
#17
SQL = "SELECT TOP 3 id, rubrik, ingress, artikel FROM Nyheter " & _
"WHERE (start_datum < Now() OR start_datum IS NULL) " & _
"AND (stop_datum >= Now() OR stop_datum IS NULL) " & _
" ORDER BY publ_datum DESC, start_datum DESC, id DESC"

Om du kollar på denna SQL satsen så ser du att vissa nyheter kan publiceras inom ett visst datum/tid. Med andra ord kan jag inte skapa statiska filer... oavsett hur mycket du vill det! :e ;)

Förresten så tycker jag att 60 ms är en överkomlig tid.

------------------
Peter D

[Redigerat av Pace den 25 aug 2001]

Medlem sedan maj 20011 312 inlägg
#18

Jag kör ett dagligt-citat-script som jag gjorde för ett tag sen och det ser ut så här:

IF Right(citatDatum,5) <> Right(Datum,5) THEN	'Om en ny dag så ska citatet uppdateras

	DB_koppling

		strSQL = "SELECT citatText, citatNamn FROM citat WHERE citatDatum=#" & Datum & "#"
		Set RecSet = Connect.Execute(strSQL)

		IF not RecSet.EOF THEN
			arrRecords = RecSet.GetRows()
			citatText = arrRecords(0, 0)
			citatNamn = arrRecords(1, 0)
		End if

	RecSet.Close
	Set RecSet = nothing
	Connect.Close
	Set Connect = nothing

	citatText = Server.HTMLEncode(citatText)
	citatText = replace(citatText,vbcrlf,"<br>") 
	
	Text_koppling

		T.WriteLine "<" & "%"
		T.WriteLine "citatDatum = """ & Datum & """"
		T.WriteLine "citatText = """ & citatText & """"
		T.WriteLine "citatNamn = """ & citatNamn & """"
		T.WriteLine "%" & ">"

	T.Close
	Set T = nothing
End if

Sen när jag ska använda skriptet så inluderar jag det bara och då får jag tillgång till fyra "dynamiska" variablar. Detta kan du göra också göra.

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan maj 20011 312 inlägg
#19

Såg ett klumpigt fel jag gjorde i skriptet nu...haha...använde mig av getrow utan att behöva göra det. Jaja, det var gamla tider det när man inte var så bra på ASP...:)

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan juni 20019 024 inlägg
#20

Jo men ett "dagligt-citat-script" uppdateras i ett och samma intervall: en gång om dagen.

Ett nyhetsscript där man kan ställa in tiden då en nyhet ska publiceras är ju lite krångligare eller hur?

------------------
Peter D

290 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
140 ms — ändringar (db)