webForumDet fria alternativet

Optimera mindre!

56 svar · 1 843 visningar · startad av emission

emissionMedlem sedan dec. 19996 721 inlägg
#1

emission-babbel....

Jag är själv en tillskyndare av snabb och optimerad kod, och jag lägger ner viss möda på att göra mina ASP-sidor så effektiva som möjligt.På sistone har jag märkt att många fler än tidigare intresserar sig för just optimering, och det är självklart en vettig grej.

Men! Jag börjar känna att optimeringshysterin tagit lite väl stora proportioner, och den inriktas ofta på fel saker. Visst kan man klyva hår och fördjupa sig i användandet av &-tecken, response.write och context-switchar, men min åsikt är att man fokuserar på fel saker då.

  • Det är mycket vettigt att lära sig detaljerna kring &-tecknen etc. En god förståelse för hur ASP egentligen fungerar är den bästa grunden till effektivt kodande.
  • En effektiv och genomtänkt grundstruktur betyder MYCKET mer för prestandan än syntaktiska skillnader i koden.
  • Hårt syntax-optimerad kod är ofta svårläst.
  • Rädslan för context-switchar leder ofta till en onödigt komplex programstruktur, vilket i sin tur leder till prestandaförlust.
  • Nästan alla sidor bygger på databasåtkomst, och det är inom detta område man kan göra riktigt märkbara prestandavinster. Det spelar liksom ingen roll att man optimerat bort alla onödiga switchar, konkateneringar och response.write:ar, om man ändå tynger databasen med server-knutna recordsets etc.

Självklart bör man lära sig vad som är bra, och vad som är mindre bra, och koden SKA rensas från onödiga switchar och prestandaslukare, men jag tycker inte att det får gå ut över kodens struktur.

Många kan nog tycka att det inte spelar någon roll om koden är läsbar eller inte, eftersom ändå ingen annan ska läsa den (inget argument man söker programmerarjobb på direkt...). Men, man ska ju faktiskt själv kunna läsa koden, snabbt felsöka den och snabbt lägga till nya funktioner.

När jag kodar ASP bygger jag ALLT i subrutiner, funktioner,klasser och ibland i externa objekt. Ingenting förutom globala deklarationer och direktiv ligger utanför subbarna och funktionerna. Jag hoppar gärna ut ur ASP:n för att trycka ut HTML, och krävs en inline-tagg (<%=värde%> ) så må det så vara. Hellre en extra context-switch än att knyta fast designen i koden.

Detta är mitt sätt, men det finns självklart flera sätt som gör programmeringen effektiv. Helt klart en fråga om smak.

Men, det är just detta som är pudelns kärna. Att inte bara göra koden effektiv, utan kanske främst programmeringen.

Mina kunder vill självklart att jag skapar snabbt exekverande sidor, som visslar till i webbläsaren. De vill dock mycket, mycket mer att jag snabbt rättar till eventuella fel, och när en ny funktion beställs så ska den oftast vara klar igår... Det skulle jag aldrig fixa om jag skrivit toksyntaxoptimerad kod, och mina kollegor är glada att de bara behöver titta på Main-rutinen på en sida för att förstå programflödet, den dag jag ligger hemma i förkylning, och kunden ringer och vill ha mer....

Så....

1. Prestandan sitter i strukturen, inte i syntaxen.
2. Optimera er programmering, inte bara koden
3. Optimera rätt saker i koden. I skolen icke skjuta mygg med bazooka...

Detta var mina högst personliga tankar, och är man road av syntaxoptimering så ska man självklart fortsätta med det... :)

mvh
emission

------------------
-------------------
Att vara puckad är att dö en smula.
- Skywalker

CokeLightMedlem sedan juni 2000504 inlägg
#2

Låter som om det går att imitera den struktur som är vanlig bland oo-språk, fast det är ASP.. heheh.. trodde att det oundvikligt blev "spagetthi-kod".

