Rendering komplette Seite und nicht „progressiv“ (mit Streben 2 / Fliesen)

StackOverflow https://stackoverflow.com/questions/438954

  •  22-07-2019
  •  | 
  •  

Frage

Gibt es eine Möglichkeit Streben zu erhalten 2 (mit Fliesen) die ganze Seite zu bauen, bevor sie an den Browser zu senden? Ich will nicht die Seite „progressiv“ im Browser eines Teil zu einer Zeit, bauen.

Das Hauptproblem ich zu lösen bin versucht, die Internet Explorer 7 blinkt / blinkt die Seite selbst wenn einige der Inhalt ändert sich nur (firefox tut dies viel mehr reibungslos).

Also, wenn ich eine Seite mit:

HEADER

einige Inhalte

Footer

Und die „einige Inhalte“ Bereich ändert sich nur zwischen Seite geladen wird, blinkt die Fußzeilenteils noch den weißen Hintergrund, bevor es mit der Hintergrundfarbe der Fußzeile füllen. Ich tought, dass vielleicht durch Streben immer die komplette Seite senden würde es schnell genug lädt die „Blinken“ zu beseitigen. Nun ist die FOOTER vom Server ein wenig später als die Teile, bevor er kommt und so blinkt sie (in Internet Explorer, Firefox zeigt die Seite glatt).

Hinweis: Dies ist eine wichtige Voraussetzung für die Website und Ajax der mittlere Gehalt aus zu laden (wie Rahmen oder andere „Hacks“ sind). Der Standort gebaut wird mit Hilfe von CSS und kein Tabellenlayout, vielleicht werde ich ein Tabellenlayout verwenden müssen, um es Arbeit zu bekommen ...

Über Fliesen bündig Parameter verwendet: Ich habe versucht, dass es nicht funktioniert, wie ich brauche. Ich würde für die gesamte Seite einen Flush-Parameter benötigen. Ich habe die normale jsp Seite Direktive „Autoflushing = false“ versucht, aber es hat nicht funktioniert. Ich habe diese Anweisung auf meiner Haupt-Template-Seite (und nicht in den Fliesen).

Hier ist ein Beispiel aus der Hauptvorlage, die Header, Body und Footer-Vorlagen verwendet. Mit dem Thread.sleep () habe ich das Problem leicht zu erkennen. Die Fußzeile macht 2 Sekunden später als der Rest der Seite.

  <body>
  <div id="container">
  <t:insertAttribute name="header" flush="false" />

  <div id="content"><t:insertAttribute name="body" flush="false"/></div>

  <div class="clear"></div>
  <% Thread.sleep(2000); %>
  <t:insertAttribute name="footer" flush="false" />
  </div>
  </body>

UPDATE

Danke für die Kommentare. Die Anforderung ist eigentlich fast vernünftig, da dies nicht eine normale Web-Seite ist, denkt eingebettet ist.

Aber anscheinend gibt es keine Möglichkeit, IE zu konfigurieren, nach einiger Verzögerung zu starten Rendering (wie Firefox eine konfigurierbare Verzögerung von einigen 100 ms hat)?

Ich habe versucht, die TilesResult abzufangen, aber die Methode doExecute vor dem gesamten Inhalt ausgeführt wird, wird offenbar ausgewertet, so dass das Verfahren bereits vor der jsp ausgewertet verlassen hat (meine Thread.sleep () Test). Ich habe mich gefragt, wie ich die ganze Antwort auf eine Zeichenfolge machen könnte und dann ausgegeben, die alle auf einmal an den Browser.

Ich weiß, dass dies nicht narrensicher ist und Netzwerkverzögerungen usw. können in diesem Faktor, aber wenn ich die Antwort auf Ausgabe auf einmal bekommen konnte und vielleicht eine Tabelle basierte Layouts verwenden (IE macht möglicherweise die Tabelle nur nach der Tabelle schließt ) könnte dies vernünftig arbeiten.

Oder dann versuchen, dies zu Firefox erhalten schaltete oder vielleicht alle über diese kleine Panne vergessen ...

UPDATE 2

Das fing an, mich zu stören, so dass ich einige Untersuchungen gemacht haben. Wenn ich eine einfache jsp Seite habe (keine Fliesen) die Pufferung Arbeiten (mit dem Pufferattribut), so dass, wenn ich habe meinen Thread.sleep () gibt die gesamte Seite nach zwei Sekunden wiedergegeben, wenn die Seitengröße unterhalb der Puffergröße war. Aber wenn ich verwenden Fliesen in der Seite (wie im Beispiel oben) ich die Seite nicht zur gleichen Zeit zu machen, bekommen konnte (I enthielt auch die Seite Richtlinie in allen meinen Fliesen-templates / „Komponenten“, keine Hilfe). So Fliesen wahrscheinlich spült die Antwort irgendwo?

Darüber hinaus können die „problematischen Kacheln“ war mein Körper-Teil, der ein Streben enthalten: Formular-Tag. Ich ersetzen es mit einem normalen Form-Tag und es hat funktioniert, wie ich wollte ...

UPDATE 3

Ok, niemand scheint das Innenleben von Fliese zu kennen oder Streben Tags ... Kein großes Problem, da dies ein sehr spezieller Fall und Anforderung. Ich arbeitete um es von Apache als ProXT vor der Anwendung und unter Verwendung von Apache-Proxy-Konfigurationsoptionen einen großen Puffer angeben. Ich werde diese Marke als beantwortet.

War es hilfreich?

Lösung

Sie können den „flush“ -Attribut auf den Fliesen Komponenten?

<tiles:insertAttribute name="body" flush="false"/>

Darüber hinaus, wenn der Ausgangspuffer zu groß wird, wird es auf jeden Fall spülen. Versuchen Sie die Erhöhung der Puffergröße?

<%@ page language="java" buffer="500kb" autoFlush="false" %>

Andere Tipps

Sie können auf der Serverseite Seite Daten auf einmal senden, wenn Sie mögen (und viele Frameworks, dass ohnehin für Bequemlichkeit), aber die Realität der Vernetzung ist, dass es nicht alle auf einmal kommen wird und der Browser macht es als Pakete ankommen. Und das ist eine gute Sache für die Ansprechbarkeit, auch wenn Sie * ästhetisch möchten die Seite auf einmal angezeigt werden.

Sie können die Verzögerung so weit wie möglich zu reduzieren, indem Markup vereinfachte und Komprimierung, um die Nutzlastgröße nach unten, und das ist eine lohnenswerte Sache zu tun, in der Regel zu halten mit abzulassen. Außerdem können Sie sicherstellen, dass Sie nicht ein Flash Of Unstyled Inhalt zu schlagen. Aber man kann nicht steuern, wenn der Browser zu machen wählt, kurz alles in JavaScript mit allen Nachteilen zu tun, die sich bringt (und selbst dann könnte der Browser neu zu zeichnen langsam).

(. * - oder Ihre Kunden / Chef, wenn es das ist, die mit dieser „wichtigen Voraussetzung“ gekommen ist, dass Ihre Website irgendwie anders im Web zu jeder anderen Seite arbeiten)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top