Ist das Einbetten von Hintergrundbilddaten in CSS als Base64 gut oder schlecht?
War ich bei der Suche die Quelle für ein greasemonkey userscript und bemerkte Folgendes in Ihre css:
.even { background: #fff url(data:image/gif;base64,R0lGODlhBgASALMAAOfn5+rq6uvr6+zs7O7u7vHx8fPz8/b29vj4+P39/f///wAAAAAAAAAAAAAAAAAAACwAAAAABgASAAAIMAAVCBxIsKDBgwgTDkzAsKGAhxARSJx4oKJFAxgzFtjIkYDHjwNCigxAsiSAkygDAgA7) repeat-x bottom}
Kann ich nachvollziehen, dass ein greasemonkey-script wäre bündeln wollen-alles, was es kann innerhalb der Quelle im Gegensatz zu hosten auf einem server, das ist klar genug. Aber da hatte ich nicht gesehen, diese Technik, die zuvor, als ich seine Verwendung, und es scheint attraktiv für eine Reihe von Gründen:
- Es verringert sich die Menge der HTTP-requests beim laden der Seite, somit eine Verbesserung der Leistung
- Wenn kein CDN, dann verringert sich die Menge des Verkehrs, die durch cookies gesendet werden, neben der Bilder
- CSS-Dateien zwischengespeichert werden können
- CSS-Dateien GZIP -
Wenn man bedenkt, dass der IE6 (zum Beispiel) Probleme mit cache für hintergrund-Bilder, das scheint es nicht die schlechteste Idee...
So, ist das eine gute oder schlechte Praxis ist, warum WÜRDEN Sie NICHT verwenden, und welche Instrumente würden Sie verwenden, um die base64-Kodierung der Bilder?
update - die Ergebnisse der Prüfung
-
Test mit Bild: http://fragged.org/dev/map-shot.jpg - 133.6 Kb
-
test URL: http://fragged.org/dev/base64.html
-
dedizierten CSS-Datei:
http://fragged.org/dev/base64.css -
178.1 Kb -
GZIP-encoding server-Seite
-
resultierende Größe geschickt client (YSLOW
Komponenten-test): 59.3 Kb -
Speichern von Daten, die an client-browser: 74.3 Kb
Schön, aber es wird etwas weniger nützlich für kleinere Bilder, denke ich.
UPDATE: Bryan McQuade, software-Ingenieur bei Google, arbeiten auf PageSpeed, ausgedrückt in ChromeDevSummit 2013, Daten:uris in CSS wird als render-blocking anti-pattern für die Bereitstellung wichtiger/minimal-CSS während seiner Rede
#perfmatters: Instant mobile web apps
. Sehen http://developer.chrome.com/devsummit/sessions und denken Sie daran - eigentliche Folie
InformationsquelleAutor der Frage Dimitar Christoff | 2009-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es nicht eine gute Idee, wenn Sie möchten, dass Ihre Bilder und style-Informationen werden separat zwischengespeichert. Auch wenn Sie Kodieren ein großes Bild oder eine signifikante Anzahl von Bildern in der css-Datei der browser länger zum download der Datei Ihre Website verlassen, ohne die style-Informationen, bis der download abgeschlossen ist. Für kleine Bilder, dass Sie nicht beabsichtigen, ändern sich oft, wenn überhaupt, ist es eine feine Lösung.
soweit die Erzeugung der base64-Codierung:
InformationsquelleAutor der Antwort poop a birck
Diese Antwort ist veraltet und sollte nicht verwendet werden.
1) Durchschnittliche Latenz ist viel schneller auf mobile im Jahr 2017. https://opensignal.com/reports/2016/02/usa/state-of-the-mobile-network
2) HTTP2-Multiplexen
https://http2.github.io/faq/#why-is-http2-multiplexed
"Data-URIs" sollte auf jeden Fall berücksichtigt werden, für mobile Websites. HTTP-Zugriff über das Mobilfunknetz kommt mit höherer Latenz pro request/response. So gibt es einige Anwendungsfälle, bei denen ein Verklemmen Ihre Bilder als data in die CSS-oder HTML-Vorlagen, die nützlich sein könnten, die auf mobilen web-apps. Sie sollten Messen die Nutzung auf einer Fall-zu-Fall-basis -- ich bin nicht dafür, dass Daten-URIs sollten überall verwendet werden, in eine mobile web app.
Beachten Sie, dass die mobilen Browser haben Einschränkungen auf die Gesamtgröße der Dateien, die zwischengespeichert werden können. Grenzen für iOS 3.2 waren ziemlich niedrig (25 KB pro Datei), werden aber immer größer (100K) für neuere Versionen von Mobile Safari. So sicher sein, halten Sie ein Auge auf Ihre gesamten Datei-Größe, wenn einschließlich Daten-URIs.
http://www.yuiblog.com/blog/2010/06/28/mobile-browser-cache-limits/
InformationsquelleAutor der Antwort Mike Brittain
Hinweis wenn Sie das Bild nur einmal, ich sehe kein problem, binden Sie ihn in Ihre CSS-Datei. Aber sobald Sie mehr als ein Bild oder auf Sie verweisen müssen es mehrmals in der CSS, die Sie möglicherweise verwenden Sie ein einzelnes Bild anzeigen, statt Sie können dann schneiden Sie Ihre einzelnen Bilder aus (siehe CSS-Sprites).
InformationsquelleAutor der Antwort Gumbo
Eines der Dinge, die ich würde vorschlagen, zwei getrennte stylesheets:
Mit Ihrem regelmäßigen style-Definitionen und anderen, enthält, die Ihre Bilder in base64-Codierung.
Dann schließen Sie das Basis-stylesheet, bevor das Bild stylesheet natürlich.
Diese Weise werden Sie versichern, dass Sie regelmäßig stylesheet heruntergeladen und angewendet so bald wie möglich, um das Dokument, gleichzeitig profitieren Sie von der reduzierten http-Anfragen und anderen Leistungen-Daten-uris geben Sie.
InformationsquelleAutor der Antwort ximi
Base64-fügt über 10%, um die Größe des Bildes nach dem Gzip-aber das überwiegt die Vorteile, wenn es darum geht, mobile. Da gibt es einen Allgemeinen trend mit responsive web-design, ist es sehr zu empfehlen.
W3C empfiehlt auch dieser Ansatz für mobile, und wenn Sie die asset-pipeline in rails, das ist eine Standard-Funktion bei der Komprimierung von css -
http://www.w3.org/TR/mwabp/#bp-conserve-css-images
InformationsquelleAutor der Antwort Greg
Ich bin nicht einverstanden mit der Empfehlung, erstellen Sie separate CSS-Dateien für nicht-redaktionelle Bilder.
Vorausgesetzt, die Bilder sind für UI-Zwecke, es ist presentation layer styling, und wie oben erwähnt, wenn du tust mobile UI ' s Ihr auf jeden Fall eine gute Idee, um alle styling in einer einzigen Datei, so kann es zwischengespeichert werden einmal.
InformationsquelleAutor der Antwort tim
In meinem Fall es mir erlaubt, für ein CSS-stylesheet, ohne sich Gedanken über das kopieren von verknüpften Bildern, da Sie bereits eingebettet.
InformationsquelleAutor der Antwort Rolf
Versuchte ich ein online-Konzept von CSS/HTML-analyzer:
http://www.motobit.com/util/base64/css-images-to-base64.asp
Kann:
Kommentare/Vorschläge sind willkommen.
Antonin
InformationsquelleAutor der Antwort Antonin Foller
Kodieren Sie es in PHP 🙂
Quelle
InformationsquelleAutor der Antwort ucefkh
Bringen ein bisschen für die Nutzer von Sublime Text 2 gibt es ein plugin gibt das die base64-code laden wir die Bilder in der ST.
Genannt Image2base64: https://github.com/tm-minty/sublime-text-2-image2base64
PS: Nie speichern Sie diese Datei generiert das plugin, weil es würde die Datei überschreiben und zerstören würde.
InformationsquelleAutor der Antwort Daniel Santarriaga
Danke für die Informationen hier.
Ich finde diese Einbettung nützlich und besonders für die mobile vor allem mit den eingebetteten Bildern' css-Datei zwischengespeichert werden.
Um das Leben leichter machen, wie meine Datei editor(s) nicht nativ damit umgehen, ich habe ein paar einfache Scripte für laptop/desktop-editing-Arbeit, hier im Fall sind Sie jeder verwenden, um jedes andere Unternehmen. Ich habe fest mit php, wie es ist der Umgang mit diesen Dingen, direkt und sehr gut.
Unter Windows 8.1 sagen---
... es als Administrator stellen Sie eine Verknüpfung zu einer batch-Datei in Ihrem Pfad.
Diese batch-Datei ruft eine php - (cli -) Skript.
Können Sie dann mit der rechten Maustaste ein Bild im Datei-explorer, und SendTo das batchfile.
Ok Admiinstartor Anforderung, und warten Sie, bis das schwarze command-shell Fenster zu schließen.
Dann einfach fügen Sie das Ergebnis über die Zwischenablage in Ihre in Ihre text-editor...
oder
Folgenden sollte anpassungsfähig sein, für die anderen OS.
Batch-Datei...
Und mit php.exe in Ihrem Weg, das ruft eine php - (cli -) script...
InformationsquelleAutor der Antwort PaulANormanNZ
Soweit ich recherchiert haben,
Verwenden :
1. Wenn Sie mit einem svg-sprite.
2. Wenn Sie Ihre Bilder sind von geringerer Größe (max 200mb).
Nicht Verwenden :
1. Wenn Sie größere Bilder.
2. Icons als svg. Wie Sie sind schon gut und gzipped nach der Kompression.
InformationsquelleAutor der Antwort Pooja Esakkimuthu