webForumDet fria alternativet

Tråden för smarta ASP tips/tricks

ASP

92 svar · 9 823 visningar · startad av iceM2 · sida 2 av 5

Frågan, av iceM2

Tänkte härmed starta en sammanhängande tråd där alla kan dela med sig av smarta ASP tips & tricks! Har ni något som ni tror kan hjälpa andra, för bättre struktur, prestandad eller rent utav bättre ASP? Fallgropar vanliga misstag som man bör undvika och i så fall hur? Allt e välkommet... \------------------ "Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass) \[Redigerat

Läs frågan i sin helhet →
Medlem sedan juli 20012 450 inlägg
#21

Suveräna tips här :)
Mitt tips: Gör om gör rätt ;)

------------------
/A.S

Medlem sedan feb. 20001 590 inlägg
#22

Tips 1:
När man länkar till en mapp (inte en enskild fil) så se till att det är en avslutande backslash. Se ex. nedan
<a HREF = "http://msdn.microsoft.com/workshop/">

Om det inte finns en avlsutande backslash, så får webbläsaren reda på att filen workshop inte finns, och då prövar webbläsaren med att själv lägga dit backslash'en. En extra tur från servern till klienten alltså...

Tips 2:

Använd server.transfer istället för response.redirect

vid response.redirect så skickas en felmeddelande till besökarens webbläsare med adressen till sidan som skall laddas, ytterligare en onödig omväg via webbläsaren. server.transfer flyttar exekveringen direkt i servern. (Fungerar med >iis4?)

Mitt största tips är nog ändå msdn.microsoft.com

/T

------------------
Jensen Ambassadör, mitt bästa köp! www.jensen.no

Medlem sedan juli 20011 129 inlägg
#23

Kom ihåg ordentlig indentering, det spar många minuter när man spårar problem eller vidarekonstruktion.

Function SkrivHej
&nbsp;&nbsp;Response.Write "Hej<br>"
&nbsp;&nbsp;For cLoop = 0 To 10
&nbsp;&nbsp;&nbsp;&nbsp;Response.Write "Hemskt mycket hej!<br>"
&nbsp;&nbsp;Next
End Function

[r]Tydligare indentering

[Redigerat av Koplik den 30 nov 2001]

Medlem sedan dec. 19996 522 inlägg
#24

Lägg in globala funktioner i en include på sidan. Döp den inte till .inc för då kan folk se den om de gissar rätt adress.

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan maj 20011 312 inlägg
#25

Använd array:s...det ökar prestandan enormt mycket. Alltså stäng databasen snabbt. Exempel:

strSQL = "SELECT field1, field2 FROM tabell"			
Set RecSet = Connect.Execute(strSQL)
			
    IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows
			
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing

IF ISArray(arrRecords) THEN

  FOR I=0 to UBound(arrRecords,2)

    field1 = arrRecords(0,I)
    field2 = arrRecords(1,I)

    Response.write "field1: " & field1 & "<br>field2: " & field2 & "<br>"

  Next
End if

Tack vara webforum så kom jag i kontakt med detta och det har skapat väldigt bra struktur i min kod samt att jag kunnat bygga upp lite större applikationer med fler användare. Tack!

[Redigerat av Lukaspojken den 30 nov 2001]

Medlem sedan feb. 20012 412 inlägg
#26

Hej, ytterligare ett:

Använd inte den 17 kb stora filen ADOVBS.inc . Defniniera enbart de konstanter du tänker använda eller ännu hellre använd "ren SQL".

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

Medlem sedan maj 200010 687 inlägg
#27

Toonster: Använder man Server.Transfer så kan man få problem. Man bytar ju då inte sida och om man säger att man postat något till databasen så vill man att besökaren ska komma till en ny sida. Annars kan man få det problemet att besökaren trycker på uppdatera och allt postas till databasen igen.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan mars 2001243 inlägg
#28

Använd array:s...det ökar prestandan enormt mycket. Alltså stäng databasen snabbt.

Har en fråga angående Lukaspojkens tips. Det här med arrays verkar vara en bra funktion... Finns det någon tråd här på WF där man kan läsa mer om det? Fattar inte riktigt hur det fungerar samt till vilka användningsområden man kan ha nytta av det..

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

Medlem sedan feb. 20012 412 inlägg
#29

Hej,

använd sökfunktionen och sök på Getrows.

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

Medlem sedan aug. 20002 992 inlägg
#30

/me Tackar för tråden!

------------------
"Om ändå Jorden vore platt!"

