CloudFlare hat eine bahnbrechende Technologie namens Rocket Loader (sowohl für kostenlose als auch für kostenpflichtige Konten). Aber wie geht das eigentlich?
Sie haben ein Paar von Seiten das beschreibt die Technologie , aber nicht viele technische Details. Ein Schlüsselmerkmal ist, dass es alle Javascript-Ladevorgänge blockierungsfrei (asynchron) macht, was eine unglaubliche Leistung ist! Dies bedeutet, dass HTML/CSS gerendert werden kann, ohne auf das Laden und Ausführen von Skripten zu warten.
Sicherlich kann es nicht einfach alle <script>
-Tags ändern, um async="true"
oder defer="true"
zu verwenden, da dies verschiedene Probleme verursachen würde ...
document.write()
Aufrufe in diesen Skripten müssen funktionieren ( anscheinend tun diese in typischen asynchronen Skripten nichts ).Und gibt es als Entwickler noch etwas, das ich beachten muss, um sicherzustellen, dass meine Websites/Skripte/Plugins mit Rocket Loader kompatibel bleiben?
Rocket Loader ist ein asynchroner Allzweck-JavaScript-Loader, der mit einem einfachen virtuellen Browser gekoppelt ist und nach window.onload jeden JavaScript-Code sicher ausführen kann.
Rocket Loader macht eine Reihe von Dingen:
- Dadurch wird sichergestellt, dass nicht alle Skripts auf Ihrer Seite das Laden des Inhalts Ihrer Seite blockieren.
- Lädt alle Skripts auf Ihrer Seite, einschließlich Skripts von Drittanbietern, asynchron.
- Bündelt alle Skriptanforderungen in einer einzigen Anforderung, über die mehrere Antworten gestreamt werden können.
- Verwendet LocalStorage in den meisten Browsern und auf fast allen Smartphones, um Skripts intelligenter zu speichern, sodass sie nur bei Bedarf erneut abgerufen werden können.
Nach dem, was ich beim Ausführen von CloudFlare + Rocket Loader auf meiner eigenen Website gelesen und entdeckt habe, funktioniert es ungefähr so ...
Wenn eine HTML-Seite von einem CloudFlare-Server angefordert wird, schreibt sie nach dem Laden vom Origin-Webhost alle Skript-Tags in _<script type="
_ text/rocketscript
_">
_
Browser ignorieren natürlich die Skript-Tags, da sie das Format "text/rocketscript" nicht verstehen.
CloudFlare fügt außerdem ein zusätzliches cloudflare.min.js
Skript in die Seite ein, das die Magie ausführt ( siehe formatierte Version hier ). Dies ist das einzige Skript, das ursprünglich vom Browser geladen wurde (asynchron).
Dieses Skript analysiert die Seite nach Skripten vom Typ "text/rocketscript".
Anschließend wird geprüft, ob eines dieser Skripte bereits im lokalen Speicher des Browsers vorhanden ist. Andernfalls wird eine AJAX Anforderung für sie (in logischen Bündeln zusammengefasst) vom CloudFlare-CDN gesendet. Ich bin nicht ganz sicher, wie es funktioniert, um die Skripte zu gruppieren.
Die CDN-Server erfassen die Skripte (die von verschiedenen Servern stammen können: Google, Twitter, Facebook, andere CDNs usw.) entweder aus ihrem Cache oder von den Origin-Servern und kombinieren, verkleinern und GZIP-Dateien, bevor sie zurückgesendet werden zum Browser.
Bei diesem virtuellen Browser , auf den sie verweisen, muss es sich lediglich um ein JavaScript handeln, das dann jedes dieser Skripte in der richtigen Reihenfolge ausführt und Folgendes ausführt:
document.write()
abfangen und diesen Inhalt an der richtigen Stelle auf der Seite einfügen. (Möglicherweise durch Überschreiben der write()
-Funktion des Browsers mit einer benutzerdefinierten?)Ich bin eigentlich ziemlich schockiert, dass es funktioniert (obwohl vielleicht esnichtimmer ). Aber unter normalen Umständen glaube ich nicht, dass Entwickler etwas Besonderes tun müssen, um ihre JavaScript-Kompatibilität zu gewährleisten.
Dies ist ein Community-Wiki. Bearbeiten Sie daher alle fehlenden Details und fügen Sie sie hinzu.