Nu blev jag väldigt nyfiken.. du nämner "main"-funktion t.ex.. hur utnyttjar du den i en ASP-fil...? Trots jag bemödar mig om att strukturera ASP koden, och använda en inc fil med funktioner, så blir det ändå lätt "rörigt" efter ett tag. Jag skulle väldigt gärna lära mig att koda "snyggare" på det sätt som du beskriver. Har du möjligtvis nåt exempel med dummy-kod, men som ändå belyser den struktur du tillämpar...?

För ett tag sen fanns en intressant diskussion om delvis skiktade lösningar, och ASP beskrevs som en del av presentations-skiktet, eftersom det användes för att skriva ut HTMLn.

Mitt antagande är att man då tilldelar ASP-variabler kortare eller längre konkateneringar av HTML-kod. Sen kontrollerar man flödet, och därav utseendet på sidan, mha IF-satser e.d. Stämmer det? Gör du så, och isåfall hur strukturerar man koden på ett bra sätt i så fall? Så, kanske, istället för att jobba med 5 olika ASP-sidor med övervägande HTML som handlar om t.ex. shopping, så jobbar man med endast en ASP-sida med nästan endast ASP-genererad HTML som dynamiskt ändrar utseende...?

Jag vet alltså inte, och har aldrig kodat på det sättet eftersom jag är osäker på hur man strukturerar koden, och är rädd att det bara skulle bli kaos i alla fall :) Något tips...?

Detalj fråga: Om du dels har ASP för att generera HTML (pres.skikt) och sen ASP-funktioner i en separata filer, klassas inte då dessa funktions filer som delar av affärs-skiktet?

(Det blev lite mycket på en gång, men tänkte passa på medan ämnet ändå handlade om struktur :) )

Tack för dina råd ovan. Jag tycker inte att sånt här diskuteras spec. mycket i de böcker jag har, och jag tycker detta forum har bidragit enormt till min ASP-inlärning :)

------------------
"Between stimulus and response is a pause wherein our ability to choose lies".

@ndersMedlem sedan juni 200032 969 inlägg
#3

mycket bra inlägg, emission!

"när emission talar lyssnar man" - gammalt @nders-ordspråk.

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

erkaMedlem sedan dec. 19996 522 inlägg
#4

Mycket bra inlägg emission

När jag kodar ASP bygger jag ALLT i subrutiner, funktioner,klasser och ibland i externa objekt. Ingenting förutom globala deklarationer och direktiv ligger utanför subbarna och funktionerna.

Eftersom jag inte kodar så undrar jag vart man hittar kod exempel på hur något sådant kan se ut. Är lite borta ur leken på vad du menar, eller inte vad du menar utan HUR du menar.. ;)

------------------
Våga lek med dig själv

VideMedlem sedan dec. 19998 577 inlägg
#5

Jepp, håller med helt och hållet att det börjat gå lite långt i optimering av syntax (satt faktiskt och tänkte på det igår :e).

Toppeninlägg helt enkelt... :)

(Skräcksenario: Fan, man förlorar ju prestanda om man använder ASP... bäst att sluta med det också. §jr)

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

webeye.nu

CokeLightMedlem sedan juni 2000504 inlägg
#6

* skrattar * .. :) Du har nog en poäng Vide :)

------------------
"Between stimulus and response is a pause wherein our ability to choose lies".

LukaspojkenMedlem sedan maj 20011 312 inlägg
#7

Jag vill säga en sak jag också...det ligger mycket i det du säger emission...men skulle jag inte ställt alla mina optimeringsfrågor. Vilket har gett otroliga prestandavinster...kunde inte tänka mig att det skulle bli så...

Samtidigt som jag började tänka i optimeringstankar så fördjupades också mina kunskaper i ASP.

Varför man tex inte ska skriva request.form("form1") två gånger etc.

Min struktur i programmeringsfilen blev också bättre...jag tänkte en hel del på det där med response.write...men ser ingen anledning för att paketerare för jag har gjort så stora vinster redan nu...:) och det skulle som du själv säger bara försvåra mitt uppdateringsarbete av sidan...

Man kan ju i och för sig skapa en funktion som kör en response.write i slutet på en fil, samt att sen när man gör uppdateringen så kör man den igenom funktion och vips strukturerad kod.

