Serving gzippte CSS und JavaScript von Amazon CloudFront über S3
Ich habe auf der Suche nach Möglichkeiten, meine Seite schneller geladen und in einer Weise, dass ich möchte, um zu erkunden, ist die verstärkte Nutzung von Cloudfront.
Weil Cloudfront war ursprünglich nicht konzipiert als eine custom-origin CDN und weil es Sie nicht unterstützen Gzip, habe ich bisher verwende es als host für alle meine Bilder, die referenziert sind, durch Ihre Cloudfront-cname in meiner Website-code, und optimiert mit weit-futures-Header.
CSS-und javascript-Dateien, auf der anderen Seite, gehostet auf meinem eigenen server, denn bis jetzt war ich unter dem Eindruck, dass Sie konnte nicht serviert werden, gzipped von Cloudfront, und dass der Gewinn von Gzip (etwa 75 Prozent) überwiegt, dass von der Nutzung eines CDN (über 50 Prozent): Amazon S3 (und damit Cloudfront) nicht unterstützen portion gzipped-Inhalt in einem standard-Weise durch die Verwendung des HTTP-Accept-Encoding-header, die gesendet wird, von den Browsern zu zeigen, Ihre Unterstützung für gzip-Komprimierung und so waren Sie nicht in der Lage, Gzip und dienen-Komponenten on-the-fly.
So, ich war unter dem Eindruck, bis jetzt hatte man die Wahl zwischen zwei alternativen:
-
verschieben Sie alle Vermögenswerte, die zu Amazon CloudFront und vergessen-Gzip;
-
halten-Komponenten self-hosted und konfigurieren unsere server zu erkennen, die eingehenden Anfragen und führen Sie on-the-fly Gzip als angemessen, das ist, was ich wählte es so weit.
Dort wurden Problemumgehungen um dieses Problem zu lösen, aber im wesentlichen diese hat nicht funktioniert. [link].
Nun scheint es Amazon Cloudfront unterstützt benutzerdefinierte Ursprungs, und dass es ist nun möglich, verwenden Sie die standard-HTTP-Accept-Encoding-Methode für das servieren von Gzip-Inhalte, wenn Sie Benutzerdefinierte Origin - [ link ].
Habe ich noch nicht so weit umsetzen können, die neue Funktion auf meinem server. Der blog-post habe ich im Zusammenhang mit oben, die ist die einzige, die ich gefunden Detaillierung der änderung, scheint zu implizieren, dass Sie können nur dann aktivieren, Gzip (bar workarounds, die ich nicht verwenden will), wenn Sie entscheiden sich für benutzerdefinierte Herkunft, die ich lieber nicht: ich finde es einfacher, die Hosts der jeweiligen fileds auf meine Cloudfront-server, und link, um Sie von dort aus. Trotz sorgfältigem Lesen der Dokumentation, ich weiß nicht:
-
ob die neue Funktion bedeutet, die Dateien werden sollte, gehostet auf meinem eigenen domain-server über benutzerdefinierten Ursprungs, und wenn ja, welche code-setup erreichen;
-
so konfigurieren Sie die css-und javascript-Header, um sicherzustellen, dass Sie werden serviert gzipped aus Cloudfront.
InformationsquelleAutor der Frage Donald Jenkins | 2011-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: Amazon unterstützt nun auch gzip-Kompression, so dass diese nicht mehr benötigt wird. Amazon-Ankündigung
Original Antwort:
Die Antwort ist gzip die CSS-und JavaScript-Dateien. Ja, Sie haben richtig gelesen.
Diese produzieren
production.min.css.gz
. Entfernen Sie die.gz
upload auf S3 (oder was auch immer-Ursprungs-server, die Sie nutzen) und explizit denContent-Encoding
header für die Datei zugzip
.Es ist nicht on-the-fly Gzip, aber Sie könnte sehr leicht wickeln Sie es in Ihren build - /deployment-Skripten. Die Vorteile sind:
gzip -9
).Davon aus, dass Ihre CSS - /JavaScript-Dateien sind (a) minified und (b) groß genug, um zu rechtfertigen, die die CPU benötigt, um Sie zu entpacken auf dem Rechner des Benutzers, Sie können erhebliche performance-Gewinne hier.
Nur daran erinnern: Wenn Sie eine änderung an einer Datei, die zwischengespeichert wird, in CloudFront, stellen Sie sicher, dass Sie den cache ungültig, nachdem Sie diese Art von ändern.
InformationsquelleAutor der Antwort Skyler Johnson
Meine Antwort ist ein take-off auf dieser: http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html
Gebäude aus skyler die Antwort, die du hochladen kannst gzip und nicht-gzip-version von css und js. Seien Sie vorsichtig, der Benennung und der test in Safari. Da safari nicht behandeln
.css.gz
oder.js.gz
- Dateien.site.js
undsite.js.jgz
undsite.css
undsite.gz.css
(Sie müssen diecontent-encoding
- header, um den richtigen MIME-Typ zu bekommen, diese dienen rechts)Dann in Ihre Seite setzen.
gzipcheck.js.jgz ist nur
sr_gzipEnabled = true;
Diese tests, um sicherzustellen, dass der browser verarbeiten kann die Gzip-code und sorgen für eine Sicherung, wenn Sie nicht können.Dann tun Sie etwas ähnliches in der Fußzeile, vorausgesetzt, alle Ihre js in einer Datei und kann in der Fußzeile.
UPDATE: Amazon unterstützt nun auch gzip-Kompression. Ankündigung, so dass diese nicht mehr benötigt wird. Amazon-Ankündigung
InformationsquelleAutor der Antwort Sean
Cloudfront unterstützt Gzip.
Cloudfront-Verbindung zu Ihrem server via HTTP 1.0. Standardmäßig einige Webserver, einschließlich nginx, somit nicht dienen gzipped-Inhalt an die HTTP 1.0 verbindungen, aber Sie können sagen, es zu tun, indem Sie hinzufügen:
Ihrem nginx-config. Das äquivalent config gesetzt werden konnte, für welchen web-server du verwendest.
Dies hat einen Nebeneffekt, dass keep-alive-verbindungen, nicht für HTTP 1.0-verbindungen, aber die Vorteile von Kompression, sind riesig, es lohnt sich die trade-off.
Entnommen http://www.cdnplanet.com/blog/gzip-nginx-cloudfront/
Bearbeiten
Inhalt bedienen, ist die Gzip-on-the-fly über Amazon cloud front ist gefährlich und wahrscheinlich nicht getan werden sollte. Im Grunde, wenn der webserver Gzip den Inhalt, es wird kein Content-Length und stattdessen senden Sie die Daten als chunked.
Wenn die Verbindung zwischen Cloudfront und dein server ist unterbrochen und vorzeitig abgetrennt, Cloudfront noch caches, die teilweise Ergebnis und dient als die version im Cache, bis es abläuft.
Die akzeptierte Antwort von Gzip Sie es zuerst auf der Festplatte und dann servieren Sie die Gzip-version ist eine bessere Idee, wie Nginx in der Lage, das Content-Length-header, und so Cloudfront verwerfen abgeschnitten Versionen.
InformationsquelleAutor der Antwort Danack
Wir haben ein paar Optimierungen für uSwitch.com vor kurzem komprimieren einige der statischen Elemente auf unserer Website. Obwohl wir das setup eine ganze nginx-proxy habe ich auch zusammen ein wenig Heroku-app, die proxies zwischen CloudFront und S3 zu komprimieren Inhalt: http://dfl8.co
Gegeben öffentlich zugänglich S3-Objekte zugegriffen werden kann, über eine einfache URL-Struktur, http://dfl8.co verwendet einfach die gleiche Struktur. I. e. die folgenden URLs sind äquivalent:
InformationsquelleAutor der Antwort pingles
Gestern von amazon angekündigte neue feature, Sie können jetzt aktivieren Sie gzip auf Ihre Verteilung.
Funktioniert es mit dem s3 ohne Zusatz .gz-Dateien selbst, ich habe versucht, die neue Funktion heute und es funktioniert Super. (Sie benötigen, zu entkräften, sind Sie aktuellen Objekte)
Mehr info
InformationsquelleAutor der Antwort Chris
Können Sie CloudFront konfigurieren, um automatisch Dateien komprimieren bestimmter Arten und dienen der komprimierten Dateien.
Unter AWS Developer Guide
InformationsquelleAutor der Antwort Rafi