Avatar billede Slettet bruger
04. juni 2001 - 22:07 Der er 23 kommentarer og
2 løsninger

Optimeret kode

Hej - jeg har et par spørgsmål:

1. Har det nogen betydning (for afviklingen af ASP - belastning af server osv.) om man enten skriver hele sin side i ASP (altså med response.write osv) eller om man skifter mellem ren HTML og ASP

2. Har det ligeledes betydning for afviklingen om man bruger variabler og angiver det i HTML\'en som <%=Noget%> i stedet for fx \" $ RS(\"noget\") $ \" osv.

Det jeg altså gerne vil vide er - har det nogen betydning for afviklingen af siden - tager det længere tid/belaster det serveren mere på den ene måde end den anden?
Avatar billede keysersoze Ekspert
04. juni 2001 - 22:12 #1
JA! det er hurtigere at afvikle 1 sprog frem for at skifte mellem flere hele tiden... hold dig derfor så vidt muligt kun til asp!

Avatar billede stigc Nybegynder
04. juni 2001 - 22:13 #2
Det er hurtiger at arbejder med variablerne end fra recordsettet. Se evt her:

http://www.programmersresource.com/articles/getrows.asp

Du skal prøve at starte og stoppe ASP koden mindst muligt. Det hurtigste er selfølgelig ren HTML, men i f.eks. et LOOP kan det betale sig at bruge ren ASP:

<tabel><tr>
<%
for i=0 to 10
response.write(\"<td>\" & i & \"</td>\")
next
%>
</tr></table>

er hurtigere end:

<tabel><tr>
<% for i=0 to 10 %>
<td><%=i%> </td>
<% next %>
</tr></table>
Avatar billede Slettet bruger
04. juni 2001 - 22:19 #3
Aha - jeg bruger nemlig ofte dreamweaver til at strukturere siden (lave tables osv.) i stedet for at skulle kode den kedelige kode. Og så sætter jeg så efterfølgende ASP\'en ind hvor det er nødvendigt i HTML\'en. Er det en dum ide? Er der meget at spare ved at skrive alt i ASP (altså igen med response.write) - og hvor stor en forskel snakker vi?

Er det noget der har væsentligt betydning fx hvis sitet får mange besøgende eller hvad?
Avatar billede keysersoze Ekspert
04. juni 2001 - 22:26 #4
stigc >> men skal det være perfekt skal \"<tabel><tr>\" samt \"</tr></table>\" også være mellem <% %>...

;o)


Avatar billede keysersoze Ekspert
04. juni 2001 - 22:28 #5
det er ikke decideret måleligt - altså at sige at noget er x sek hurtigere end det andet... men koden her på eksperten kunne fx godt trænge til en gang oprydning og her vil det have meget at sige pga de mange besøgende...
Avatar billede stigc Nybegynder
04. juni 2001 - 22:31 #6
keysersoze>> Nej ikke hvis alt før er HTML og alt efter HTML :) Altså er det er taget ud af en større sammenhæng, hvor af det er det eneste ASP.
Avatar billede mwittrock Nybegynder
04. juni 2001 - 22:33 #7
Denne side indeholder nogle gode tips til optimering af ASP sider, endda direkte fra Microsoft selv:

http://msdn.microsoft.com/workshop/server/asp/ASPtips.asp
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 22:35 #8
ud over det link, der er anført, har I så noget som helst dokumentation for
jeres påstande, eller er det bare sådan noget i tror? Ikke fordi jeg ved det, men
I kan bare ikke gætte, vel?
Avatar billede stigc Nybegynder
04. juni 2001 - 22:50 #9
Jeg har læst det flere steder på Internettet. Kunne desværre ikke finde et eksemple, men har lavet et hvor der vises tydelig forskel. Det er ca. 3 gange hurtigere.

Ændre selv if sætning for at køre det andet eksemple.

<html>

<script language=\"JScript\" runat=\"Server\">
timerBegin = new Date();
function myTimer() {
    tmpTime = new Date();
    Response.Write(tmpTime.getTime() - timerBegin.getTime())
}
</script>

<%