På så sätt blir det svårare för en annan programmerare att använda sig av min kod om jag inte vill det, även om han/hon har tillgång till hotellet. Det han behöver är alltså funktionen för att få struktur på koden...:)

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

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#8

Bästa inlägget jag läst på länge! :)

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

LukaspojkenMedlem sedan maj 20011 312 inlägg
#9

Tack Erik...haha...det var så lite så...;D

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

PaceMedlem sedan juni 20019 024 inlägg
#10

Utmärkt emission! :f

Så här tror jag emission menar med en "main" funktion - så gör jag i alla fall och det ger mig total kontroll över min asp kod och gör designen (HTML koden då) dessutom otroligt lätt att ändra.

Själva "nyckeln" är att använda en querystring som kallas "action" - i den sköter jag nästan all kommunikation med sidan, och det är dessutom enkelt att begripa.
Ex: default.asp?action=listusers
Detta listar alltså användare på sidan (kolla i mainrutinen...)

<%
action = Request.Querystring("action")
%>

<HTML>
<HEAD>
	<TITLE>Blääääääääää</TITLE>
</HEAD>
<BODY BGCOLOR="white">

<TABLE BORDER=0 CELLSPACING=0>
<TR>
	<TD WIDTH=130 VALIGN="top" ALIGN="left">
	<FONT FACE="Verdana" SIZE=2>
		<!-- #include file="inc_leftmenu.asp" -->
	</FONT>
	</TD>
	
	<TD WIDTH=400 VALIGN="top">
	<FONT FACE="Verdana, Arial, Helvetica" SIZE=1>

	
	<%
	[b]' ***** Main funktionen *****[/b]
	Select Case Ucase(action)
	   Case "LISTUSERS"
		writeHeader("Användare")
		UserList()
	   Case "ADDUSERFORM"
		writeHeader("Lägg till användare")
		userAddForm()
	   Case "ADDUSER"
		writeHeader("Verifierar användare...")
		userAddUpdate()
	   Case "UPDATEUSER"
		writeHeader("Uppdaterar användare...")
		userAddUpdate()
	   Case "DELETEUSER"
		writeHeader("Ta bort användare")
		userDelete()
	   Case "EDITUSER"
		writeHeader("Redigera användare")
		userEdit()
	   Case "LOGOUT"
		logout()
	   Case "DELETELOGGFILE"
		writeHeader("Raderar logg-fil...")
		deleteLoggFile()
	   Case Else
		writeHeader("Huvudsidan")
		mainPage()
	End Select
	dbClose()
	%>

	<HR SIZE=1 ALIGN="left" COLOR="#CCCCCC">
	</FONT>
	</TD>

	<TD WIDTH=144 VALIGN="top" ALIGN="left">
		<!-- #include file="inc_rightmenu.asp" -->
	</TD>
</TR>
</TABLE>

</BODY>
</HTML>

<%
Sub sub1()
	'Gör din grej här!
End Sub

Sub sub2()
	' Gör nåt annat!
End Sub

%>

Längst ner på sidan skriver jag subbarna, som ni ser. Därmed är det också lätt att hitta och ändra - en sub för varje "handling". :)

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

LukaspojkenMedlem sedan maj 20011 312 inlägg
#11

Emission använder du av liknande main också eller? Är det en bra uppbyggnad som Pace presentera? Är fördelen bara att strukturen förbättras?

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

PaceMedlem sedan juni 20019 024 inlägg
#12

Är det en bra uppbyggnad som Pace presentera?

Va? Klandrar du på min struktur !! ;)

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

PaceMedlem sedan juni 20019 024 inlägg
#13

Nej, allvarligt talat - testa själv så lär du upptäcka vad som passar dig bäst. Det tycker jag nästan viktigare än att man gör på ett eller annat sätt. Fast det ska ju helst gå snabbt ändå. :)

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

LukaspojkenMedlem sedan maj 20011 312 inlägg
#14

Jag klandrar inte...:) Jag ville få lite andra perspektiv också...

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

[Redigerat av Lukaspojken den 21 jul 2001]

CokeLightMedlem sedan juni 2000504 inlägg
#15

Jag tyckte att Pace upplägg såg klart intressant ut.. ska prova vid tillfälle. :)