Medlem sedan nov. 20011 551 inlägg
#31

vid response.redirect så skickas en felmeddelande till besökarens webbläsare med adressen till sidan som skall laddas, ytterligare en onödig omväg via webbläsaren. server.transfer flyttar exekveringen direkt i servern. (Fungerar med >iis4?)

Nej, det funkar bara på 3.0 ASP

Bidrag... vet inte om detta är ngt att hja, men en bra sökfunktion, som man kan modifiera som man vill...

SUB Build_search_std
	'bygg upp IN 
		if request("exakt") ="yes" then session("exakt") = "yes" else session("exakt") = ""
		if request("no_upphavd") ="yes" then session("no_upphavd") = "yes" else session("no_upphavd") = ""
		if request("ISO")= "1" then 
		search_type = search_type + "1,"
		session("ISO") = "1"
		else
		session("ISO")=""
		end if
		'if request("IEC")= "2" then 
		'search_type= search_type + "2,"
		'session("IEC") = "2"
		'else
		'session("IEC")=""
		'End If
		if request("SS")= "3" then 
		search_type= search_type + "3,"
		session("SS") = "3"
		else
		session("SS")=""
		End If
		'if request("DIN")= "4" then 
		'search_type = search_type + "4,"
		'session("din") = "4"
		'else
		'session("din")=""
		'End If
		search_type=Left(search_type,Len(search_type)-1)
	'Bygg upp startsträng
	IF session("no_upphavd") = "" then
		strSQL_std = "select typ,dokid,pdfnamn,storlek,description,title,for_title,pages,edition,ann_date,pub_date,price from vy_Katalog_online_total where typ in("& search_type &") "
	else
		strSQL_std = "select typ,dokid,pdfnamn,storlek,description,title,for_title,pages,edition,ann_date,pub_date,price from vy_Katalog_online_total where typ in("& search_type &") and ann_date is null "
	end if

		
'-------------------------------ordningen räknad från XXXXXX--------------
'1=ISO
'2=IEC
'3=SS
'4=DIN

		
		IF request("exakt")="yes" then

			if len(request("description")) >=1 then tmpSQL_std=tmpSQL_std+" and description ='"&(request("description"))&"' "
			if len(request("number")) >=1 then tmpSQL_std=tmpSQL_std+" and number like '%"&(request("number"))&"%' "
			if len(request("title")) >=1 then tmpSQL_std=tmpSQL_std+" and title ='"&(request("title"))&"' "
			if len(request("for_title")) >=1 then tmpSQL_std=tmpSQL_std+" and for_title ='"&(request("for_title"))&"' "
			if len(request("dokid")) >=1 then tmpSQL_std=tmpSQL_std+" and dokid = "&(request("dokid"))&""
			
		
		else
			if len(request("description")) >=1 then tmpSQL_std=tmpSQL_std+" and Description like '%"&(request("description"))&"%' "
			if len(request("number")) >=1 then tmpSQL_std=tmpSQL_std+" and number like '%"&(request("number"))&"%' "
			if len(request("title")) >=1 then tmpSQL_std=tmpSQL_std+" and title like '%"&(request("title"))&"%' "
			if len(request("for_title")) >=1 then tmpSQL_std=tmpSQL_std+" and for_title like '%"&(request("for_title"))&"%' "
			if len(request("dokid")) >=1 then tmpSQL_std=tmpSQL_std+" and dokid = "&(request("dokid"))&""
		end if
			
			session("tmpSQL_std") = tmpSQL_std
			session("strSQL_std") = strSQL_std		

end sub

rättat till lite i koden ovan, därav editeringen...
------------------
Rammstein rules - Bestrafe mich

[Redigerat av hopparn den 01 dec 2001]

[Redigerat av hopparn den 01 dec 2001]

Medlem sedan nov. 20011 551 inlägg
#32

har et litet tips till samt en fråga:

tips först :)
när jag skall skicka saker till samma sid så skriver jag ALLTID följande
t ex

<form method="post" action="<%= Request.ServerVariables("SCRIPT_NAME") %>"

då kan man alltid flytta runt på sidan mellan t ex utvecklingsmiljön och den skarpa miljön och det gör inget om man döper om filen, jag tycker detta är smidigt :)

Frågan så: Jag har tidigare varit väldigt konsekvent då jag frågat efter saker, dvs varit noga med om det är en request.querystring eller en request.form... fick höra av en konsult nyligen att det var smidigare att bara köra request("fråga_efter") då man då kunde komma in från båda håll på sidan (om man nu skulle behöva köra en URL-sträng till samma sida...) Detta funkar bra, men min fråga är, blir det en fördröjning? anses det som korrekt kod? kan jag förlora på det?

