2013-08-12 5 views
5

Ich verwende lazyload.js, um mehrere Skripts zu laden. Jetzt dachte ich nur an eine Site-weite Include, die lazyload.js lädt alle Skripte auf meiner Website verwendet. Dann könnte ich den Browser entscheiden lassen, ob eines dieser Skripte bereits im Cache ist oder nicht (und falls nötig).Lädt ein Browser noch ein Skript, wenn es sich bereits im Browser-Cache befindet?

Das erspart mir zu testen in js, ob etwas bereits geladen ist (und ich bin bereit, den Overhead von ein paar zusätzlichen Anfragen zu akzeptieren). Würde es so funktionieren oder übersehe ich etwas?

Antwort

3

Ich bin nicht dieses auf harte Zahlen zu stützen, aber ich denke, es ist sicher zu sagen, dass etwa 75 bis 80% der Browser, die heute benutzt werden, machen einen ziemlich guten Job, um die Skripte zwischenzuspeichern. AFAIK, gibt es Möglichkeiten, Browser nicht zwingen, die zwischengespeicherten Skripts zu verwenden, aber da dies nicht das ist, was Sie wollen, ist das egal.

Ja, die meisten Browser werden sich tatsächlich auf die Cahced-Skripte beziehen und die Dateien nicht immer wieder anfordern. Natürlich, some people are concerned about their privacy, und wird nur im anonymen/Inkognito-Modus (aka Porno-Modus) im Internet surfen.
Dies bewirkt, dass der Browser den Cache löscht, wenn das Browserfenster geschlossen wird.
Warum würde es dich interessieren? Nun, ich für meinen Teil finde das sehr nützlich bei der Entwicklung meiner JS-Skripte.
hard-refreshing ist so etwas wie ctrl + c. Wir alle haben die Gewohnheit, diese zwei Tasten 4 bis 5 Mal zu drücken, um sicher zu gehen. Ich habe bemerkt, dass meine Mitarbeiter mit ctrl das gleiche tun + F5 auch ...

+0

Sind Sie sicher, dass die meisten Browser den Cache überprüfen, bevor Sie ein Skript laden? Weil ich auch eine Antwort von jemandem erhalten habe, der sagt, dass immer alles geladen wird, unabhängig vom Cache, und ich weiß nicht wirklich, was ich jetzt glauben soll. –

+0

@ Samuel: Ich habe mir die Quelle von lazyload.js angesehen. Alles, was es wirklich tut, ist ein neues DOM-Element (Skript-Tag, überprüfen Zeile 230 auf Github), und fügt es in den DOM-Baum. Das resultierende Verhalten ist das gleiche wie zu dem Zeitpunkt, als das Tag da war: Der Browser wird prüfen, ob sich das Skript im Cache für diese Domäne befindet, wenn dies der Fall ist, wird die Datei nicht erneut angefordert, sondern die zwischengespeicherte Version geladen. Wenn nicht, wird die Datei angefordert. Ich habe mir die anderen Antworten kurz angesehen, aber ich weiß nicht genau, auf welche Sie sich beziehen, wenn Sie sagen, dass Sie eine Antwort hatten, die besagt, dass die Anfrage immer ausgeführt wird. –

+0

Ich meinte Dmitrys Antwort (ganz unten). Aber deine Antwort erklärt genau, worüber ich mich nicht sicher war. Vielen Dank! –

1

Ich habe gesehen, es funktioniert so, wie Sie es erklärt haben und ich habe es nicht funktioniert gesehen. Es kommt jedoch auch selten zu einer doppelten Belastung, wodurch der Overhead noch größer wird.

+0

Danke für Ihre Antwort, aber ich verstehe Ihren letzten Satz nicht. Was meinst du damit genau? –

+0

Ernsthaft, wenn Sie das Kopfgeld wollen, geben Sie mir mindestens eine halbwegs anständige Antwort. Ich gebe dir nicht das Kopfgeld, wenn deine Antwort so bleibt. –

+0

Mir ist das Kopfgeld egal. Zweitens, wenn ich sage, dass es doppelt geladen wird, wird die zwischengespeicherte Version über den Lazyload geladen. Es wirkt sich nicht auf das Funktionieren des Javascript aus, aber manchmal kann es sich verlangsamen, je nachdem, wie lange es ist. – spriore

1

Kurz: Es hängt

Der Browser höchstwahrscheinlich nicht für das Skript anfordern, wenn sie im Cache vorhanden ist, sofern nicht ausdrücklich angegeben ist.

Es ist jedoch vollständig bis zu dem Ermessen des Browser das Skript oder nicht zu beantragen ..

+0

Ihre Frage erhielt meine Aufmerksamkeit :) @ Samuel –

+0

Ok, danke für die Antwort. Ich denke, es ist nicht so einfach, wie ich es mir vorgestellt habe. Grundsätzlich ist die Antwort: es kommt darauf an. –

+0

@Samuel Genau ... –

1

Lazy Loading ist nicht immer über die Bandbreite Erhaltung, es hat auch viel mit CPU/Batterie zu tun Erhaltung. Wenn Sie etwas laden, ob im Browser-Cache oder nicht, laden Sie es bei Bedarf und verschwenden damit keinen Code, der nie benutzt wird. Wenn Sie alles im Voraus laden, entstehen für jeden Besuch einer Seite feste Kosten für CPU und Akku, unabhängig davon, ob 80% der Module verwendet werden oder nicht.

Um die Akkulaufzeit von Mobilgeräten zu schonen, sollten Sie den richtigen Lazy Loading-Ansatz verwenden. Aber für Desktops ist es besser, alles vorab zu laden, da die Vorladekosten relativ gering sind.

1

Wie wäre es mit Cache-Kontrolle?

<pre><code><meta http-equiv="cache-control" content="no-cache"></code></pre> 

Vielleicht ist dies das Richtige für Sie. Schauen Sie here für weitere Informationen.

+0

Ok, aber warum "no-cache"? Weil ich möchte, dass der Browser wenn möglich auf die zwischengespeicherte Version verweist. Sollte es nicht "öffentlich" oder "privat" sein? Und ist "Public" nicht schon der Standard? –

+0

Ja, öffentlich ist die Standardeinstellung. Aber Sie wissen, dass der Browser die zwischengespeicherte Version automatisch übernimmt. – Lithilion

+0

Warum die w3fools verlinken? –

0

Nein, es würde nicht funktionieren.

Wenn Sie lazyload anweisen, Skripte zu laden, werden Skripte geladen. Lazyload hat keinen Zugriff auf den Browser-Cache und konnte nicht feststellen, ob sich eine Ressource im Cache befindet oder nicht. Auch das Laden der Skripte ist wichtig, daher kann der Browser JavaScript nicht verwenden, wenn vorherige Javascript-Dateien nicht geladen sind. Browser könnte feststellen, ob Javascript-Dateien voneinander abhängig sind oder nicht.

Für den Fall, dass Sie in Erwägung ziehen, nur "load all" über Lazyload zu erstellen: ist es besser, nur eine JavaScript-Datei zu erstellen und am Ende Ihrer Seiten zu laden.

+0

Lazyload hat keinen Zugriff auf den Cache, wahr genug, aber lazyloadjs lädt Ihre Skripte nicht wirklich. Es erstellt einen neuen DOM-Knoten, der diese an die aktuelle DOM-Struktur anfügt. JS hat nichts mit dem DOM zu tun, und sobald das src-Attribut gesetzt ist, ist es Sache des Browsers, wie das Skript angefordert wird. Die meisten modernen Browser _will_ beziehen sich zuerst auf den Cache. –

+0

Sie haben Recht, der Browser wird prüfen, ob die angeforderte Ressource (js-Datei) im Cache ist oder nicht. Aber dann lädt der Browser Ressourcen, die sich nicht im Cache befinden, vom Server. Und Sie können dem Browser nicht sagen: "Datei laden, wenn sich die Datei im Cache befindet". Sie sagen nur: "Datei laden". Und Browser laden aus dem Cache oder vom Server. 'lazyload.js' machen das selbe: es lädt nur js-Dateien. –

+0

Ja, das habe ich auch in meiner Antwort gesagt ... Die Art, wie die Datei/Ressource geladen wird, ist Sache des Browsers, und die meisten Browser werden die Skripte zwischenspeichern ... wenn sie nicht im Cache sind, werden sie das natürlich tun wie HTTP-Anfrage angefordert werden ... aber Ihre Antwort besagt, dass es _alle Skripte jedes Mal anfordern wird. Zumindest, so versteht das OP Ihre Antwort –

Verwandte Themen