Hallo zusammen,
ich habe eine alte asp.net anwendung die baut sich immer nach jedem postback neu auf. dabei werden auch unveränderte elemente komplett neu gezeichnet (z.b. logo und kopfbereich im allgemeinen). das resultiert in einem hässlichen flackern, wenn man sich recht flott durch die anwendung klickt.
gibt es nun eine möglichkeit irgendwie einfach das flackern abzustellen? irgendein schönes html oder asp.net statement, das er jenes und dieses evtl cachen soll und daher ncihtmehr komplett neuzeichnen muss? oder muss ich den harten weg gehen und das meiste per ajax umbauen?
das feature muss nur im internetexplorer 6+ funktionieren (die seite ist schon lange nicht mit anderen browsern kompatibel und muss es auch nciht werden), daher habe ich hier sogar die freiheit internetexplorer-gebundene features zu nutzen.
gruß
Jack
Das Flackern bekommst du leider nicht ohne partielles neuladen per JavaScript (auch AJAX genannt) weg. Da hilft auch keinerlei Caching. Falls das "flackern" einfach nur zu lange dauert, kannst du ja versuchen, die Performance von Seiten des Servers zu erhöhen. Beispiele wären: Ergebnisse von Datenbankabfragen cachen, die Ausgabe von ganzen Seiten cachen (geht sehr einfach mit ASP.NET), expires-Header für Bilder ausgeben...
Eine andere Möglichkeit wären Frames, aber das willst du höchstwahrscheinlich nicht... Ich habe auch ehrlich gesagt keine Erfahrung mit ASP.NET-Anwendungen, die in Framesets laufen.
Was auch noch sehr viel Performance bringt, ist zu überprüfen, ob der Client die Seite bereits im Cache hat. In diesem Fall kannst du den Seitenaufbau auf dem Server sofort abbrechen und einen HTTP 304-Header (not modified) zurückgeben.
Wenn du dich doch für die AJAX-Lösung entscheidest, dann benutze doch einfach die eingebauten UpdatePanels. Bei kleineren Anwendungen dauert es gar nicht mal so lange, alles darauf umzustellen. Wobei natürlich auch immer Probleme dabei auftreten können.
Hallo,
je nachdem was die Seite tut, ist es günstig den Server nur dann anzusprechen wenn es wirklich nötig ist, und den Rest komplett über clientseitiges Javascript zu lösen.
Damit lässt sich oft bereits eine ganze Reihe an Anfragen vermeiden.
Ansonsten hat barzefutz recht: Entweder Flackern oder Ajax 😦
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo,
Also ich hab mal gehört, dass die meiste Zeit im Client(Browser) draufgeht um die Seite zu rendern. Ich will mir auch dazu mal ein Buch kaufen, wenn mein jetziger Stapel abgearbeitet ist:
http://www.amazon.de/High-Performance-Web-Sites-Faster-Loading/dp/0596529309/ref=pd_sim_eb_8
Gruß Timo
je nachdem was die Seite tut, ist es günstig den Server nur dann anzusprechen wenn es wirklich nötig ist, und den Rest komplett über clientseitiges Javascript zu lösen.
Damit lässt sich oft bereits eine ganze Reihe an Anfragen vermeiden.
das ist leider nciht möglich. das sind recht komplexe vorgänge, die serverseitige berechnungen usw. erfordern.
Eine andere Möglichkeit wären Frames, aber das willst du höchstwahrscheinlich nicht...
korrekt 😃
Bei kleineren Anwendungen dauert es gar nicht mal so lange, alles darauf umzustellen.
naja. das ist mein problem. die anwendung ist schon recht groß. so eine umstellung würde eher monate dauern. ich kann da nicht argumentieren "ja das hat nun 20.000 gekostet aber dafür flackert es nciht mehr".
Was auch noch sehr viel Performance bringt, ist zu überprüfen, ob der Client die Seite bereits im Cache hat. In diesem Fall kannst du den Seitenaufbau auf dem Server sofort abbrechen und einen HTTP 304-Header (not modified) zurückgeben.
das wirds nciht sein. immerhin ändert sich ja die seite schon. nur die unveränderten inhalte wie header oder menu .. um die geht es mir.
Entweder Flackern oder Ajax 😦
ok. danke für den hinweis 😃
allgemein: mir gehts nciht um performance. mir geht es nur darum, das gewisse inhalte automatisch auch mit neu gelayoutet werden.
Geht auch ohne Ajax. Den kompletten Inhalt der Seite (von <body> bis </body>) als JavaScript Variable in ein Script-Block schreiben. Im Body.onload schreibst du anschließend mittels document.write den kompletten Variablen-Inhalt in deine Seite.
Eine geeignete Stelle um direkt jede Seite mit einem Schlag umzubauen, ist hier beschrieben:
Requestdauer mit einem HttpModule und Response.Filter ausgeben
Eine andere Möglichkeit (kombination JavaScript und CSS):
<html>
<head>
<style type="text/css">
<!--
body.none {
display: none;
}
-->
</style>
<script type="text/javascript">
<!--
function OnLoad() {
document.body.setAttribute('class', '');
}
-->
</script>
</head>
<body class="none" onload="OnLoad();">
...
</body>
</html>
Hab ich allerdings nicht mit dem IE6 ausprobiert, denke aber sollte funktioniert.
Was auch hilft, im Browser den Cache nicht auszuschalten 😉
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...