if (false)then
for i=0 to 1000
response.write(i & \",\" & i & \",\" & i )
next
else
for i=0 to 1000
%> <%=i%>,<%=i%>,<%=i%><%
next
end if




Response.Write \"<p>Det tog <b>\"
Call myTimer()
Response.Write \" ms.</b> at afvikle dette script.</p>\"

%>
Avatar billede stigc Nybegynder
04. juni 2001 - 22:52 #10
Det skyldes at \"i\" skrives 3 gange til skærmen, mens der i det rene ASP laves en samlet streng, der skrives 1 gang til skærmen!
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 23:00 #11
Ja, men med mine målinger tager dette kun ca. 10 % mere. Så hvad er det egentlig vi måler? Er det \"hoppe ud og ind af ASP\", eller er det strengkonkatenering, eller er
det antal kald til response.write? Eller hvad? Svaret er ikke helt så klart....:)

if (false)then
for i=0 to 1000
response.write(i & \",\" & i & \",\" & i )
next
else
for i=0 to 1000
s=\"\"
%><% s=s&i%><% s=s&\".\"&i%><% s=s&\".\"&i%><%
response.write(s)
next
end if
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 23:03 #12
og endelig med <% response.buffer=true %> tager begge dine versioner, stigc, ca.
det samme og 3-9 gange hurtigere end uden... Som Microsoft jo i øvrigt anbefaler :)
Avatar billede stigc Nybegynder
04. juni 2001 - 23:04 #13
nej, det er jeg med på. Det man mister på er vel udskrivningen til skærmen, så her bør man konkanere først, hvis muligt.
Avatar billede stigc Nybegynder
04. juni 2001 - 23:05 #14
mine tider er ved true:

Det tog 2640 ms. at afvikle dette script.

og ved false:

Det tog 7580 ms. at afvikle dette script.
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 23:07 #15
Så vidt jeg lige så, havde Microsoft ingen anbefaling mht at \"gå ind og ud af ASP\",
men mange andre anbefalinger. Det betyder næppe ret meget hvor mange <%...%>-ere
der er, i forhold til alt det andet man kan optimere på.
Avatar billede stigc Nybegynder
04. juni 2001 - 23:08 #16
response.buffer=true får det da til at kører hurtigere.....
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 23:08 #17
Nå ja, mine tider: din langsomme, ca. 200ms, din hurtige ca. 70 ms. Min hurtige ca.
80 ms. Og med buffer på alle versioner 30-40 ms.
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 23:09 #18
Nå ja, de 80 ms passer til denne:

s=\"\"
%><% s=s&i%><% s=s&\".\"&i%><% s=s&\".\"&i%><%
response.write(s)
Avatar billede stigc Nybegynder
04. juni 2001 - 23:17 #19
er det optimalt for en server at køre med response.buffer=true? Den får hurtigere lavet siden færdig og smidt i en buffer. Men det bruger vel også den tilsvarende midre energi ved buffer slået fra... Er der nogen der ved om det kan betale sig?
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 23:21 #20
Den skal umiddelbart bruge mere RAM, men i kortere tid, inden den kan smide det
væk igen. For almindeligt størrelser af sider mener jeg det klart kan betale sig,
men for de store sider, der f.eks. af og til findes her på eksperten.dk kan man godt
forestille sig RAM-forbruget blive for stort... Men ved man det, kan man vel sige
flush (eller hvad det nu hedder i ASP) en gang i mellem.

Det er lidt interessant, det her, men jeg kender desværre ikke det \"gyldne svar\" :)
Avatar billede mwittrock Nybegynder
04. juni 2001 - 23:21 #21
Sagen med Response.Buffer = False er, at du risikerer, at siden bliver sendt tilbage til klienten i små bidder, og det er ikke effektivt.
Avatar billede mwittrock Nybegynder
04. juni 2001 - 23:24 #22
Iøvrigt bør I alle tænke over følgende citat fra den legendariske computervidenskabsmand Donald Knuth:

\"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.\"

Kloge ord.
Avatar billede stigc Nybegynder
04. juni 2001 - 23:37 #23
Avatar billede erikjacobsen Ekspert
04. juni 2001 - 23:52 #24
Det lyder som den rigtige version af alt det med buffer og flush :)
Avatar billede keysersoze Ekspert
26. juni 2001 - 11:29 #25
har du fået svar på dine spm.?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester