Wussten Sie schon, dass Sie bei der Verwendung eines <img>-Elements in HTML oder der Deklaration eines Hintergrundbilds in CSS nicht auf eine externe Bilddatei verlinken müssen? Sie können die Bilddaten direkt in das Dokument mit Data-URIs einbetten.
(Es ist gleichermaßen korrekt, „Data URL“ zu sagen, was ich, glaube ich, bevorzuge.)
Mit CSS sieht es so aus
li {
background:
url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7)
no-repeat
left center;
padding: 5px 0 5px 25px;
}
Mit HTML sieht es so aus
<img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" alt="star" width="16" height="16">
Das Format, um genau zu sein
data:[<mime type>][;charset=<charset>][;base64],<encoded data>
Im Grunde eine super lange Zeichenkette von Kauderwelsch-Zeichen. Für den Browser ist es natürlich kein Kauderwelsch. Diese Daten werden als der Dateityp interpretiert, für den Sie sie ausgeben.
Sie können eine wirklich dumme Demo-Seite hier sehen. Ich werde die wichtigen Teile als Nächstes behandeln.
Warum sollte man das tun?
Der größte Grund: Es spart HTTP-Anfragen. Abgesehen von der reinen Dokumentengröße ist dies der wichtigste Faktor dafür, wie schnell eine Seite geladen wird. Weniger = besser.
Wie bekommt man den Code?
Verwenden Sie dieses Online-Konvertierungstool. Es ist das schönste, das ich gefunden habe. Hier ist ein weiteres Drag-and-Drop-Tool.
Beachten Sie auch, dass Base64 nicht das einzige mögliche Format für eine Data-URI ist und manchmal ist es nicht einmal eine gute Idee. ASCII ist eine weitere Möglichkeit, bei der der Code im Wesentlichen URL-codiert oder UTF-8 ist.
Browserkompatibilität
Data-URIs funktionieren nicht in IE 5-7, werden aber in IE 8 unterstützt. Sie könnten
- eine nur für IE geltende Stylesheet verwenden, um Bilder einzufügen, oder,
- nur für progressive Verbesserung verwenden, bei der es akzeptabel ist, kein Bild zu haben, oder,
- sich nicht darum kümmern
- Diesen Artikel über eine alternative Technik lesen, die funktioniert.
Wichtige Hinweise
- Die Größe des eingebetteten Codes ist etwas größer als die Größe der Ressource selbst. GZip-Komprimierung hilft.
- IE8 hat die niedrigste maximale Data-URI-Größe von 32768 Byte. (HEY?!?! Da ist schon wieder diese verrückte Zahl.)
- Es ist schwierig, eine Website mit eingebetteten Data-URIs für alles zu verwalten. Es ist einfacher, ein Bild zu aktualisieren und zu ersetzen.
- Wenn Sie PHP verwenden (oder PHP als CSS), könnten Sie Data-URIs auf der Fliege erstellen, wie hier:
<?php echo base64_encode(file_get_contents("../images/folder16.gif")) ?> - Sie sollten dies nur in Dokumenten verwenden, die stark zwischengespeichert werden, wie z. B. Ihr CSS. Eine CSS-Datei, die 300 KB statt 50 KB groß ist, ist in Ordnung, wenn sie 6 HTTP-Anfragen spart, aber nur, wenn diese CSS-Datei genauso gut zwischengespeichert wird wie die Bilder. Das Setzen von langen Ablaufdaten für CSS-Dateien sollte helfen.
- Data-URIs sind nicht auf Bilder beschränkt, sie könnten buchstäblich alles sein.
<canvas>könnte die Coolness all dessen obsolet machen, wenn es mehr unterstützt wird und Leute coole Tools dafür entwickeln.- Compass hat einen Helfer.
Zur Leistung
Relevante Forschung von Peter McLachlan
… bei der Messung der Leistung von Hunderttausenden von mobilen Seitenaufrufen ist das Laden von Bildern mithilfe einer Data-URI im Durchschnitt 6x langsamer als die Verwendung eines binären Quelllinks wie eines img-Tags mit einem src-Attribut!
"Eine CSS-Datei, die 300 KB statt 50 KB groß ist, ist in Ordnung, wenn sie 6 HTTP-Anfragen spart." Nun, sie spart 6 Anfragen und die Seite wird schneller geladen, aber der Benutzer muss darauf warten, dass das CSS heruntergeladen wird, um ein visuelles Feedback zu erhalten.
Sie können ein Beispiel hier sehen – http://stevesouders.com/cuzillion/?c0=hc1hfff10_0_f&c1=bi1hfff2_0_f&t=1269523975920
Der Browser (außer Opera) wartet, denn sonst muss er zweimal rendern.
Können Sie mehrere Stylesheets verwenden, eines für den gesamten CSS-Code und eines für die Bilder?!
Das ist ziemlich cool. Wenn Sie PHP wie oben erwähnt verwenden, könnten Sie wahrscheinlich eine ziemlich schnelle Funktion schreiben, die prüft, welcher Browser verwendet wird (z. B. IE6) und dann die Entscheidung trifft, ob der Dateipfad kodiert oder ein reguläres img-Tag verwendet wird.
Das klingt nach einer ziemlich guten Idee, Sie können das CSS zuerst von PHP parsen lassen, dann den Browser prüfen und je nachdem, die Daten oder die URL des Bildes ausgeben.
Das in Kombination mit dem Cache sollte eine wirklich gute Vorgehensweise sein…
Ich mag diese Sache. Danke!
Das kann sehr nützlich sein, wenn Sie jemals ein Single-Page-Webdokument erstellen, das Sie per E-Mail an Personen senden, anstatt es auf einem Server hochzuladen. Das beste Beispiel dafür wäre ein Lebenslauf oder etwas Ähnliches.
Ich habe das schon einmal verwendet, und es erspart den Aufwand, eine Reihe von Dateien für dieses eine Dokument senden zu müssen. Stattdessen senden Sie einfach „my-resume.html“ und sind fertig.
Wenn Sie es auf einer Live-Website verwenden möchten, würde ich es nur für sehr kleine Bilder empfehlen (d. h. Listenaufzählungspunkte), da es, wie im Beispiel von Jason Zhekov gezeigt, sehr lange Ladezeiten verursachen kann.
Ihre Argumente sind zweifellos gültig, aber
images/pretty-flower.jpg oder images/me-after-way-too-much-beer.jpg ist viel klarer, wenn ich den Code durchgehen muss…
"Ich habe den Code durchzugehen" – ein paar Tippfehler dort – versuchen Sie, uns etwas mit dem Bild me-after-way-too-much-beer zu sagen, haha?
Diese W3C-Spezifikation besagt, dass
img-Elementen *immer* einalt-Attribut gegeben werden sollte, zusammen mit einer Liste, wann das Attribut einen Wert erhalten "muss". Wenn es wie von Ihnen beschrieben verwendet wird, sollte der alternative Text nicht leer sein, was es einfach machen würde, sowohl den Inhalt des Bildes zu dokumentieren als auch ihn später zu ermitteln.Es ist interessant, dass dies heute in meinem RSS-Feed auftauchte. Ich habe gerade die Optionen abgewogen, Data-URIs für Fotos in hCards zu verwenden.
Dies ist sehr nützlich für kleine Bilder, z. B. Icons, für mobile Versionen von Seiten
Sie sollten dies nur für Elemente auf jeder Seite oder den am häufigsten verwendeten Seiten verwenden. Wenn Sie dies nicht tun, werden die Benutzer die "Bilder" laden, auch wenn sie es nicht müssen.
Weitere Erläuterungen zu Data-URIs finden Sie auf dieser Seite: http://www.nczonline.net/blog/2009/10/27/data-uris-explained/
Ich kann ehrlich sagen, dass ich nicht wusste, dass das möglich ist. Bei der Geschwindigkeit des Webs heute und mit einem bereits gut gestalteten und codierten Design ist dies sicherlich nicht notwendig. Vielleicht bin ich ignorant, aber ich sehe nicht, wie das in der Realität viel ausmachen wird.
Fairerweise gesagt, für die Implementierung und die Demonstration, wie es funktioniert. Sie überraschen mich immer mit Ihrer Codierung.
Danke.
Wenn das gut wäre, wäre es gängige Praxis
wie würden Sie IE6 dann erklären?
David Desandro hat ein tolles Tool zum Erstellen von Data-URIs mit dem <canvas>-Element. Er empfiehlt, das Canvas zu verwenden, um Grafiken prozedural zu generieren und dann die URI direkt in CSS einzufügen. Das ist großartig für Prototyping, wenn man mit Grafikprogrammierung vertraut ist.
Was ist mit dem Cache? Wenn Sie auf ein Bild verweisen, wird dieses einmal geladen, und wann immer Sie auf dieser Website surfen, laden Sie das Bild aus dem Cache. Wenn Sie es in HTML "hartcodieren", wird es jedes Mal geladen... (viel mehr Traffic und langsamer)
Idealerweise würden Sie dies in ein externes Stylesheet hartkodieren, nicht in HTML, damit es immer noch zwischengespeichert wird.
Ja, Data-URIs sind großartig. Ich benutze sie bei der Entwicklung von iPhone-Web-Apps. Das ist in dieser Situation besonders nützlich, da Sie sich keine Gedanken über IE machen müssen und die App-Zwischenspeicherung einfacher handhaben.
Können Data-URIs in CSS-Sprite-Bildern verwendet werden? Wie macht man das?
Ich sehe keinen Grund, warum nicht, setzen Sie einfach die Hintergrundgrafik auf eine Data-URI und ändern Sie die Positionierung nach Bedarf
Ich frage mich, ob das der Grund ist, warum Apple mir HTML-E-Mails schickt, bei denen die Bilder ohne Probleme angezeigt werden, während ich bei anderen Unternehmen auf "Bilder anzeigen" klicken muss.
Gute Frage! Das ist definitiv eine Erkundung wert.
Das muss es sein. Ich habe mich immer gefragt, wie sie das machen und, wichtiger noch, warum andere Unternehmen nicht dasselbe tun.
Ich habe heute eine E-Mail von Apple erhalten, und sie hat mich aufgefordert, Bilder zu genehmigen....
Beim Erstellen einer HTML-E-Mail können Sie wählen, ob Sie die Bilder einbetten oder nicht. Die Vorteile des Einbettens sind, dass Ihre E-Mail (wahrscheinlich) wie erwartet angezeigt wird. Die Nachteile sind eine größere E-Mail, was ein Problem sein kann, wenn Sie eine Million E-Mails senden. Außerdem verpassen Sie die Nachverfolgungsmöglichkeit, wenn der E-Mail-Client die Bilder von Ihrem Server anfordert.
@andy: Wahrscheinlich haben Sie einmal genehmigt, dass das Herunterladen von Bildern von Apple-Servern "sicher" ist, und Ihr E-Mail-Client merkt sich das.
Das sieht VIEL einfacher aus als das Verweisen auf MIME-Anhänge für eingebettete Bilder.
Wenn Sie sich den Quellcode einer E-Mail mit eingebetteten Bildern ansehen, sieht er ungefähr so aus
und später ist das Bild ein MIME-Anhang mit der passenden ID
------=_NextPart_000_02A7_01CAC9B2.32C8E9F0
Content-Type: image/jpeg;
name="image002.jpg"
Content-Transfer-Encoding: base64
Content-ID
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf...
(dies wurde von Thunderbird generiert, offensichtlich können Sie einfachere cid-Werte verwenden)
Diese Methode liefert bildreiche E-Mails, ohne dass der Benutzer auf "Bilder anzeigen" klicken muss, aber es ist mühsam, sie manuell zu erstellen. Wenn Sie beispielsweise ein Bestellbestätigungsskript schreiben und das Firmenlogo und das Hintergrundbild wünschen, um den Beleg schön aussehen zu lassen, sieht diese Methode VIEL einfacher aus als das Erstellen von MIME-Anhängen.
Danke für den "Trick", Chris!
Das sieht VIEL einfacher aus als das Verweisen auf MIME-Anhänge für eingebettete Bilder.
Wenn Sie sich den Quellcode einer E-Mail mit eingebetteten Bildern ansehen, sieht er ungefähr so aus
<code>
<img width=3D703 height=3D413 =
id=3D"Picture_x0020_10"
src=3D"cid:[email protected]"
</code>
und später ist das Bild ein MIME-Anhang mit der passenden ID
<code>
------=_NextPart_000_02A7_01CAC9B2.32C8E9F0
Content-Type: image/jpeg;
name="image002.jpg"
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf…
</code>
(dies wurde von Thunderbird generiert, offensichtlich können Sie einfachere cid-Werte verwenden)
Diese Methode liefert bildreiche E-Mails, ohne dass der Benutzer auf "Bilder anzeigen" klicken muss, aber es ist mühsam, sie manuell zu erstellen. Wenn Sie beispielsweise ein Bestellbestätigungsskript schreiben und das Firmenlogo und das Hintergrundbild wünschen, um den Beleg schön aussehen zu lassen, sieht diese Methode VIEL einfacher aus als das Erstellen von MIME-Anhängen.
Danke für den "Trick", Chris!
Was für ein toller Punkt, das muss ich jetzt ausprobieren.
Nun, so ähnlich, aber nicht ganz.
Grundsätzlich haben alle E-Mail-Anhänge, einschließlich Bilder, einen Header, der Dinge wie den Inhaltstyp, die Länge, den Zeichensatz (ASCII, UTF-8 oder ein obsoleter Zeichensatz) und die Kodierung des Anhangs (oft Base64 für Binärdateien) angibt. Sie können dem Anhang auch eine Content-ID zuweisen, auf die Sie in Ihrem HTML verweisen können.
<img src="cid:yourContentId" />Natürlich funktioniert das nur in E-Mails und anderen Multipart-Formaten. Ihr HTML ist in diesem Fall nur ein weiterer Anhang. Die Verwendung des cid:-Schemas ist in eigenständigem HTML nicht sinnvoll.
Sie können mit der rechten Maustaste auf die Bilder in den Apple-E-Mails klicken und sehen, ob das der Fall ist.
Was zu einem weiteren guten Punkt führt... Sie können ein Data-URI-Bild nicht einfach per Drag & Drop aus dem Browser speichern (zumindest nicht in Firefox), daher ist es eine rudimentäre Form des Bildschutzes. Sie können jedoch mit der rechten Maustaste speichern/als wählen.
Sie können immer die rechte Maustaste deaktivieren.
Ist das nicht der Grund, warum sie sich selbst zu Ihrem Adressbuch auf Ihrem Mac hinzufügen und Bilder von Leuten in Ihrem Adressbuch automatisch geladen werden?
Das dachte ich... vielleicht aber auch nicht.
Diese Technik wird von Google für die mobile Version von Gmail verwendet. Ändern Sie Ihren User-Agenten zu etwas Mobilem, z. B. iPhone, und gehen Sie zu gmail.com.
Sie verwenden es hauptsächlich für das Google-Logo und das Buzz-Icon, und dies ist nur einer der Tricks, die verwendet werden, um das erstaunliche einzelne HTTP-Anfrage des mobilen Gmail zu ermöglichen.
Chris,
Danke, dass Sie helfen, das Evangelium der Data-URI zu verbreiten!
Zwei Ressourcenlinks, die Sie vielleicht einfügen möchten…
Tolles webbasiertes Tool mit vielen Optionen zum Einbetten von Data-URIs in Stylesheets
http://duris.ru/
Nicholas Zakas' Kommandozeilen-Tool zum Einbetten von Data-URIs in Stylesheets
http://www.nczonline.net/blog/2009/11/03/automatic-data-uri-embedding-in-css-files/
Außerdem habe ich für Neugierige ein paar Beiträge über verschiedene Anwendungsfälle und potenzielle Probleme geschrieben. Ein solcher Beitrag
http://www.ravelrumba.com/blog/data-uris-for-css-images-more-tests-more-questions/
Hey Chris, sorry, wenn das eine dumme Frage ist... aber was bedeuten blaue Hintergründe bei Antworten?
Es bedeutet, dass der Kommentar "hervorgehoben" ist, weil ich ihn für besonders interessant hielt. Dieser Stil wird vielleicht nicht für immer so bleiben... Ich möchte irgendwann etwas Cooleres damit machen...
Ein Goldstern wäre sinnvoller.
Ziemlich cool! Zitieren Sie mich nicht darauf, aber ich glaube, diese Methode hat einige Probleme mit IE und HTTPS-Anfragen. Aus irgendeinem Grund erscheint der Dialog "Einige Elemente auf dieser Seite sind unsicher", wenn die Kodierung für Bilder verwendet wird.
Ich könnte mich irren und es könnte nur für IE7 gelten.
1. Semantischer Inhalt: unwichtig also, heh.
2. SVG – eine noch bessere Idee als XHTML: Gewöhnen Sie sich daran, es zu verwenden.
3. Data-URI: Warum verwenden, wenn Ihnen jetzt geraten wird, CSS und JS zu externalisieren?
Wenn eine große Datei die Antwort ist, dann müssen wir ein System einrichten
– Entwickeln Sie mit Paradigmen wie: externe CSS und JS, semantischer Inhalt und so weiter.
– Bereitstellen im Java-Applet-Stil: JAR, WAR
oder
– Verwenden Sie Tools, um all diesen Inhalt zu kombinieren und eine fette Datei bereitzustellen.
Aber auf diese Weise treten wir von einer beschrifteten und interpretierten Sprache weg. Auf dem Weg zur Umarmung einer Welt von Abhängigkeiten.
Nein, das ist nicht K.I.S.S. Baby.
[…]
Der Inhalt einer MHTML-Datei wird wie eine HTML-E-Mail-Nachricht mit dem MIME-Typ multipart/related kodiert. Der erste Teil der Datei ist normalerweise kodiertes HTML; nachfolgende Teile sind zusätzliche Ressourcen, die durch ihre ursprünglichen URLs identifiziert und in Base64 kodiert sind. Dieses Format wird manchmal als MHT bezeichnet, nach der Dateiendung .mht, die solche Dateien standardmäßig von Microsoft Word, Internet Explorer oder Opera erhalten. MHTML ist ein vorgeschlagener Standard, der 1999 in einer überarbeiteten Ausgabe als RFC 2557 zirkuliert wurde.
[…]
Das .mht-Format wurde 1999 mit Internet Explorer 5 eingeführt. [1] Das Speichern in diesem Format ermöglicht es Benutzern, eine Webseite und ihre Ressourcen als einzelne MHTML-Datei namens "Web Archive" zu speichern, wobei alle Bilder und verknüpften Dateien als eine einzige Einheit gespeichert werden. Es kann jedoch sein, dass bestimmte komplexe Webseiten nicht korrekt gespeichert werden können, insbesondere solche, die Skripte enthalten.
Also zurück zum Erstellen von Webseiten in Word! Hahaha.
Cool! Mit Python können Sie wie folgt kodieren
Nun, Base64-Bilder werden in IE7 angezeigt, wenn sie über ein Stylesheet geladen werden (zumindest bei mir)
NVM, ich habe in IE8 mit IE7-Engine getestet…
Ein weiteres gutes Beispiel dafür, dass IE8 im IE7-Modus nicht IE7 ist.
In der Tat, ich werde mich nicht darauf verlassen, nie wieder. IETest == IE7, also ist es gut.
Für IE7 können Sie jedoch ein PHP-Skript verwenden, um die URI-Daten zu übergeben und es zum Laufen zu bringen. Bis zu einem gewissen Grad etwas mühsam, aber es ist besser als gar keine Lösung.
Die automatische PHP-Encoding-Technik ist sehr cool, vielleicht werde ich sie eines Tages für etwas verwenden.
Was IE betrifft, können Sie "nur für IE-Divs" in bedingten Kommentaren für verschiedene Versionen erstellen, dann können Sie in Ihrem CSS auf beide Bilder verweisen.
Also so etwas wie
#IE6 .sel, #IE7 .sel { background: original img; }
.sel { background: encoded img; }
Oh, und es wäre gut, auf die Spezifität zu achten, damit Ihre IE-Regeln nicht mit dem kodierten Bild überschrieben werden.
Schön!
:)
Um jegliche Art von Internet Explorer kümmere ich mich nicht. Ich glaube, die Leute sollten aufhören, die Dinge für IE zum Laufen zu bringen.
Sie überprüfen einfach die Browserstatistiken auf w3c. Bitte, seien Sie ein Mann, studieren Sie und lernen Sie, wie man "Nein" zu den Kunden sagt.
Jetzt sieht IE9 sehr gut aus, endlich hat Microsoft begonnen, besser mit Webstandards zusammenzuarbeiten.
Beste Grüße,
Wirklich?
Erinnert mich an diesen Werbespot
Lassen Sie uns zuerst sehen, wie IE9 in der endgültigen Version sein wird. Setzen Sie Ihre Hoffnungen nicht zu hoch.
Und außerdem, was versucht Microsoft überhaupt?
Die Leute, die zu ahnungslos sind, um auf einen besseren Nicht-IE-Browser zu aktualisieren, werden auch nicht auf IE9 aktualisieren.
Investieren Sie in einen guten Browser mit einer soliden Grundlage und der als gut bekannt ist. Wie die WebKit-Engine in Safari oder Chrome.
Einfach... machen Sie es fertig, Microsoft, es ist vorbei; machen Sie sich wieder an die Arbeit.
Ich denke hier einfach laut nach, aber wäre es nicht cool, so etwas wie if()-Anweisungen damit zu machen? Zum Beispiel, wenn der Großteil eines Bildes blau ist, dann sollte der Hintergrund dieser Seite auch blau sein usw. Wahrscheinlich unrealistisch, aber wenn es eine Art Interpreter gäbe, könnte ich mir wirklich interessante Möglichkeiten vorstellen.
Ich mag deine Denkweise, auch wenn sie überhaupt nichts mit dem Thema zu tun hat :)
So etwas sollte mit Canvas und der Funktion getImageData() möglich sein. Man könnte sie verwenden, um die durchschnittliche Farbe eines Bildes zu ermitteln und dann den Hintergrund auf diese Farbe zu setzen. Man könnte sogar die Farben jedes Bildes in einer Bildergalerie mitteln und dann programmatisch eine Farbpalette bestimmen, die sie am besten ergänzt.
Es würde in IE nicht funktionieren, aber vielleicht in IE9, wenn sie auf den Canvas-Zug aufspringen.
Persönlich gefällt mir das nicht.
#1: Es ist hässlich. Ich weiß, das ist kein starkes Argument und wahrscheinlich ziemlich albern, aber ich finde es hässlich und möchte meinen Code nicht so „beschmutzen“.
#2: Man packt Inhalt direkt in die CSS-Datei. Zugegeben, das ist nicht viel anders als die Angabe einer Datei (was auch bedeutet, Inhalt in CSS zu packen, und ich sehe keinen Weg darum herum), aber es stört mich trotzdem. Wiederum ist es wahrscheinlich ein alberner Grund, aber es fühlt sich für mich falsch an.
#3: Wir alle wollen, dass unsere Seiten so schnell wie möglich sind. Ich gehe viele Umwege, um die Geschwindigkeit meiner Seiten zu verbessern. Aber es ist auch möglich, es zu übertreiben. Das ist eine gute Technik, die man kennen sollte, aber ich habe sie immer als übertrieben angesehen.
Ich frage mich, ob das für die Entwicklung benutzerdefinierter Facebook-Seiten hilfreich wäre. Man muss deren eigenen „FBML“-Editor verwenden, der wie HTML funktioniert.
Ich schätze, das ist nützlich für Handys (sie haben keine schnelle Verbindung) und für E-Mails (sie erlauben externe Bilder nicht automatisch)
aber für normale Websites ist es völlig übertrieben
vielleicht ist es auch gut, um seine Bilder zu schützen… damit sie nicht kopiert werden können.
Okay, offensichtlich können sie kopiert werden, aber sie können nicht auf deine Seite verweisen, sodass deine Seite nicht unter Bandbreitenproblemen leidet.
Die Hauptidee hier ist, dass die Bilder automatisch mit der CSS/HTML-Datei gecached werden und keine zusätzliche HTTP-Anfrage erfordern.
Sehr interessante Technik, aber ich bin ziemlich sicher, dass es für normale Websites übertrieben ist. Die Internetverbindung ist heute für die breite Bevölkerung fortschrittlich genug, um ein Bild einmal zu laden (und es später sowieso zu cachen).
Könnte gut für Mobilfunk-/E-Mail-Websites sein, bei denen externe Bilder Probleme verursachen könnten.
Vergessen Sie aber nicht, dass Sie wertvolle Statistiken verlieren könnten, indem Sie Bilder nicht mit Ihrem Host verknüpfen.
Es ist schön, dass neue Techniken vorgestellt werden, aber was ist mit Semantik? Ist nicht img = Bild und nicht der Hash gemeint?
Ich bin kein Hardcore-Semantik-Typ und versuche oft, den einfachsten Weg für mich zu finden, aber der Code ist definitiv besser lesbar mit echten Bildern als mit diesem Hash-Ding. Wir sollten immer bedenken, dass unser Code vielleicht eines Tages von jemand anderem modifiziert wird.
Egal wie schnell Seiten mit diesem TRICK geladen werden, ich werde trotzdem empfehlen, echte Bilder zu verwenden.
Neue Techniken? Aus dem Jahr 1999?
Cool, aber Mann, das ist übertrieben.
Ich glaube, ich habe nur die Kommas verstanden
Die Technik ist cool, aber sie hat sich nie durchgesetzt (1999) und ist daher im Grunde eine tote Technologie. Wahrscheinlich, weil sich alle Sorgen über Pufferüberläufe und Internetviren machten. Sie wird nur von einigen Browsern & E-Mail-Clients unterstützt.
Wenn IE8 sie unterstützt, ist das schön, aber 32K werden nicht viel mehr als ein paar CSS-Dekorationen bewirken.
Ich bin vor ein paar Wochen auf Daten-URIs gestoßen, als ich die Ausgabe eines Windows ActiveX-Steuerelements in etwas umwandeln musste, das ich per E-Mail an Kunden senden konnte.
Nach einigem Testen entschieden wir uns, die Daten-URIs einfach in MIME-Erweiterungen umzuwandeln (kinderleicht!)
Ich stimme zu. Die Datenkodierung ist keine gute Methode, um Ihre Bilder auf Ihrer Website zu verwalten.
Also habe ich ein Dienstprogramm geschrieben, das meine CSS-Dateien öffnet, die Bildreferenzen findet und sie dann Base64-kodiert. Dann gebe ich eine myprodversion.css aus. (Ich füge auch ein bisschen Minifizierung hinzu) (Ich werde das eines Tages in meinen Build-Prozess integrieren und vielleicht ein VS-Plugin)
Der Nachteil ist, dass meine CSS-Dateien groß werden, aber die gute Nachricht ist, dass meine Webserver (und das sollte meiner Meinung nach inzwischen die Norm sein) die Ausgabe an den Client-Browser komprimieren und Text sehr gut komprimiert, während Bilder nicht.
Insgesamt ergibt sich weniger HTTP-Anfragen pro Seite (sehr gut für die Leistung) und eine geringere Gesamt-Downloadgröße.
Es gibt Einschränkungen und es ist nicht immer die erste Wahl. Aber es funktioniert für mich gut auf einer Website, bei der die Optimierung der Leistung sehr wichtig war.
Komprimierung von Daten durch Webserver ist mir noch nie in den Sinn gekommen.
Ich sollte sagen, dass es am Ende im Protokollstapel und nicht in den Funktionen des Webservers liegen sollte.
Auf diese Weise wäre es meiner Meinung nach effektiv und allgemein anerkannt.
Bilder hingegen sind bereits komprimiert (es sei denn, Sie verwenden *.bmp :))
Persönlich hätte ich das Base64-Bilder genannt und nicht Data URIs…
Ich habe diese Technik jedenfalls bei der Erstellung des markItUp! für Greasemonkey Skripts verwendet. Es gibt keine andere Möglichkeit, Bilder in einem Greasemonkey-Skript einzubetten, und ich wollte die Bilder nicht hosten müssen (die andere Leute aufrufen würden, wenn sie das Skript verwenden). Die Verwendung von Base64-Bildern war die perfekte Lösung.
Ich habe es noch nicht auf einer Website verwendet – ich habe mich immer gefragt, warum es nicht mehr verwendet wurde und ob es Nachteile gibt.
Sehr nett und einfach. Ich habe gerade nach so etwas gesucht
Danke fürs Teilen
Ich habe ein kleines Dienstprogramm zum Erstellen von Data-URIs für ein Favicon-Bild erstellt. http://bit.ly/a9VjTX
Für alle, die nach einer einfachen Möglichkeit suchen, Data-URIs automatisch in eine CSS-Datei einzubetten, schauen Sie sich http://datauri.net an.
Es unterstützt Drag-and-Drop, mehrere Dateien und automatische CSS-Generierung.
Großartig. Das ist wirklich ein cooler Trick und gut vorgestellt.
Danke.
Ist das besser als Sprite-Bilder?
Ich benutze http://base64image.org, um das Bild in Base64 zu konvertieren