Bereitstellung lokaler JS- und CSS-Ressourcen für CDN-Fallbacks

13

Angesichts dessen

  • CDNs sind eine gute Sache, da sie Ressourcen bereitstellen können, die näher am Client liegen, der Client sie zwischenspeichern kann und Sie die Last auf Ihrem eigenen Server reduzieren können.
  • In neueren Browsern wird durch das Laden von Ressourcen von Servern von Drittanbietern die Sicherheit dank Subresource Integrity (SRI) nicht beeinträchtigt .
  • CDNs sind in einigen Ländern möglicherweise inaktiv oder blockiert und stehen bei der Offline-Entwicklung nicht zur Verfügung 1 .

Ich halte es für zwingend, CDNs zu verwenden, aber auch darauf vorbereitet zu sein, dass sie nicht verfügbar sind. Dieser Blog-Beitrag bietet eine schöne Einführung in verschiedene Ansätze zur Bereitstellung von Fallbacks. Wenn Sie sich das Basic- Beispiel ansehen , werden Sie feststellen, dass es bereits eine Menge Code enthält, der Fallbacks nur für jQuery und Bootstrap bereitstellt, während die bevorzugte Lösung die Verwendung von Fallback.js vorschlägt , die für das vergangene Jahr größtenteils unerreicht zu sein scheint . In ähnlicher Weise handelt es sich bei der relevantesten SO-Frage für das Thema nur um die Bereitstellung eines Fallbacks für jQuery.

In den meisten realen Projekten würde ich jedoch davon ausgehen, dass 5 oder mehr js / css-Ressourcen zur Verfügung stehen. Daher sollte es meiner Meinung nach nicht erforderlich sein, einige fehlerhafte Boilerplates zu wiederholen, um Fallbacks für alle bereitzustellen. Außerdem müssen Sie jedes Mal, wenn Sie eine Ressource hinzufügen oder aktualisieren, dies tun

  • Aktualisieren Sie den CDN-Link
  • Aktualisieren Sie die lokale Fallback-Kopie durch manuelles Herunterladen oder Ändern der Version in der npm / bower-Konfiguration
  • Aktualisieren Sie den Link zum Fallback
  • Aktualisieren Sie den SRI-Hash

In der idealen Welt würde ich erwarten, die Ressource in einer Konfigurationsdatei hinzuzufügen / zu aktualisieren und alle anderen Schritte automatisch ausführen zu lassen (und dann Tests durchzuführen, um festzustellen, ob das Update Fehler verursacht hat).

Gibt es dafür bereits einen etablierten Workflow?

Oder sind CDNs und insbesondere SRI noch zu neu?

Oder ist es den meisten Menschen einfach egal, Ersatz für CDN-Ressourcen bereitzustellen?


1. Sie könnten zwar einen Entwickler-Build haben, der sich nicht auf CDNs stützt, aber ich halte das auch für eine Form von Fallback, da er auch gewartet werden muss.

ValarDohaeris
quelle
Ich habe selbst nicht mit CDNs herumgespielt, aber es scheint möglich zu sein, alle diese Schritte bis auf einen als Teil des Standardbereitstellungsprozesses zu automatisieren.
Ixrec
ist nicht Fallback.jsgewartet, weil es schon einwandfrei funktioniert? Software muss nicht alle 5 Minuten gewechselt werden, wenn sie bereits funktioniert.
Robert Harvey
1
Nein, ich würde behaupten, dass es nicht perfekt funktioniert, sonst sehe ich nicht, warum der Autor begonnen hätte, an einer neuen Version 2 zu arbeiten kontinuierlich getestet und verbessert werden. Soweit ich weiß, ist das Hinzufügen weiterer Tests und CIs in verschiedenen Browsern eines der Hauptziele von Version 2. Derzeit wird SRI auch nicht unterstützt.
ValarDohaeris

Antworten:

1

Ich denke, Sie haben vielleicht ein Missverständnis darüber, wie größere Websites, die diese Art der Ausfallsicherheit benötigen, CDNs verwenden.

Es geht nicht nur darum, jQuery oder einige Bilder zu hosten. Der Großteil der Website wird auf dem CDN gehostet, wobei nur dynamisch generierte Elemente wie Zahlungsseiten oder Einkaufskörbe auf den "primären Webfarms" gehostet werden.

Sogar diese werden zunehmend lokal mit JS und Cookies verarbeitet, um benutzerspezifische Inhalte anzuzeigen, ohne die serverseitige Verarbeitung zu beeinträchtigen.

Wenn ein CDN ausfällt und Sie anfangen, den gesamten Datenverkehr an Ihren Webserver weiterzuleiten, fällt dieser wahrscheinlich um, da Sie den CDN sonst nicht wirklich benötigten.

Ewan
quelle
Sie können eine CDN-Sicherung erstellen, die automatisch vergrößert wird. Und mit CDN geht es nicht nur um den Verkehr, sondern auch um mehr Komfort und Kostensenkung. Ich denke, CDN ist auch auf Websites mit wenig Verkehr sinnvoll. Warum sollte es nicht so sein?
Sjoerd222888
1

Die Site, an der ich an unserem CDN arbeite, ist für die Site immer wichtiger geworden. Am Anfang haben wir es einfach verwendet, um Images / CSS / JS zwischenzuspeichern. Zu diesem Zeitpunkt hatten wir eine config-Eigenschaft, die den Hostnamen dieser Ressourcen von www.meinesite.com/ auf www.cdn.com/ umschrieb. Wenn der CDN ausfiel, konnten wir diesen Hostwert einfach ändern oder ihn vollständig ausschalten und verlassen Die URLs verweisen auf unseren Webserver.

Wir haben jedoch jetzt damit begonnen, im Grunde ganze Seiten mit personalisierten Inhalten zu zwischenspeichern, die über AJAX geladen werden. Unser CDN ist für unsere Site unverzichtbar geworden, und wir könnten genauso viel ohne es ausführen wie unsere eigenen HTTP-Server. Wir zahlen unser CDN-Gutgeld teilweise aufgrund der Ausfallsicherheit und der versprochenen Verfügbarkeit der SLAs. Daher scheint es Zeitverschwendung zu sein, Zeit und Mühe in Fallbacks zu stecken. Wir haben einen DR-Plan, nur für den Fall, dass es ein großes Problem mit unserem Anbieter gibt, aber es ist kein einfacher automatisierter Prozess und es würde eine Zeit des Ausfalls auftreten, wenn wir auf unser Fallback-CDN migrieren.

Bei der Beantwortung Ihrer Frage kommt es also darauf an, wie wichtig das CDN für Ihre Site ist. Wenn es nur Ihre Assets sind, die Sie in das CDN einfügen, und davon ausgegangen wird, dass Ihre HTTP-Server die Last des Auslieferens dieser Inhalte bewältigen können, können Sie das CDN im Wesentlichen mit einem Konfigurationsschalter ein- oder ausschalten. In Verbindung mit einem Überwachungstool können Sie das Ein- und Ausschalten dieses Schalters automatisieren.

Sutty1000
quelle
0

Ich sehe 3 sehr wichtige Gründe für die Verwendung von CDNs:

  1. Reduzieren Sie die Netzwerklatenz für Benutzer in entfernten Regionen. Wenn Sie eine Website für ein globales Publikum haben, scheint Ihr Hosting in Nordamerika für Benutzer in Südasien, insbesondere in China, nicht schnell zu sein. Der Unterschied in der Benutzererfahrung kann so groß sein, dass Benutzer davon abgehalten werden, Ihre Website zu verwenden. In diesem Fall ist das multiregionale CDN für Ihr Unternehmen von wesentlicher Bedeutung.

  2. Servieren Sie so viel wie möglich aus hochverfügbaren Ressourcen. Zuverlässigkeit ist einer der Hauptgründe für die Verwendung von Cloud-CDNs. Der Datenverkehr wird automatisch zu den verfügbaren Knoten umgeleitet, und Sie können zusätzliche Maßnahmen zur Umleitung des Datenverkehrs hinzufügen, wenn die gesamte Cloud-Region nicht verfügbar ist.

  3. CDN ist einfacher zu warten und kostengünstiger als Anwendungsserver, die dynamische Inhalte bereitstellen. Wenn Sie sich mit den oben genannten Problemen befassen müssen, können Sie auf natürliche Weise Geld sparen.

All dies bedeutet, dass das Ziel von CDN darin besteht, die Verfügbarkeit Ihrer Inhalte für Endbenutzer zu erhöhen. Wenn CDN aus irgendeinem Grund fehlschlägt oder langsam wird, erhöht das clientseitige Fallback die Seitenlast erheblich, da zunächst versucht wird, die Ressource abzurufen, auf die nicht zugegriffen werden kann. Bessere Lösung ist das serverseitige Design, bei dem die Basis-URL durch Links wie "{CDN} /js/jquery-version-min.js" ersetzt wird. Auf diese Weise kann der Datenverkehr nach einem Fehlschlagen der CDN-Integritätsprüfung an den Anwendungsserver anstatt an das CDN weitergeleitet werden. Die Clients führen keine unnötigen Anforderungen aus und werden direkt an den Anwendungsserver weitergeleitet. Dies wäre Ihr Fallback für clientseitige Lösungen. Dies wird auch das Problem lokaler und Staging-Bereitstellungen lösen.

Ivan Gammel
quelle