/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Optimering af ASP-kode
Fra : Kristian Bjørklund


Dato : 25-08-01 13:50

Er der nogen, der har erfaringer med, hvor meget det egentligt belaster en
server at skifte fra html til asp-kode (altså med <% %> tag'ene) ?

....dvs. hvad performance forskellen er på to nedenstående eks.:

Eks. 1:

1: <% If <udtryk> Then
2: response.write "blabla"
3: End if %>


Eks. 2

1: <% If <udtryk> Then %>
2: blabla
3: <%End if %>


Det er jo formentligt et spørgmål om, at selve linie 2 i eks. 1 belaster
mere end den rene html (linie 2 i eks. 2), men at det mere end opvejes af
den ekstra belastning ud- og indgang af ASP-kode udgør.

Spørgsmålet er altså, hvor meget html skal der være, før det kan betale sig
at gå ud af ASP og ind i HTML...


Forstår I mig?


Kristian Bjørklund



 
 
Anders Holbøll (25-08-2001)
Kommentar
Fra : Anders Holbøll


Dato : 25-08-01 14:00

"Kristian Bjørklund" wrote:
>
> Spørgsmålet er altså, hvor meget html skal der være, før det kan
> betale sig at gå ud af ASP og ind i HTML...

Jeg har ikke lavet nogen tests. Men Microsoft fraråder selv, at man
hopper ind og ud af asp mode, f.eks. her:
http://support.microsoft.com/support/kb/articles/Q193/8/31.ASP

--
Anders

Jesper Stocholm (25-08-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 25-08-01 15:22

Anders Holbøll wrote in news:3B87A143.1E47B36C@serveren.dk:

> "Kristian Bjørklund" wrote:
>>
>> Spørgsmålet er altså, hvor meget html skal der være, før det kan
>> betale sig at gå ud af ASP og ind i HTML...
>
> Jeg har ikke lavet nogen tests. Men Microsoft fraråder selv, at man
> hopper ind og ud af asp mode, f.eks. her:
> http://support.microsoft.com/support/kb/articles/Q193/8/31.ASP
>

der står i denne artikel bla.:

.... To resolve this problem, obtain the latest service pack for Windows NT
4.0 or Windows NT Server 4.0, Terminal Server Edition. For additional
information, please see the following article in the Microsoft Knowledge
Base ...

.... med andre ord kan man forvente, at ydeevnen er bedre i IIS5 ?

--
Jesper Stocholm
http://stocholm.dk
ICQ: 13214885
MSN Messenger: jesperstocholm at hotmail dot com

Anders Holbøll (25-08-2001)
Kommentar
Fra : Anders Holbøll


Dato : 25-08-01 15:46

Jesper Stocholm wrote:
>
> Anders Holbøll wrote in news:3B87A143.1E47B36C@serveren.dk:
>
> > "Kristian Bjørklund" wrote:
> >>
> >> Spørgsmålet er altså, hvor meget html skal der være, før det
> >> kan betale sig at gå ud af ASP og ind i HTML...
> >
> > Jeg har ikke lavet nogen tests. Men Microsoft fraråder selv,
> > at man hopper ind og ud af asp mode, f.eks. her:
> > http://support.microsoft.com/support/kb/articles/Q193/8/31.ASP
>
> der står i denne artikel bla.:
> [Rettet i seneste service pack til NT 4]

Hvad så med denne her:
http://msdn.microsoft.com/library/en-us/dnasp/html/asptips.asp

Måske var det på tide at få lavet en test?

(Jeg imho bliver det også noget uoverskugelig kode hvis man hopper ind
og ud hele tiden (<= det var da et ganske vagt agument

--
Anders

Anders Holbøll (26-08-2001)
Kommentar
Fra : Anders Holbøll


Dato : 26-08-01 16:15

Anders Holbøll wrote:
>
> Måske var det på tide at få lavet en test?

Ja, Anders, det kunne godt være man skulle det. Jeg har nu fået lavet en
lille test. Testen er kørt mod en win2k pro med buffering og sessions
slået til. Strestesteren var en anden maskine på netværket. Webserverens
ene cpu kørete 100% under testene (i virkeligheden 50% på hver af
cpu'erne). Der blev kun simuleret en enkelt klient (et hit af gangen),
uden ventetid i mellem hits og hver test kørte i 1 minut.

t1.asp - Et enkelt tegn, altså ingen "asp-tags". Bruges som "baseline"
og tester hvor hurtigt et asp-script maksimalt kan være.
t1b.asp - 1000 tegn. Tester hvor hurtigt 1000 bytes kan sendes igennem
api, netværk...
t2.asp - En enkelt response.write, som udskriver et tegn. Baseline for
scripts med asp-blokke.
t2b.asp - 1000 Response.Write kald med et tegn i hver. Tester køretiden
på Response.Write-funktionen.
t2c.asp - 1000 script-blokke med een response.write i hver, der hver
udskriver et tegn. Tester belastningen ved at hoppe ind og ud af script
blokke.
t3.asp - En enkelt Response.Write, som udskriver 1000 tegn. Baseline for
skrivning af 1000 tegn fra et asp-script
t4.asp - En enkelt Response.Write, der udskriver 1000 tegn, men skrevet
som en sammensætning med 1 tegn på hver linie (dvs. Response.Write "1" &
_ | "2" & _ | ... (hvor "|" symbolisere linieskift))
t5.asp - 500 script-blokke med een response.write i hver, der hver
udskriver et tegn, alle efterfulgt af et enkelt tegn. Tester om
scriptblokke, der ikke er adskilt af "almindelig tekst" (se t2c.asp),
bliver behandlet anderledes end script-blokke, der er adskilt af
almindelig tekst.

Page Hits TTFB Avg TTLB Avg
----------- --------- --------- --------
/t1.asp 14209 2.43 2.46
/t1b.asp 13533 2.39 2.40
/t2.asp 11644 3.37 3.40
/t2b.asp 8843 4.47 4.76
/t2c.asp 8953 4.37 4.63
/t3.asp 10843 3.33 3.34
/t4.asp 3734 13.89 14.01
/t5.asp 9155 4.41 4.44
TTFB - Time To First Byte
TTLB - Time To Last Byte

Ud fra dette konkluderer jeg:
- Det er ikke et specielt stort problem (rent performance mæssigt) at
hoppe ind og ud af script-blokke (2b, 2c, 5)
- Programørene der har lavet vb-script compileren har røget sig skæve
inden de skrev den, da concatingeringen (der åbentlyst kun består af
konstanter) ikke er optimeret væk. (4)
- Det er hurtigere at skrive "almindelig tekst" end at benytte
Response.Write. Programmørene har muligvis også været fulde.

--
Anders

Allan Ebdrup (27-08-2001)
Kommentar
Fra : Allan Ebdrup


Dato : 27-08-01 11:40

Hej Anders
Jeg har lidt kommentare nedenunder. Godt at se en pragmatiker der tester
tingene og ikke bare sidder og filosoferer over hvor god
performance/scalability en løsning giver.

"Anders Holbøll" <dev-null-20010820@serveren.dk> skrev i en meddelelse
news:3B89126B.1A7BF511@serveren.dk...
> Anders Holbøll wrote:
[Klip]
> Der blev kun simuleret en enkelt klient (et hit af gangen),
> uden ventetid i mellem hits og hver test kørte i 1 minut.
[Klip]

Det er ikke et særligt realistisk brugsscenarie, een bruger der henter samme
side tusindvis af gange på kort tid ? Hvorfor ikke flere brugere ?

[Klip]
> Ud fra dette konkluderer jeg:
> - Det er ikke et specielt stort problem (rent performance mæssigt) at
> hoppe ind og ud af script-blokke (2b, 2c, 5)

Korrekt, det er også hvad MS skriver, de fraråder at gøre det i en for
løkke, dvs. rigtigt mange gange. Derudover nævnes det at problemet er værst
når response.buffer ikke bliver brugt, og det gør de fleste vel?
(<http://msdn.microsoft.com/library/en-us/dnasp/html/asptips.asp> - Tip 15:
Batch Inline Script and Response.Write Statements)

> - Programørene der har lavet vb-script compileren har røget sig skæve
> inden de skrev den, da concatingeringen (der åbentlyst kun består af
> konstanter) ikke er optimeret væk. (4)

VBScript bliver ikke compileret i ordets gængse betydning men bliver
fortolket af et fortolker program, derfor er det ret begrænset hvor meget
optimeringsanalyse det kan betale sig at foretage på koden da det skal
fortolkes real-time.

Teksten hos MS her:
<http://support.microsoft.com/support/kb/articles/Q193/8/31.ASP>
Kan nemt opfattes misvisende. Ordet "compile" betyder "at samle sammen", og
det der bliver "samlet sammen" i ovenstående artikel, er HTML'en der skal
outputtes til brugeren - ikke verdens heldigste ordvalg fra MS side.

> - Det er hurtigere at skrive "almindelig tekst" end at benytte
> Response.Write. Programmørene har muligvis også været fulde.

Hvorfor det? Response.Write er et fortolket funktionskald der skal pakke
variable ned som argumenter, hoppe til et et andet variabel scope køre noget
kode og hoppe tilbage igen. Rå HTML udenfor script blokkene skal bare
kopieres til bufferen.

MVH
Allan Ebdrup, 10-4 ApS
www.ti-fire.dk



Anders Holbøll (27-08-2001)
Kommentar
Fra : Anders Holbøll


Dato : 27-08-01 12:14

Allan Ebdrup wrote:
> Anders Holbøll skrev:
> > Der blev kun simuleret en enkelt klient (et hit af gangen),
> > uden ventetid i mellem hits og hver test kørte i 1 minut.
>
> Det er ikke et særligt realistisk brugsscenarie, een bruger der
> henter samme side tusindvis af gange på kort tid ? Hvorfor ikke
> flere brugere ?

Jeg vurderede, at det var mindre væsenligt i denne test, hvor mit mål
var at måle den "rå performance" af funktions kald, parser compiler.
Desuden var prosessoren som angivet, allerede max'et ud med en klient.

> > Ud fra dette konkluderer jeg:
> > - Det er ikke et specielt stort problem (rent performance
> > mæssigt) at hoppe ind og ud af script-blokke (2b, 2c, 5)
>
> Korrekt, det er også hvad MS skriver, de fraråder at gøre det i
> en for løkke, dvs. rigtigt mange gange. Derudover nævnes det at
> problemet er værst når response.buffer ikke bliver brugt, og det
> gør de fleste vel?
> (<http://msdn.microsoft.com/library/en-us/dnasp/html/asptips.asp>
> - Tip 15: Batch Inline Script and Response.Write Statements)

Bemærk, at der står "Det er *ikke* et specielt stort problem". Dette er
modsat hvad microsoft skriver, på den side (som jeg også før har henvist
til).

> > - Programørene der har lavet vb-script compileren har røget sig
> > skæve inden de skrev den, da concatingeringen (der åbentlyst kun
> > består af konstanter) ikke er optimeret væk. (4)

Dette er naturligvis ikke blot bygget på test 4, men på en sammenligning
af test 3 og 4.

> VBScript bliver ikke compileret i ordets gængse betydning men
> bliver fortolket af et fortolker program, derfor er det ret
> begrænset hvor meget optimeringsanalyse det kan betale sig at
> foretage på koden da det skal fortolkes real-time.

Jeg har før hørt fra microsoft, at asp blev compilet først gang scriptet
blev kørt og derefter blot eksekveret. At dette muligvis ikke er
tilfældet syntes jeg er ganske uforsvareligt.

> Teksten hos MS her:
> <http://support.microsoft.com/support/kb/articles/Q193/8/31.ASP>
> Kan nemt opfattes misvisende. Ordet "compile" betyder "at samle
> sammen", og det der bliver "samlet sammen" i ovenstående artikel,
> er HTML'en der skal outputtes til brugeren - ikke verdens
> heldigste ordvalg fra MS side.

Der er jo en hårfin grændse imellem fortolkning og kompilering,
teknikkerne er jo langt hen af vejen ens. (Det link har jeg også henvist
til før i denne tråd og som Jesper påpegede så omhandler den en fejl i
IIS4, der blev rettet af SP4 (dvs. for lang tid siden))

> > - Det er hurtigere at skrive "almindelig tekst" end at benytte
> > Response.Write. Programmørene har muligvis også været fulde.

Dette er bygget på en sammenligning af test 1b og 3.

> Hvorfor det? Response.Write er et fortolket funktionskald der
> skal pakke variable ned som argumenter, hoppe til et et andet
> variabel scope køre noget kode og hoppe tilbage igen. Rå HTML
> udenfor script blokkene skal bare kopieres til bufferen.

Response.Write er et så alimindeligt/ofte brugt/basalt funktionskald, at
det burde være optimeret (f.eks. ved "inlining").

--
Anders

Allan Ebdrup (27-08-2001)
Kommentar
Fra : Allan Ebdrup


Dato : 27-08-01 18:20

Hej Anders
Først vil jeg sige at jeg har taget fat i netop de artikler i andre i
diskussionen henviser til for at illustrere hvad jeg mener, og for at nye
tilkommere også kan følge med.

"Anders Holbøll" <dev-null-20010820@serveren.dk> skrev i en meddelelse
news:3B8A2B69.1853337E@serveren.dk...
> Allan Ebdrup wrote:
> > Anders Holbøll skrev:
> > > Der blev kun simuleret en enkelt klient (et hit af gangen),
> > > uden ventetid i mellem hits og hver test kørte i 1 minut.
> >
> > Det er ikke et særligt realistisk brugsscenarie, een bruger der
> > henter samme side tusindvis af gange på kort tid ? Hvorfor ikke
> > flere brugere ?
>
> Jeg vurderede, at det var mindre væsenligt i denne test, hvor mit mål
> var at måle den "rå performance" af funktions kald, parser compiler.
> Desuden var prosessoren som angivet, allerede max'et ud med en klient.

Ja, men hvem er interreseret i performance på en webserver, det er altid
scalability der er vigtigst, og da de i dine tests sikkert går hånd i hånd
ville du sikkert finde det samme resultat i dine tests. Man kan dog blive
overrasket over hvad der sker med performance når der kører mange ting
parallelt, og det interesandte er vel performance ved mange samtidige
brugere (ja det er lidt flueknepper agtigt, men jeg synes det er vigtigt

> > > Ud fra dette konkluderer jeg:
> > > - Det er ikke et specielt stort problem (rent performance
> > > mæssigt) at hoppe ind og ud af script-blokke (2b, 2c, 5)
> >
> > Korrekt, det er også hvad MS skriver, de fraråder at gøre det i
> > en for løkke, dvs. rigtigt mange gange. Derudover nævnes det at
> > problemet er værst når response.buffer ikke bliver brugt, og det
> > gør de fleste vel?
> > (<http://msdn.microsoft.com/library/en-us/dnasp/html/asptips.asp>
> > - Tip 15: Batch Inline Script and Response.Write Statements)
>
> Bemærk, at der står "Det er *ikke* et specielt stort problem". Dette er
> modsat hvad microsoft skriver, på den side (som jeg også før har henvist
> til).

Det er nu ikke sådan jeg læser hvad MS skriver, som sagt er deres anbefaling
hovedsageligt for når response.buffer ikke er slået til (Hvilket de
anbefaler at gøre i tip Tip 14: Use Response Buffering, lige ovenover) og så
er det endda kun når man har loops de anbefaler at slå udskrift samme til et
response.write kald. Hvis de kun anbefaler denne optimering i så specielle
tilfælde læser jeg det somom det ikke er et problem for de fleste tilfælde.

> > > - Programørene der har lavet vb-script compileren har røget sig
> > > skæve inden de skrev den, da concatingeringen (der åbentlyst kun
> > > består af konstanter) ikke er optimeret væk. (4)
>
> Dette er naturligvis ikke blot bygget på test 4, men på en sammenligning
> af test 3 og 4.
>
> > VBScript bliver ikke compileret i ordets gængse betydning men
> > bliver fortolket af et fortolker program, derfor er det ret
> > begrænset hvor meget optimeringsanalyse det kan betale sig at
> > foretage på koden da det skal fortolkes real-time.
>
> Jeg har før hørt fra microsoft, at asp blev compilet først gang scriptet
> blev kørt og derefter blot eksekveret. At dette muligvis ikke er
> tilfældet syntes jeg er ganske uforsvareligt.

Igen, kompilet betyder bare at de henter alle include filerne samme til et
stort script og ligger det i buffer, der foregår ingen kompliering til
maskinkode eller lignende. Uforsvarligt er nok et stærkt ord at bruge, men
det er rigtigt at det kunne gøres meget bedre, det er bla. også derfor der
er så meget bedre performance med IIS 5, MS har gjort en del for at optimere
script fortolkeren. MS har dog i meget lang tid anbefalet at hvis du vil
have god scalability skal du anvende kompilerede COM/COM+ komponenter til
din forretningslogik.
Med .Net kompileres til bytecode som eksevekveres af et runtime, så kan der
optimeres meget mere, fejl kan fanges tidligere med et typestærkt sprog så
man slipper for en masse checks ved runtime, ligesom Java.

> > Teksten hos MS her:
> > <http://support.microsoft.com/support/kb/articles/Q193/8/31.ASP>
> > Kan nemt opfattes misvisende. Ordet "compile" betyder "at samle
> > sammen", og det der bliver "samlet sammen" i ovenstående artikel,
> > er HTML'en der skal outputtes til brugeren - ikke verdens
> > heldigste ordvalg fra MS side.
>
> Der er jo en hårfin grændse imellem fortolkning og kompilering,
> teknikkerne er jo langt hen af vejen ens. (Det link har jeg også henvist
> til før i denne tråd og som Jesper påpegede så omhandler den en fejl i
> IIS4, der blev rettet af SP4 (dvs. for lang tid siden))

Det kommer meget an på hvad du mener med "ens", konceptuelt benyttes en del
fælles teknikker, men i praksis er der meget stor forskel mellem kompileret
kode og fortolket kode. At kalde grænsen mellem de to "hårfin" er nok en
overdrivelse.

> > > - Det er hurtigere at skrive "almindelig tekst" end at benytte
> > > Response.Write. Programmørene har muligvis også været fulde.
>
> Dette er bygget på en sammenligning af test 1b og 3.
>
> > Hvorfor det? Response.Write er et fortolket funktionskald der
> > skal pakke variable ned som argumenter, hoppe til et et andet
> > variabel scope køre noget kode og hoppe tilbage igen. Rå HTML
> > udenfor script blokkene skal bare kopieres til bufferen.
>
> Response.Write er et så alimindeligt/ofte brugt/basalt funktionskald, at
> det burde være optimeret (f.eks. ved "inlining").

Ja, men du skal stadig tage højde for at Response.Write kan have et input
der skal "evalueres" før det kan skrives, det er fortolket, mens rå HTML
udenfor script blokkene bare skal kopieres til bufferen, jeg kan ikke se
hvordan du nogensinde skulle kunne lave en Response.Write der er lige så
hurtig som rå HTML. Mht. at Response.Write i specialtilfælde kan skrive
"konstant" tekst ud så skyldes mangel på optimering i disse tilfælde igen at
VBScript er fortolket, det kan simpelthen ikke betale sig at analysere koden
for alle mulige optimeringer i et fortolket sprog.

MVH
Allan Ebdrup



Anders Holbøll (15-09-2001)
Kommentar
Fra : Anders Holbøll


Dato : 15-09-01 22:33

Anders Holbøll wrote:
>
> Anders Holbøll wrote:
> >
> > Måske var det på tide at få lavet en test?
>
> Ja, Anders, det kunne godt være man skulle det.

Hvis der var nogen, der fandt testen informativ, kan jeg fortælle at jeg
har gentaget den. Men denne gang blev der simuleret 5 samtidige brugere
og der var indsat en pause på 1/10 sekund efter hvert hit for, at
webserveren cpu ikke skulle køre 100% (Under testene kørte cpu'en under
50%). Der er lagt SP5 og nyeste hot-fixes på NT4 maskinen og SP2 på
windows 2000 pro maskinen.

Der var tilføjet to nye tests:
t6.asp - 1000 kald af response.write med et tegn i hver, men med brug af
With, altså: Width Response | .Write "1" | .Write "2" | ... | End With
t7.asp - 1 kald af Response.Write med 1000 tegn sat sammen via join og
array, altså: Response.Write Join(Array(_ | "1", _ | "2", _ | ... | ),
"")
("|" symbolisere linieskift)

Windows NT 4 (uden buffering)

Page Hits TTFB Avg TTLB Avg
------------- --------- --------- ---------
/t1 280 0.89 1.83
/t1b 280 0.65 1.58
/t2 280 1.52 2.43
/t2b 283 2.36 21.20
/t2c 284 1.08 20.31
/t3 284 0.42 1.25
/t4 282 9.06 10.83
/t5 280 1.15 18.85
/t6 - - -
/t7 280 1.55 2.59

Windows NT 4 (med buffering)

Page Hits TTFB Avg TTLB Avg
------------- --------- --------- ---------
/t1 295 0.06 0.06
/t1b 295 0.92 1.01
/t2 295 0.02 0.02
/t2b 295 7.22 7.22
/t2c 295 7.07 7.08
/t3 295 1.04 1.04
/t4 300 9.97 10.29
/t5 300 6.00 6.00
/t6 - - -
/t7 298 2.01 2.01

Windows 2000

Page Hits TTFB Avg TTLB Avg
------------- --------- --------- ---------
/t1 295 2.56 2.57
/t1b 295 2.71 2.76
/t2 295 3.45 3.51
/t2b 291 4.75 4.82
/t2c 290 4.74 4.81
/t3 290 3.58 3.61
/t4 291 13.37 13.48
/t5 295 4.73 4.82
/t6 295 16.03 16.20
/t7 295 6.81 7.08

Bemærk, at testene er udført på to forskellige maskiner og der derfor
ikke giver mening at sammenligne tal mellem de to operativsystemer.
Testene blev blev udført i en omgang hvor der blev alterneret imellem de
forskellige scripts, derfor giver det heller ikke mening at sammenligne
antallet af hits (ikke til andet end måske at se, at den ene maskine er
hurtigere end den anden). Istedet bør ses på TTLB.

Det ses at:
- Konklusionerne er de samme
- With er ganske langsom
- Join er ganske hurtig
- NT4 og windows2000 er hurtige/langsomme til de samme ting.

--
Anders

Claus O (26-08-2001)
Kommentar
Fra : Claus O


Dato : 26-08-01 12:47

"Jesper Stocholm" <spam@stocholm.dk> wrote

> ... med andre ord kan man forvente, at ydeevnen er bedre i IIS5 ?

"Hopperiet" er ihverttilfælde negativt omtalt af Wrox vedr. ASP 3.0
og vist ikke muligt i asp.NET.
Claus




Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408857
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste