Diese Umfrage hat mir ziemlich gut gefallen, da die Ergebnisse so knapp waren. Erst in der letzten Woche hat sich ein klarer Gewinner herauskristallisiert.

Wie bei allen Umfragen, die jemals auf dieser Website durchgeführt wurden, gibt es viele Dinge zu bedenken, und die Umfrage war wahrscheinlich zu einfach für ihr eigenes Wohl. Nichtsdestotrotz betrachte ich es als Erfolg, die Leute überhaupt zum Nachdenken über dieses Thema anzuregen. Ganz oberflächlich betrachtet: 20 KB sind kleiner, aber das CDN ist schneller und wird wahrscheinlich eher gecached.
Es steckt jedoch noch viel mehr dahinter…
- Das CDN ist wahrscheinlich eine andere Domain, sodass selbst wenn ein Benutzer die Datei laden muss, dies nicht gegen die maximale Anzahl gleichzeitiger Verbindungen für eine einzelne Domain zählt.
- Das Laden von JS ist eine Sache, die Ausführung von JS eine andere. Die Ausführung von 200 KB JS wird immer langsamer sein als die von 20 KB.
- Da_n erinnert uns daran, dass sie sich nicht gegenseitig ausschließen. Sie könnten versuchen, vom CDN zu laden und auf lokal zurückzufallen.
- Evert erinnert uns daran, dass einige IP-Adressen/Bereiche in einigen Ländern blockiert sein können, sodass je mehr unterschiedliche wir von ihnen beziehen, desto höher die Wahrscheinlichkeit ist, dass einige Ressourcen blockiert werden und Probleme beim Laden der Seite verursachen.
- Im Fall des Google CDN (das beliebteste für diese Art von Dingen) ist das Caching nur dann vorhanden, wenn Sie auf eine sehr spezifische Version einer Bibliothek verweisen, z. B. 1.8.14. Wenn Sie weniger spezifisch verlinken (z. B. 1.8 gibt Ihnen die neueste Version, die 1.8.something ist), wird sie nicht gecached (oder nicht sehr lange).
- CDN spart Bandbreite, und diese Kosten können erheblich sein (z. B. hat das 100 KB große Bild-Sprite im aktuellen Design dieser Website in den letzten 30 Tagen über 50 GB Bandbreite verbraucht. Das ist eine Datei!).
- Lokal haben Sie die Möglichkeit, die 20 KB in andere JS-Dateien zusammenzuführen und eine einzelne Ressource anstelle von vielen zu laden.
- Paul Irish sagt, wir sollten A/B-Tests für Geschwindigkeit durchführen und die schnellste wählen.
- Mobil ist eine sehr wichtige Überlegung. Mobile Browser haben weitaus weniger Platz für Caching und (manchmal) weniger Bandbreite.
- Kent Davidson erinnert uns daran, dass, wenn wir uns über die Privatsphäre sehr Sorgen machen, das CDN ausfallen könnte, da es jedem, der die Datei anfordert, Referrer-Strings an das CDN weitergibt.
- Das Hosten dieser kleinen benutzerdefinierten Datei auf Ihrem eigenen CDN hat große Vorteile. Sie hat vielleicht keine Chance, beim Eingang gecached zu werden, aber sie hat die anderen Vorteile.
Ein weiterer guter Punkt wurde in den Kommentaren von Jayphen angesprochen.
Beiträge wie dieser machen mir Sorgen über die Art von Fehlinformationen, die durch solche Umfragen verbreitet werden…
Wenn die Mehrheit der anderen Entwickler das Falsche tut, macht das es nicht richtig.
Nur weil "lokal" diese Umfrage gewonnen hat, heißt das nicht, dass es immer die richtige Antwort ist (siehe Überlegungen oben).
Bald eine neue Umfrage. Wenn Sie eine Idee für eine Umfrage auf CSS-Tricks haben, hinterlassen Sie sie als Kommentar unten. Ich möchte die Reserven an Umfrageideen auffüllen.
Hallo Chris
Würden Sie in Erwägung ziehen, eine Umfrage durchzuführen, um zu sehen, ob jQuery mit Browsern gebündelt werden sollte?
https://css-tricks.de/13261-large-file-on-cdn-or-small-local/#comment-99489
Das macht viel mehr Sinn und ist machbar.
Ich glaube, ich müsste ein überzeugendes Argument hören. Scheint etwas seltsam. Wie gibt man als Seitenautor an, dass man die "Browser-Version" möchte? Oder greift der Browser Anfragen dafür ab? Und wie funktionieren neue Versions-Rollouts?
2 Worte: „Versionskontrolle“. Der größte Schmerz bei der Verwendung von Flash (abgesehen von der Verwendung von Flash selbst) ist sicherzustellen, dass 1. der Benutzer es hat und 2. eine aktuelle Version hat, die Ihre SWF unterstützt.
Ich würde es viel lieber vorziehen, die Version und alles, was dazugehört, programmieren zu können, als davon abhängig zu sein, was mein Besucher hat (oder nicht hat).
Eine solche Syntax wäre praktisch
if(Bowser.localstorage.frameworks.jquery['1.6.2']) { // The browser ships with a version Browser.loadFramework('jquery','1.6.2'); } else { // We need to fetch our own version fallback = document.createElement('script'); // Create a new script element fallback.async = 1; // Make it load asyncronously fallback.id='jquery-script'; // Let's enable ourselves to reference it fallback.src=('https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.js'); s = document.getElementsByTagName('script')[0]; // Get the very first script tag in your HTML s.parentNode.insertBefore(fallback,s); // Insert the fallback } window.onload = function(){ if(!jQuery){ document.getElementById('jquery-script').src='js/jquery/1.6.2/jquery.js'; } };Ja, das ist eine gute Idee.
Abgesehen von einigen neuen Funktionen können alle modernen Browser eine grundlegende jQuery-Version haben, die fast 90 % der Aufgaben erledigen kann.
Dies könnte die Geschwindigkeit von Websites erheblich steigern.
Wir werden wahrscheinlich feststellen, dass alle Browser jQuery implementieren, außer IE, der mootools verwenden wird. LOL
Oberflächlich betrachtet nett (auch nach der Berücksichtigung der Versionierung – Browser könnten letztendlich mehrere aktuelle Versionen enthalten, aus denen Skripte auswählen können), aber meine größte Sorge wäre, dass Browser keine Seiten wählen sollten, wenn es um JavaScript-Bibliotheken geht.
Ich halte jQuery für großartig, aber ich wette nicht darauf, dass es für immer die beste Bibliothek sein wird.
Ich verwende jQuery ständig, aber ich denke nicht, dass Leute "im Stich gelassen" werden sollten, weil sie eine andere Bibliothek benötigen/bevorzugen, die nicht in Browsern enthalten ist (und das wäre ein legitimes Risiko, da natives jQuery einen solchen Vorteil haben könnte, dass Seiten, die andere Bibliotheken verwenden, träge erscheinen).
Wenn Sie sich meine Implementierung ansehen, könnten Sie sicherlich sehen, dass es Platz für alle beliebten Bibliotheken gibt
Wer sagt, dass jQuery in 5 Jahren noch verwendet wird? Bibliotheken dienen unterschiedlichen Zwecken für verschiedene Dinge, und es sei denn, ein Browser wie Chrome oder Firefox benötigt einen bestimmten Teil der Funktionalität einer Bibliothek, würde er in ihre jeweiligen Engines integriert werden. Es sei denn, der Browser benötigt eine Bibliothek, um zu funktionieren, sehe ich keinen Grund, eine exklusive JS-Bibliothek mit dem Browser zu bündeln.
jQuery ist sehr beliebt und hat Hunderte, wenn nicht Tausende von Kernaktualisierungen allein durchlaufen. Da JS-Bibliotheken dieser Natur sind, ist es für Browserhersteller keine praktische Lösung, den neuesten jQuery-Quellcode mit jedem Browser-Update zu liefern. Es ist auch eine berechtigte Sorge, ob die Abhängigkeit davon, dass ein Browser die richtige Bibliotheksversion hat, Ihre Website einfach deshalb unterbrechen könnte, weil der Benutzer seinen Browser noch nicht aktualisiert hat.
Ich halte ehrlich gesagt nichts davon, jQuery im Browser selbst zu integrieren. Erstens würde dies den Browser zusätzlich belasten. Dieser Overhead ist für Websites, die jQuery verwenden, möglicherweise nicht relevant, aber für diejenigen, die es nicht verwenden, ist es eine völlig unnötige Ausgabe.
Zweitens werden Browser veraltet, und wir wissen alle, dass nicht jeder auf die neueste oder auch nur die vorletzte Version aktualisiert. Das bedeutet, dass der Webentwickler noch mehr Zeit aufwenden müsste, um Legacy-Unterstützung für ältere Browser hinzuzufügen, die eine jQuery-Bibliothek enthielten, die einige der neuesten Funktionen nicht unterstützte.
Ein dritter Grund dagegen ist etwas, das traq oben berührt hat: jQuery wird wahrscheinlich nicht immer die beste verfügbare JavaScript-Bibliothek sein.
Ich glaube auch nicht, dass es eine gute Idee wäre. Wenn Browser jedoch Anweisungen wie "getElementsBySelector" unterstützen würden, würde dies die DOM-Traversal in jQuery beschleunigen (was es nutzen könnte). Ich habe im Moment keine andere Idee, aber ich denke, es ist Sache des W3C, über neue Low-Level-Methoden nachzudenken, um aktuelle Bibliotheken zu beschleunigen. Das wäre der Weg, den ich wählen würde, wenn ich an solchen Entscheidungen beteiligt wäre.
http://lievheid.nl/examples/prototyping/document.get.html
Schauen Sie sich meine Implementierung für document.get() an. Es ist das gleiche Verhalten, das Sie von etwas wie getElementsBySelector erwarten würden. Ich glaube nicht, dass es etwas ist, um das sich das W3C kümmern sollte, aber Sie sollten eine Feature-Anfrage für die ECMA 5-Entwicklung stellen.
Toller Beitrag! CDN spart Bandbreite, aber die Kosten können erheblich sein? Ich möchte tatsächlich WordPress von Ihnen lernen. Ich hoffe auf ähnliche Inhalte.
Ich habe jQuery und Prototype ausgiebig verwendet, und obwohl ich jQuery benutzerfreundlicher finde, halte ich Prototype für leistungsfähiger in Bezug auf die Instanziierung von Klassen und die objektorientierte Verwendung.
Ich lade oft jQuery oder Prototype von Googles CDN, da dies Bandbreite und Zeit spart, wenn der Benutzer es bereits gecached hat.
Websites ändern sich so schnell und werden so oft neu gestaltet/refaktoriert, dass es, wenn die Zeit reif ist, mit Sicherheit eine neue Version Ihrer JS-Bibliothek geben wird, die schneller und stabiler ist.
Interessant, dass die Ergebnisse so knapp waren und lange Zeit Kopf an Kopf blieben.
Das wird ziemlich interessant. Wenn sie jQuery und so mit neuen Versionen bündeln könnten, könnten wir unseren Arbeitsablauf wirklich beschleunigen.
Das fasst ziemlich gut zusammen, was heute im Web an manchen Stellen zu sehen ist, und selbst ich könnte davon profitieren http://www.creativeautomaton.com.
Ich habe erst seit kurzem angefangen, ernsthaft darüber nachzudenken, CDNs für viel mehr als nur das Laden der jQuery-Bibliothek zu verwenden. Ich verstehe, dass es einige ernsthafte Vorteile gibt, aber die Implikation Ihrer Umfrage ist ziemlich auffällig – dass die Vorteile einen 10-fachen Unterschied in der Dateigröße wert sein könnten! Sie haben mich wirklich zum Nachdenken gebracht…