2010-11-27 1 views
1

Ich habe eine Webseite erstellt von einem PHP-Skript, die beim Laden wird 0 bis N div Elemente enthalten. Für jedes div führe ich einen spezifischen JavaScript-Code aus, der die für das div relevanten Daten manipuliert. Eines der Dinge, die dieser Code tut, ist ein img Element zu erstellen und sein 'src' Attribut auf eine bestimmte URL eines Bildes einer bekannten (aber variablen) Größe. Dies geschieht zum Zwischenspeichern. Diese Bilder sollen nicht im anfänglichen Seitenlayout angezeigt werden - aber jedes sollte nach einer bestimmten Benutzereingabe erscheinen (Mouse-Hover) - also versuche ich, die Bilder zwischenzuspeichern, so dass es nicht lange dauern wird, bis sie angezeigt werden.Wie man mehrere interne JavaScript-Codes asynchron ausführt und nicht blockiert?

Das Laden der Bilder erfordert natürlich Zeit - und jedes Mal lädt ein Bild die Codeblöcke, was zu hohen Ladezeiten führt. ein Beispiel:

<div id="i1"> 
<script type="text/javascript"> 
    /* run code relevant to 'i1', and amongst other things load some image 
     into a detached img element for later use. let's call this code 'bcode' */ 
</script> 
<div id="i2"> 
<script type="text/javascript"> 
    /* run 'bcode' for i2 */ 
</script> 

<div id="...and so on"> 

zu versuchen, um asynchron den Code auszuführen hat, habe ich versucht, dies:

<div id="i1"> 
(function() { 
    var asyncScriptElement = document.createElement('script'); 
    asyncScriptElement.async = true; 
    var scriptText = document.createTextNode ('here I put all of the relevant "bcode"'); 
    asyncScriptElement.appendChild (scriptText); 
    document.getElementById ('Img_1_2').appendChild (asyncScriptElement); 
}()); 

Es funktioniert unter FF (noch nicht schnell genug), und es funktioniert offensichtlich nicht unter IE. Haben Sie Vorschläge, wie Sie dies erreichen können? Beachten Sie auch, dass ich wirklich nichts von einem anderen externen PHP bekommen muss (d. H. Um XMLHttpRequest zu verwenden) - ich habe alle Daten, die ich in diesem PHP brauche. Ich brauche nur eine Möglichkeit, um das Laden der Bilder zu entsperren ...

Antwort

0

Ich würde Ihre Skripte in eine HTML-Seite (schließlich von PHP generiert) und laden Sie es als iFrame, um das gleiche Verhalten für jeden Browser zu gewährleisten.

Es gibt andere elegantere Optionen mit Pro und Contra; here können Sie einen Vergleich von realisierbaren Optionen, Browserkompatibilität und einen schönen Entscheidungsbaum finden.

+0

kann ich js referenzieren Variablen des äußeren Dokuments von innerhalb der js, die in den iframes sein werden? –

+0

Nein. Sie können zusätzliche Parameter in iframe src einfügen und diese Parameter über PHP oder JS im iframe verwenden. – lbz

+0

@Yuval, @ibz Wenn sich Ihre Iframes in der gleichen Domäne befinden (gleicher Ursprung), haben Sie vollen Zugriff auf alles in beiden Fensterobjekten. – xj9

0

Javascript ist single-threaded und läuft immer synchron.

Es gibt Browser-Erweiterungen, dies zu umgehen, vor allem das Konzept der Javascript Workers in Mozilla

+0

Wahr, aber es gibt eine Reihe von Möglichkeiten, um die parallele Ausführung von unterschiedlichem Javascript-Code auf derselben Seite durchzuführen. Mozilla Javascript Workers und HTML5 Web Workers sind großartige Lösungen, die wir hoffentlich in naher Zukunft übernehmen können. – lbz

+0

Das ist nicht ganz genau, aber ich schweife ab. – xj9

Verwandte Themen