Avatar billede kaptajnknas Nybegynder
14. december 2006 - 15:42 Der er 11 kommentarer

Response.buffer = true

Forklaring på "response.buffer true / false / flush" osv.

Hvor skal bruges hvad og hvorfor?
Avatar billede softspot Forsker
14. december 2006 - 15:51 #1
Buffering benyttes som en forbrænder til (område til opsamling af data om du vil) at sende det indhold som du genererer på serveren (med Response.Write). Dette muliggør bla. at du kan sætte Response-headers (som f.eks. Content-Type) efter du er begyndt at skrive data med Response.Write - noget som ellers ikke ville være muligt uden buffering slået til.

Response.Buffer = true

slår buffering til og dette er i øvrigt standardindstillingen for ASP 3.0.

Når du kalder Response.Flush sender du data som ligger i bufferen til klienten og du kan herefter ikke længere ændre Response-headers (da data jo nu blevet sendt og dermed de headers der kunne sættes).
Avatar billede fennec Nybegynder
14. december 2006 - 16:06 #2
Et par eks, så du kan se forskellen:
Siden bliver først vist når alt er færdig, da bufferen først bliver udskrevet her:
<%
response.buffer = true
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Untitled</title></head>
<body>
<%
for f=1 to 10000000
    if f mod 100000 = 0 then
        response.write "hejsa<br>"
    end if
next
%>
</body>
</html>

Siden bliver løbende opdateret med nye data, da de ikke bliver gemt i bufferen:
<%
response.buffer = false
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Untitled</title></head>
<body>
<%
for f=1 to 10000000
    if f mod 100000 = 0 then
        response.write "hejsa<br>"
    end if
next
%>
</body>
</html>

Siden bliver løbende opdateret med nye data. Bufferen bliver tømt manuelt via flush:
<%
response.buffer = true
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Untitled</title></head>
<body>
<%
for f=1 to 10000000
    if f mod 100000 = 0 then
        response.write "hejsa<br>"
        response.flush
    end if
next
%>
</body>
</html>
Avatar billede fennec Nybegynder
14. december 2006 - 16:09 #3
Det kan f.eks bruges til at lave en "Loader..." besked på tunge sider:

<%
response.buffer = true
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Untitled</title></head>
<body>
<div id="divMsg">Vent mens siden loader...</div>
<%
response.flush
for f=1 to 10000000
    if f mod 100000 = 0 then
        response.write "hejsa<br>"
    end if
next
%>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
document.getElementById("divMsg").style.display = "none"
//-->
</SCRIPT>
</body>
</html>
Avatar billede kaptajnknas Nybegynder
14. december 2006 - 16:12 #4
Okay takker for svarene.
Mente også det var noget i den retning, synes bare ikke det virker helt efter hensigten så.
Da jeg har anvendt response.buffer = true i et asp dokument og alligevel udskriver siden åbenbart ikke af en gang, ses da jeg havde anbragt font-style i slutningen af dokumentet, ændrede teksttypen af og til.

Så virker response.buffer vel ikke som den burde?
Avatar billede Slettet bruger
14. december 2006 - 16:19 #5
Med response.buffer kan man så lave at den venter 5 sekunder hvis man trykker på en knap, imens den skriver "Vent mens nyheden oprettes"
Avatar billede fennec Nybegynder
14. december 2006 - 16:22 #6
Det kunne se sådan ud. Jeg kan dog ikke udtale mig endelig uden at se koden.

Desuden kan du ikke placere et <style> tag sidst på siden, og samtidig overholde w3 standarden. Den skal placeres i <head> delen.
Avatar billede kaptajnknas Nybegynder
14. december 2006 - 16:46 #7
Ok. har nu flyttet mit style og det har også hjulpet.
Det er ikke noget med at response.buffer skal skrives med stort Response.Buffer ?
Avatar billede softspot Forsker
14. december 2006 - 17:30 #8
Kun hvis du benytter JScript. I VBScript er det ligemeget...
Avatar billede kimlarsen1978 Nybegynder
24. december 2007 - 11:08 #9
Hejsa
Jeg har også lidt problemer i den stil her.

Jeg bruger ikke response.buffer nogle steder i min kode, men alligevel viser den først siden når det hele er klar til at blive vist. Kan det være fordi jeg har bygget siden op i en stor tabel, som så indeholder en masse andre tabeller?

Ville det være bedre at bygge den op i nogle div's eller nogle flere tabeller?
Avatar billede softspot Forsker
25. december 2007 - 14:25 #10
Response.Buffer er som udgangspunkt sat til true i ASP 3.0, så der behøver ikke være noget synligt kode som sætter dette.

Det har helt klart en betydning om du har det hele liggende i én tabel eller om du har delt tingene op. En tabel kan først renderes i browseren når den bliver lukket med </table>. Dette kan f.eks. forsinkes af at en server involveret i levering af data til opbygningen af siden (f.eks. scripts), er langsom til at levere disse.

Du kan prøve at holde øje med progressbaren i bunden af browseren, for at se om browseren venter på svar fra serveren hele tiden, eller om den melder klar (så må man forvente at det er browseren på klienten der forsøger at rendere siden).

Hvad der er bedst afhænger i høj grad af, hvad du selv formår. Det giver jo ikke nogen mening at kaste sig ud i CSS-layouts, hvis du ikke magter at løse de udfordringer du så skal tage op i den forbindelse. Hvis du vil bruge tables, så vil jeg da anbefale at du ikke lægger elementer ind i dine tabelceller, som kan risikere at tage meget lang tid at "gøre færdige" i forbindelse med redering af siden (f.eks. pagecounters eller scripts til statistikservere - disse kan til tider være overbelastede og dermed sinke din side).
Avatar billede kimlarsen1978 Nybegynder
25. december 2007 - 18:51 #11
Hej igen
Jeg har faktisk brugt dagen i dag på at kigge lidt på min "grundopbygning", og det har hjulpet vildt meget, at jeg har skiftet min hovedtabel ud med en DIV, lige som det har hjulpet at få mange af de store tabeller skiftet ud med div's :-)

Jeg har fortsat en række mindre tabeller på mange af mine sider, men det er knap så kritisk, som at have det omsluttet af en stor tabel.
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