webForumDet fria alternativet

Ett antal frågor av blandad karaktär som jag mer eller mindre skulle vilja ha svar på

22 svar · 691 visningar · startad av trexter.com

trexter.comMedlem sedan apr. 20021 203 inlägg
#1

Jag har programmerat ASP i mer än ett halvår och det känns som att jag måste få svar på vissa frågor för att kunna avancera med nya tekniker och nya tricks.
Som vanligt är jag tacksam för inlägg skrivna av författare som vet vad dem snackar om! ;)
De frågor jag har är följande:

1. Option Explicit
-- besvarad --

2. Stored Procedures
-- besvarad --

3. Templates
Det var inte så längesedan jag ställde en fråga angående detta och fick då några bra (tack för dem) artiklar om ämnet men dock skulle jag gärna vilja se någonting lite enklare som någon här på forumet har skrivit så att jag bättre förstår. Det handlar alltså om en HTML-Template med ASP-variabler för head, body osv. I det exemplet jag studerade fanns det bara "stöd" för en sida och inte flera, det vill säga, för en -hel- hemsida.

4. Com Objekt
-- besvarad --

5. Prestandatester
Hur brukar ni göra innan ni slutgiltigt släpper iväg ett system till en kund? På vilka plan och med vilka metoder testar ni prestanda? Jag vet att man med någon kod (trevligt om någon postar den :) ) kan se hur snabbt en ASP-sida genereras men det måste ju finnas massvis av andra faktorer som också spelar in...

6. Scriptlets
Samma som nummer fyra, samma som nummer två (ledsen att frågorna kommer lite om lott med varandra). Detta är förövrigt någonting jag undrar mycket över så det vore extra juste om ni svarar på just denna! ;)

7. REXX scripting language
Det ska tydligen finnas ett scriptspråk som man kan använda i asp som heter rexx. Har det några speciella ändamål eller är det bara ett utdaterat gammalt scriptspråk? Ren nyfikenhet...

8. Citat från en hemsida (som borde vara pålitilig):
-- besvarad --

9. Till slut lite MS-citat!
På microsoft finns en liten tio-i-topp-lista över tips rörande prestanda i asp. Det skulle vara formidabelt om någon kunde skriva om var punkt (ok, ni kan skippa ettan och den om OptionExplicit om ni vill ;)):

1. Design for success.
2. Use application state for caching output.
3. Create and modify ProcessorThreadMax registry value.
4. Use system DSNs, not file DSNs or DSN-less DSNs.
5. Enable buffering for all Applications.
6. Use Microsoft Transaction Server "Library" Packages.
7. Disable Session state, if not used.
8. Use OptionExplicit with VBScript.
9. Make ADO free-threaded if you use SQL Server.
0. Modify the metabase AspScriptEngineCacheMax value.

Jag vet att det är många frågor men snääälla... :f :OO
Nåja, jag hoppas att i alla fall någon lägger lika lång tid på sitt svar som jag gjort på mina frågor och att denna tråden blir ett bra bidrag till ASP/VBScript-forumet! :bire

MVH Trexter.com | trexter@email.com
Tack på förhand!

:)

@ndersMedlem sedan juni 200032 969 inlägg
#2

Vi tar en i taget.

  1. Jag har inte märkt någon generell prestandabättring i de applikationer jag skrivit. Det ska till hög belastning om man ska kunna märka någon skillnad. Dock finns en annan stor fördel, och det är att man tvingas definiera alla variabler man vill använda. Det gör att man fort märker om man skrivit fel på ett variabelnamn, istället för att felsöka på helt fel ställen.

  2. Stored Procedures har ingenting med ASP att göra. En Stored procedure är ett kodstycke SQL för Microsoft SQL Server och andra ordentliga DBMS. En Stored procedure går fortare att exekvera än lösa SQL-frågor, då servern före exekveringen vet vad som ska exekveras.

  3. Ett COM-objekt är kompilerad kod, skriven i något riktigt programspråk, exempelvis C++ eller Visual Basic. COM betyder Component Object Model, och man brukar kalla dem för komponenter helt enkelt.

  4. Testar brukar jag inte göra själv, men jag ser till att någon testar med någon sorts stresstestprogramvara, som simulerar x antal samtidiga användare och anrop.

  5. Nyckel: if you are working with the Oracle database. Använder du Access, hoppa över det som står specifikt för Oracle. ;)

- - - -

Japp, jag hoppade över några. Dels sånt som jag inte har tid att svara på, och dels sånt jag inte har kompetens att svara på.

Mvh,

trexter.comMedlem sedan apr. 20021 203 inlägg
#3

Oj! Får nog gå och lägga mig nu... :r :D
Hade ju varit bra att ha kvar frågorna om någon annan ville titta, men, men, för sent!

:)

solbulleMedlem sedan mars 20015 287 inlägg
#4

Red. Ursäkta, du hade visst noterat det såg jag när jag uppdaterade sidan. (frågorna)

SkarreMedlem sedan apr. 20012 427 inlägg
#5

Trexter, om du inte hade raderat de besvarade frågorna kunde även andra fått ut någonting av den här tråden.

trexter.comMedlem sedan apr. 20021 203 inlägg
#6

Tack för svaret Anders! Ingen annan som kan hjälpa till?

Solbulle: Ingen fara! Förresten, känner du igen denna gamla hemsidan? http://home.no/musicfocus ... för du har väl varit medlem i megadomains forum för så där ett, ett o ett halvt år sedan? :q

Skarre: Läs Solbulles inlägg eller läs mitt!

:)

SkarreMedlem sedan apr. 20012 427 inlägg
#7

Sorry, Trexter. Jag läste inte hela tråden. :)

PaceMedlem sedan juni 20019 024 inlägg
#8

Jag kan ta mina egna erfarenheter av punkt 3: templates.

Jag har nyligen slängt in alla artiklar (ursprungligen html-filer) i databasen och genererar via mallar dessa html-filer istället. Mycket smidigare! Sökningar görs i databasen (snabbare), ändringar kan göras online etc. Databasmodellen är nog det viktigaste, den avgör ju hur utbyggbart det kan bli i framtiden. Såhär har jag gjort:

1. articles_texts - Alla artiklar.
2. articles_categories - Kategori för varje artikel.
3. articles_sections - Sektionen på hemsidan (artiklar/adresser etc). 
   Varje kategori är ihopkopplad med en sektion.
4. articles_templates - Mallarna. Varje sektion är kopplad till en egen mall.

För att förstå databasmodellen är det nog enklast att börja bakifrån med punkt 4: I articles_templates sparas mallarna. Eftersom alla sidor inom en viss sektion på hemsidan har samma layout skapas en mall för varje sektion i tabellen articles_section (t ex artiklar, postadresser, program etc). Därefter finns det olika kategorier inom en sektion (t ex postadresser: filmfestivaler, resruscentrum, övrigt) och det sparas i tabellen articles_categories. Kategorin är sedan kopplad till artikeln.

Mycket JOINs blir det, men ingen data är sparad på mer än ett ställe och det är väldigt utbyggbart. Samtidigt kan man byta layout på en hel sektion genom att ändra ett ID nummer. Det var mitt mål och det blev färdigt igår! Skööönt! :bire

doggelitoMedlem sedan juni 20003 076 inlägg
#9

Fråga 3 (igen)

Eftersom jag är ett stort fan av dreamweaver (MX) så kan jag
rekomendera att använda sig av deras templates.
Där kan du enkelt skapa olika mallar för hur sidor ska se ut, vill du
sedan ändra nån detalj så ändrar du bara i template-filen så
ändras alla tillhörande sidor automatiskt, praktiskt och enkelt!

Dock, detta är endast designtemplate inte informationstemplate.

Men vill du ha nått mer djupgående att sätta dig in i så börja skissa på
en databas-template som Pace beskrev ovan :)

trexter.comMedlem sedan apr. 20021 203 inlägg
#10

Pace:
Ok, men hur der dina templates ut? Så här någonting?

<html>
<body>
<%
' databaskoppling
SELECT * FROM t WHRE ID = 2
osv.
%>
</body>
</html>

:)

solbulleMedlem sedan mars 20015 287 inlägg
#11

trexter: stämmer fin fint. :)

trexter.comMedlem sedan apr. 20021 203 inlägg
#12

solbulle skrev:

trexter: stämmer fin fint. :)

Yeah, tänkte väl det! Då kan jag passa på att tacka dig (om än lite sent :D ) eftersom att jag kommer ihåg att du _då_ gillade den designen vilket uppmuntrade mig att fortsätta!

:)

trexter.comMedlem sedan apr. 20021 203 inlägg
#13

Pace, är det inte smaratare att använda objekt istället? Som här? (jag vet inte själv...):
http://www.4guysfromrolla.com/demos/asptemplates/reallycomplex.asp?ID=0
och här: http://www.4guysfromrolla.com/demos/asptemplates/complex.asp ??

... och så kan jag glatt meddela att jag kommit fram till vad REXX är för någonting: Ett scriptspråk, utvecklat på en IBM och körs oftast på sådana... används oftast för att göra CGI-scripts. Ett kodexempel:

SAY "Content-type: text/plain"; SAY ''

Input=TRANSLATE(GETENV('QUERY_STRING'),' ','+')

DO WHILE INDEX(Input,'%')/=0
   PARSE VAR Input Pre'%'+1 Char +2 Input
   IF VERIFY(TRANSLATE(Char),'0123456789ABCDEF')=0 THEN Input=Pre||X2C(Char)||Input
   ELSE DO; SAY 'Invalid %'Char' ASCII encoding!<br>'; EXIT; END
END

Valid=' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
Valid=Valid||'0123456789-_/.@'
V=VERIFY(Input,Valid)
IF V/=0 THEN DO
   SAY 'Bad char('SUBSTR(Input,V,1)') in:"'Input'"' 
   EXIT 99
END

IF SUBSTR(GETENV('REMOTE_ADDR'),1,7)/='134.79.' THEN DO
  SAY 'Access restricted to SLAC nodes!<br>'; EXIT
END'

ADDRESS UNIX 'finger' Input

:)

PaceMedlem sedan juni 20019 024 inlägg
#14

trexter.com skrev:

Pace:
Ok, men hur der dina templates ut? Så här någonting?

<html>
<body>
<%
' databaskoppling
SELECT * FROM t WHRE ID = 2
osv.
%>
</body>
</html>

:)

Nja, all ASP-kod ligger ju i filen. I databasen sparar jag bara html-layouten. Värden placerar jag ut med påhittade variabler: {variabel}. T ex:

<html>
<body>
[red]{menu}[/red]

<div class="rubrik">[red]{title}[/red]</div>
</body>
</html>

trexter.com skrev:

Pace, är det inte smaratare att använda objekt istället? Som här? (jag vet inte själv...):

Jag har endast nämnt databasmodellen, inte själva koden för att presentera filerna. Det kan man göra på flera olika sätt.

Själv har jag gjort ett classobjekt som antingen sparar filen till webbservern, visar filen till webbläsaren, eller laddar ned den till klienten. Jag använder det förstnämnda för att publicera filer och det mittersta för att förhandsgranska.

trexter.comMedlem sedan apr. 20021 203 inlägg
#15

Du skulle inte kunna ta bort innehåll och sådant som du inte vill visa och sedan posta lite hela koder och sådant eller skicka det till mig? Det vore -grymt- snällt!

:)

PaceMedlem sedan juni 20019 024 inlägg
#16

Nej, tyvärr. Det är för många timmars slit för att jag ska dela med mig av det. Men kanske kommer det något miniscript senare, vem vet.

De exemplen du postade från 4guysfromrolla fungerar ju utmärkt till det också! Använd dem. ;)

Dock ser presentationskoden ut såhär (utan objekt):

	Response.Write "<B>Kompilerar filer...</B><P>"
	For I = 0 To Ubound(arrRecords, 2)
		' Hämta värden.
		intArticleID = arrRecords(0, I)
		strArticleFilename = arrRecords(1, I)
		strSectionSaveToPath = arrRecords(2, I)
		strTitle = arrRecords(3, I)
		strAuthorName = arrRecords(4, I)
		dtmPostDate = arrRecords(5, I)
		strMetaDescription = arrRecords(6, I)
		strMetaKeywords = arrRecords(7, I)
		strArticleText = arrRecords(8, I)
		strTemplateHeadText = arrRecords(9, I)
		strTemplateFootText = arrRecords(10, I)
		
		' Konkantenera till utdata.
		strOutputText =	_
			strTemplateHeadText & _
			strArticleText & _
			strTemplateFootText
		
		' Ersätt miljövariabler.
		strOutputText = Replace(strOutputText, "{articleid}", intArticleID)
		strOutputText = Replace(strOutputText, "{title}", strTitle)
		strOutputText = Replace(strOutputText, "{author}", strAuthorName)
		strOutputText = Replace(strOutputText, "{metadescription}", strMetaDescription)
		strOutputText = Replace(strOutputText, "{metakeywords}", strMeyaKeywords)
		
		' Sökväg.
		strArticleFilename = Server.MapPath(strSectionSaveToPath & strArticleFilename & ".html")
		
		' Skriv ut artikeln:
		Response.Write "<LI><SPAN STYLE=""font-family: courier new, courier; font-size: 10pt;"">" & strArticleFilename & "</SPAN>"
		Call CompileArticle("file", strArticleFilename, strOutputText)
	Next
	
	Response.Write "<P><B>Klart: " & (Ubound(arrRecords, 2) + 1) & " filer kompilerade.</B></P>"
End Sub

Sub CompileArticle(sWriteMode, sFileName, sOutputText)
	Dim objOutput
	Set objOutput = New clsPaceContentWriter
	
	With objOutput
	    .WriteMode = sWriteMode		' Utskrivningsmetod.
	    .FileName = sFileName		' Filnamn.
	    .Write(sOutputText)			' Skriv ut till vald destination.
	End With
	
	Set objOutput = nothing
End Sub
trexter.comMedlem sedan apr. 20021 203 inlägg
#17

Två frågor: Varför har du inte någon början till första subben och varför använder du subbar över huvudtaget?

:)

PaceMedlem sedan juni 20019 024 inlägg
#18

Jag tog inte med början av subben för jag vill inte visa det som finns i början. ;)

Varför jag använder subbar? Tja, att "modularisera" koden är det enda vettiga om man vill ha struktur. Ännu hellre classer eller com-objekt om man har det.

trexter.comMedlem sedan apr. 20021 203 inlägg
#19

Pace skrev:

Jag tog inte med början av subben för jag vill inte visa det som finns i början. ;)

Varför jag använder subbar? Tja, att "modularisera" koden är det enda vettiga om man vill ha struktur. Ännu hellre classer eller com-objekt om man har det.

Hmm.. jag kan ingenting direkt om subrutiner som du kanske märker.

Varför skulle det strukturera upp koden bättre för att man använder dessa?´ :q

:)

PaceMedlem sedan juni 20019 024 inlägg
#20

Det blir bättre på så vis att du kan byta ut/ändra/ta bort valfri kod mycket, mycket enklare. Du slipper skriva saker två gånger. Använder du en viss typ av sak ofta kan du göra en sub/funktion av den och kalla på den via en global include-fil.

Sök lite efter det, det finns mer. Här är vad jag vet än så länge:
http://www.webforum.nu/showthread.php?s=&postid=85966#post85966

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