Förstår lite bättre nu :)

------------------
"Between stimulus and response is a pause wherein our ability to choose lies".

PaceMedlem sedan juni 20019 024 inlägg
#16

Japp, nu är det officiellt, här är den ultimata optimeringsguiden (så här SKA man göra):

  • Alla variabler bör bestå av ett tecken (det tar upp mindre minne).
  • Om variablerna börjar tryta är det fel på din programmeringsskicklighet, inget annat.
  • Inga subbar eller funktioner är tillåtna, det slöar bara ner.
  • All HTML ska skrivas på en rad (vid behov: två rader).
  • Kommentering av kod är förbjuden, då motorn måste behandla ' tecknet (vilket tar upp värdefull tid som kan användas till annat).
  • Skippa databaser, de är bara onödiga, förlita dig helt på din server: allt ska sparas i application objekt! (oavsett om du är webmaster för hotmail.com)
  • En context-switch är tillåten per fil.
  • Använd aldrig include-filer! Att kontrollera om filen finns eller ej har vi inte tid med.

Och kom i håg, om koden inte gör som den ska så är det dig det är fel på!
:)

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

emissionMedlem sedan dec. 19996 721 inlägg
#17

Pace : :)

Samtidigt som jag började tänka i optimeringstankar så fördjupades också mina kunskaper i ASP.

...och just av den anledningen ska man verkligen inte låta bli att fördjupa sig i optimeringsteknikerna. Det är ju först när man har alla fakta på bordet som man kan göra vettiga överväganden, om vad som är värt att göra.

Jag menar bara att optimeringen egentligen börjar i en annan ände.

Så här tror jag emission menar med en "main" funktion[

Japp, det var ungeför så jag menade. Inte sämre än min "reguljära" teknik, utan bara annorlunda. huvudsaken är att den passar för det ändåmäl man har. Själv kodar jag ofta så här:

<!--#include file="filer med globala funktioner"-->
<%
Dim [globala variabler]

Main 'eller annat namn. Main-rutinen kan snabbt bytas ut här, om man vill prova en annan variant

Sub Main
  GetVars ' hämtar formulärdata etc och lägger i variabler
  PrintHeader "Användaradmin" 'global metod för att skriva ut sidhuvudet, med titel som argument
  Select Case strAction
     Case "save"
         SaveUser
     Case "edit"
        EditUser
     Case "delete"
         DeleteUser
     Case Else
         ListUsers
   End Select
   PrintFooter 'globalt sidavslut
End Sub

Sub EditUser
.....

osv..

I bland fungerar denna metod inte 100%, och då gör jag annorlunda, men målet är alltid detsamma. Koden ska vara effektiv, modulär, funktionsbaserad och självdokumenterande (i mesta möjliga mån).

Nej, allvarligt talat - testa själv så lär du upptäcka vad som passar dig bäst. Det tycker jag nästan viktigare än att man gör på ett eller annat sätt.

Definitivt! Man får själv hitta en metod som gör ens kodande effektivt. Andemeningen med mitt inlägg var just att man lägga tid på att optimera sig själv (!), och inte bara de kodrader man skriver.

LukaspojkenMedlem sedan maj 20011 312 inlägg
#18

Ska definitivt börja testa main-funktionen...subbar längst ner, och include på allmänna sådana. Låter helt ok.

Pace: Jag visste inte att siffror i variabelnamnet drog prestanda...hur kommer det sig?

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

PaceMedlem sedan juni 20019 024 inlägg
#19

Emission >> Skönt att se att det är fler än jag som tänker i de banorna. :)
Man ska absolut lära sig strukturen innan man ger sig på optimering, helt klart! Och som du säger, denna "main" rutin fungerar ju inte alltid, men 90 procent av fallen. Det är ju också beroende på vad man gör.

Lukaspojken >> Var kanske lite otydlig där "...ett tecken", dvs 1 tecken, ex: A, B eller C.

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

LukaspojkenMedlem sedan maj 20011 312 inlägg
#20

Det var jag som läste lite hastigt bara märkte jag...:)

Vilka fall passar inte en main-funktion? Vad är de 10% som du pratar om Pace?

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

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