tacksam för era kloka ögon..

Hoppis

------------------
Rammstein rules - Bestrafe mich

Medlem sedan juni 200032 967 inlägg
#33

Detta funkar bra, men min fråga är, blir det en fördröjning? anses det som korrekt kod? kan jag förlora på det?

Tja, det är klart att det finns tillfällen man utelämnar .form eller .querystring. Men, eftersom det finns fler collections än så, så innebär det, att när du utelämnar så kan servern bli tvungen att leta igenom form collection, querystring collection, servervariables och även cookies.

Det är en viss prestandaaspekt i det hela, men det tillhör även god programmerarsed att ange var värden skall hämtas ifrån.

Mvh,

------------------
Don't panic!

Medlem sedan maj 200010 687 inlägg
#34

Request("..") är bra att använda i de fallen då ett värde både kan komma från en formulärspostning och en QueryString. Annars bör man ju köra med Request.Form/QueryString.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan nov. 20011 551 inlägg
#35

det är ju lixåm det at de flesta sidor jag har är tvåvägiga, jag hade gjort en hel del IF satser (if request.form("") = "" then
IF request.que..... etc) Dessa är ju borta nu och det känns skönt.

Däremot skall jag följa era råd och använda mig av hela uttrycket på de sidor som det går att göra på =)

------------------
Rammstein rules - Mein Herz brennt

Medlem sedan maj 200010 687 inlägg
#36

Jag tycker det är helt rätt att göra så hopparn. Att hålla på med If-satser är jobbigt och troligen inte mer prestanda-sparande.

Ett nytt tips från mig till de som använder SQL Server är att använda Views. Mycket smidigt om man har stora krångliga SQL-strängar.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan feb. 20001 590 inlägg
#37

Erik Jhulin-> Jag vet inte alls vad du menar, server.transfer fungerar exakt som response.redirekt, förutom att klienten inte är inblandad. Och har inget som helst med databaser att göra...

Kan det vara server.execute du tänker på? där man kan exekvera en annan .asp i en .asp sida

Hopparn -> server.transfer finns med from. IIS5 (server funktionerna har inget med ASP tolken att göra, utan finns i webbservern IIS)

/T

------------------
Jensen Ambassadör, mitt bästa köp! www.jensen.no

[Redigerat av Toonster den 01 dec 2001]

Medlem sedan maj 200010 687 inlägg
#38

De fungerar inte likadant. Använder man Server.Transfer så är man kvar på samma sida utåt sett. Det är ju t.ex. därför man kan efter Server.Transfer använda samma QueryStrings som skickas till den första sidan.

Om man postar i ett formulär och på sidan som tar emot det gör Server.Transfer, då kommer man inte ifrån sidan som gör Server.Transer och om användaren då trycker på uppdatera så behandlas det som kommit i forumläret en gång till.
Vilket kan resultera i dubbelpostningar om man t.ex. skulle ha ett forum, gästbok eller liknande sak.

Sen en annan nackdel är att man inte kan skicka variabler med QueryString som vanligt. Visst kan man skriva variablen först på sidan och sen använda Server.Transfer. Men då tycker jag man går från den vanliga uppbyggnaden i det hela.

Server.Transfer är bra för vissa saker, men absolut ingen ersättare för Response.Redirect.

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan aug. 20003 575 inlägg
#39

vet inte om detta finns med än på denna tråd men
det är rätt viktigt att kolla så att
strängen man lägger in i databasen inte innehåller osjysta tecken,

Function FixChars(sVar)
FixChars = Server.HTMLEncode(Replace(sVar,"'",""))
End Function

------------------
"Brott kanske inte lönar sig, men det är kul"

Medlem sedan juni 200032 967 inlägg
#40

Jag skulle vilja göra en liten förbättring på Nickemannens lilla funktion.

Ersätt inte apostrof med tom sträng, utan med två apostrofer. Då gör du strängen SQL-säker, men du förändrar den inte på något sätt.

Enligt ersättningen i Nickemannens funktion tas alltså apostroferna bort, och försöker man stoppa in exempelvis namnet O'Connor, skrivs OConnor in i databasen.

Alltså:

Function FixChars(sVar)
FixChars = Server.HTMLEncode(Replace(sVar,"'","''"))
End Function

Mvh,

------------------
Don't panic!

285 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
151 ms — ändringar (db)