Wie kann ich den IE zwingen, Seiteninhalte anzuzeigen, bevor die gesamte Javascript-Ausführung abgeschlossen ist?

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

Frage

In einer Ruby on Rails-Entwicklungsumgebung wird eine Seite in Firefox nach 30 Sekunden angezeigt, in IE 8 (mit IE 7-Kompatibilitätsmodus) dauert es jedoch 90 Sekunden.

Weitere Untersuchungen zeigen, dass es Javascript sein sollte, das die Seite verlangsamt, denn wenn Javascript deaktiviert ist, wird der Seiteninhalt auch in 30 Sekunden angezeigt.

Da es wahrscheinlich 7 oder 8 jQuery-Plugins, Facebook-Skripte und Google Analytics-Skripte gibt, würde es einige Zeit dauern, den gesamten Javascript-Code an das Ende der HTML-Datei zu verschieben (was die Anzeige des Seiteninhalts beschleunigen sollte, damit der Inhalt angezeigt wird). wird nach 30 Sekunden angezeigt, genau wie bei Firefox). Gibt es eine Möglichkeit, den IE zu zwingen, den Seiteninhalt anzuzeigen, bevor die Ausführung des gesamten Javascript-Codes abgeschlossen ist?

Ich denke, der IE wartet möglicherweise darauf, dass der gesamte Javascript-Code zuerst fertig ist, denn was wäre, wenn dies der Fall wäre? document.write() Anweisungen, die im HTML enthalten sein sollten...Firefox oder Chrome warten nicht darauf, sondern zeigen den Inhalt sofort an.

(Auf dem Produktionsserver wird die Seite nach 5 bis 7 Sekunden in Firefox angezeigt, da viele der „Partials“ (HTML-Unterkomponenten) zwischengespeichert werden.IE 8 dauert auch viel länger, etwa 40 Sekunden oder so.)

P.S. Ein wichtiger Grund dafür, dass Javascript im gesamten HTML-Code eingebettet ist, könnte sein, dass sich der HTML-Code beispielsweise bei einem „Bildkarussell“ in einem „Teil“ befindet, also in einer HTML-Datei, die von einer HAML-Datei generiert wurde, und so weiter Sowohl HTML als auch der Javascript-Code befinden sich zur besseren Kapselung in dieser Datei, anstatt HTML in einer Datei und Javascript in einer anderen Datei zu haben, aber ich frage mich, was passiert, wenn alle diese Javascript-Codeblöcke nur jQuery verwenden $(document).ready(function() { ... }), verlangsamt dieser Codeblock dann die Seitenanzeige im IE?

War es hilfreich?

Lösung

Leider kann man davon ausgehen, dass alle Ihre jQuery-Plugins darauf warten, dass der Dom im IE vollständig geladen wird.Eine Lösung besteht darin, zu versuchen, das Laden der Seite zu beschleunigen.Hier sind einige gute Möglichkeiten, dies zu tun:

  1. Hosten Sie jQuery nicht selbst.Laden Sie es entweder von Google oder dem Microsoft CDN.Dies führt dazu, dass eine Verbindung weniger mit Ihrem Webserver verbunden ist.
  2. Laden Sie Inhalte dynamisch über jQuery.Es ist schwierig, Dinge im Nachhinein neu zu verknüpfen, aber es wird Ihnen auf jeden Fall ermöglichen, Inhalte schrittweise zu laden und den Eindruck zu erwecken, dass die Seite schneller geladen wird.
  3. Platzieren Sie das gesamte Javascript nach Möglichkeit am Ende der Seite.
  4. Eliminieren Sie nach Möglichkeit Aufrufe von document.ready in jQuery.
  5. Lazy Load-Bilder mit diesem jQuery-Plug-in: http://www.appelsiini.net/2007/9/lazy-load-images-jquery-plugin Dies führt dazu, dass bei der ersten Anzeige der Seite weniger Inhalte heruntergeladen werden.
  6. Verwenden Sie für gehostete Skripte und Bilder ein CDN eines Drittanbieters oder zumindest eine andere Domäne.Das Ausladen derselben Domain ist ein Engpass

Andere Tipps

Ich würde auch vorschlagen, was Nissan Fan unter Punkt 3 gesagt hat, allerdings mit einer Änderung.Verschieben Sie alle nicht benötigten Skripte an das Ende der Seite, so dass im Kopf nur JQuery und möglicherweise ein weiteres Skript vorhanden sind.

Ich würde auch vorschlagen, die Verwendung von LAB.js in Betracht zu ziehen. Dadurch werden Browser gezwungen, JS und andere Seitenelemente parallel zu verarbeiten, sodass Sie den Ladevorgang erheblich verkürzen können.

http://labjs.com/

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