Jeder weiß, wie man einen favicon.ico-Link in HTML einrichtet:
<link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon">
Aber ich finde es einfach albern, dass Sie für ein winziges Mehrbyte-Symbol noch eine weitere HTTP-Anfrage benötigen . Also fragte ich mich, wie ich dieses Image zu einem Teil eines Sprites machen könnte (z. B. background-position=0px -200px;
), um diese wertvolle HTTP-Anfrage zu beschleunigen und zu speichern. Wie kann ich dies mit meinem Logo und anderen Kunstwerken in ein vorhandenes Sprite-Bild integrieren?
Der Roboter, auf den favicon.ico
Artikel 31 in der Wasserfallgrafik zeigt, ist mein Haustier ZAM. Er ist normalerweise glücklicher und hat einen guten Grund, mich wissen zu lassen, dass es Zeit für einige kreative Upgrades im Web ist, obwohl er und ich uns nicht über sein Outfit einig sind, was ich heute für ein bisschen albern halte ...
data:
Werten für Bilder und Skripten inline einfügen .Antworten:
Eine geringfügige Verbesserung der Antwort von @ yc besteht darin, das base64-codierte Favicon aus einer JavaScript-Datei zu injizieren, die normalerweise ohnehin verwendet und zwischengespeichert wird, und das Standardverhalten des Browsers beim Anfordern zu unterdrücken,
favicon.ico
indem ihm eine Daten-URI in das entsprechendemeta
Tag eingegeben wird.Diese Technik vermeidet die zusätzliche http-Anforderung und funktioniert nachweislich in neueren Versionen von Chrome, Firefox und Opera unter Windows 7. Sie scheint jedoch zumindest in Internet Explorer 9 nicht zu funktionieren.
index.html
script.js
Demo: turi.co/up/favicon.html
quelle
HTTP Headers Response
meiner .ico-Datei haben fast die gleiche Größe wie mein Symbol !! Wie gefällt dir das?Ich denke, dass dies größtenteils nicht zu einer weiteren HTTP-Anforderung führt, da diese normalerweise nach dem ersten Zugriff im Cache des Browsers gespeichert werden.
Dies ist tatsächlich effizienter als jede der vorgeschlagenen "Lösungen".
quelle
Sie können einen Daten-URI ausprobieren. Keine HTTP-Anfrage!
Wenn Ihre Seiten nicht statisch zwischengespeichert sind, kann Ihr Favicon nicht zwischengespeichert werden. Abhängig von der Größe Ihres Favicon-Bildes kann Ihr Quellcode dadurch aufgebläht werden.
Daten-URI-Favoriten scheinen in den meisten modernen Browsern zu funktionieren. Ich habe es in neueren Versionen von Chrome, Firefox und Safari auf einem Mac. Scheint im Internet Explorer und möglicherweise in einigen Versionen von Opera nicht zu funktionieren.
Wenn Sie sich Sorgen um den alten Internet Explorer machen (und dies sollten Sie heutzutage wahrscheinlich nicht sein), können Sie einen bedingten Kommentar zum Internet Explorer einfügen, der die eigentliche Datei favicon.ico auf herkömmliche Weise lädt, da dies anscheinend bei älteren Internet Explorer nicht der Fall ist unterstützt Daten-URI-Favicons
Sie können auch einfach das Favicon einer anderen beliebten Site verwenden, deren Favicon wahrscheinlich zwischengespeichert wird
http://google.com/favicon.ico
, damit es aus dem Cache bereitgestellt wird.Wie Kommentatoren bereits betont haben, bedeutet dies nicht , dass Sie dies tun sollten, da einige Browser favicon.ico unabhängig von den von uns entwickelten Tricks anfordern. Der Aufwand, den Sie auf diese Weise einsparen würden, wäre im Vergleich zu den Einsparungen, die Sie durch das Zippen, das Verwenden von in Zukunft abgelaufenen Headern für statischen Inhalt, das Minimieren von JavaScript-Dateien, das Einfügen von Hintergrundbildern in Sprites oder Daten-URIs erzielen würden, winzig , statische Dateien von einem CDN usw. bereitstellen
quelle
<link rel>
über JavaScript perfekt auf das Element im Browser zugreifen, das sollte möglich sein. Ich habe sogar ein Spiel gesehen , das auf diese Weise programmiert wurde ... aber es scheint auch nicht im IE zu funktionieren, und es wird wahrscheinlich nicht die Standard-/favicon.ico
Suchanforderung verhindern/favicon.ico
an, um sie blind zu finden. Wenn Sie also das Favicon weglassen<link>
(um es später über Javascript hinzuzufügen), werden Sie die Dinge wahrscheinlich nur noch schlimmer machen.Sie könnten base64-codiertes Favicon verwenden, wie:
quelle
Ich habe auf dieser Seite eine interessante Lösung gefunden . Es ist deutsch, aber Sie werden den Code verstehen können.
Sie fügen die base64-Daten des Symbols in ein externes Stylesheet ein, damit es zwischengespeichert wird. Im Kopf Ihrer Website müssen Sie das Favicon mit einer ID definieren, und das Favicon wird
background-image
im Stylesheet für diese ID als festgelegt.und das HTML
quelle
Guter Punkt und nette Idee, aber unmöglich. Ein Favicon muss eine einzelne, separate Ressource sein. Es gibt keine Möglichkeit, es mit einer anderen Bilddatei zu kombinieren.
quelle
/favicon.ico
Browser automatisch nachsehen. Jetzt kommt die wirklich schlechte Nachricht: Wenn das Favicon NICHT vorhanden ist, bedeutet dies eine Fehlerstrafe 404, die ebenfalls eine leichte Verzögerung verursacht !! Es scheint kein Entkommen aus diesem Favicon-Dungeon zu geben. Sie sind so winzig, aber so mächtig ... verdammt :)Ist es wirklich wichtig?
Viele Browser laden das Favicon mit niedriger Priorität, damit es das Laden der Seite ohnehin nicht blockiert. Ja, es ist eine zusätzliche Anforderung, aber es befindet sich nicht auf einem kritischen Pfad.
Die akzeptierte Lösung ist schrecklich, da bis zum Abrufen und Ausführen des JS alle unten aufgeführten DOM-Elemente für das Rendern blockiert werden und die Anzahl der Anforderungen nicht verringert wird!
quelle
Die richtige Lösung ist die Verwendung von HTTP-Pipelining .
Es ist erforderlich, dass Server dies unterstützen, aber nicht unbedingt teilnehmen.
Viele Browser-Clients tun dies nicht, wenn sie sollten.
Ich würde empfehlen, dass Sie versuchen, das Pipelining in Firefox zu aktivieren und es dort zu versuchen, oder einfach Opera (shudder) verwenden.
quelle
Keine wirkliche Antwort auf die Frage, aber nur um die Antworten von Marcel und Yahoo zu ergänzen, biete ich eine elegante Lösung für das 404-Favicon-Problem.
Da einige Apps und Browser nicht auf favicon.com prüfen und das Symbol nicht im Site-Stammverzeichnis gefunden wird, können Sie einfach auf die Anfrage mit dem 204- Antwortheader antworten .
Apache Beispiele:
Apache Option eins (und mein Favorit), einfacher Einzeiler in Ihren .htacces oder .conf:
Apache Option zwei:
Zur weiteren Lektüre gibt es einen schönen Blog-Beitrag von Stoyan Stefanov unter http://www.phpied.com/204-no-content/
quelle
Es ist eine großartige Idee, aber wenn Google es nicht auf seiner Homepage getan hat, kann ich wetten, dass es (derzeit) nicht möglich ist
quelle
Es tut mir leid, aber Sie können das Favicon nicht mit einer anderen Ressource kombinieren.
Dies bedeutet, dass Sie grundsätzlich zwei Möglichkeiten haben:
Wenn Sie mit der Tatsache vertraut sind, dass Ihre Site kein Favicon hat, können Sie nur
href
auf eine Ressource ohne Symbole verweisen, die bereits geladen wird (z. B. ein Stylesheet, eine Skriptdatei oder sogar eine Ressource, die vom Vorabrufen profitiert .)(Meine kurzen Tests zeigen, dass dies in den meisten, wenn nicht allen gängigen Browsern funktioniert.)
Akzeptieren Sie die zusätzliche HTTP-Anforderung und stellen Sie sicher, dass in Ihrer Favicon-Datei aggressive HTTP-Cache-Steuerungsheader festgelegt sind.
(Wenn Sie andere Websites unter Ihrer Kontrolle haben, können Sie sogar das Favicon für diese Website - zusammen mit anderen statischen Ressourcen - vorab laden.)
PS Kreative Lösungen, die nicht funktionieren :
<link>
Elements (wie vom Benutzer @yc vorgeschlagen) wird die Situation wahrscheinlich nur verschlimmern - indem es zu zwei HTTP-Anforderungen führt.quelle
Sie können 8-Bit-PNG anstelle des ICO-Formats für einen noch geringeren Datenbedarf verwenden. Sie müssen lediglich "data: image / png" anstelle von "data: image / x-icon" verwenden. MIME-Header:
Das Attribut "Typ" kann "Bild / PNG" oder "Bild / X-Symbol" sein, beide funktionieren für mich.
Sie können ICO mit gimp in 8-Bit-PNG konvertieren oder konvertieren:
und codieren Sie die PNG-Binärdatei mit dem Befehl base64 in den Base64-String:
quelle
Hier ist der einfachste Weg:
Welches Symbol repräsentiert es? Antworte und stimme unten zu!
quelle
Killerlösung im Jahr 2020
Diese Lösung kommt notwendigerweise neun Jahre, nachdem die Frage ursprünglich gestellt wurde, da die meisten Browser bis vor kurzem nicht in der Lage waren, Favoriten im
.svg
Format zu verarbeiten.Das ist nicht mehr der Fall.
Siehe: https://caniuse.com/#feat=link-icon-svg
1) Wählen Sie SVG als Favicon-Format
Derzeit , im Juni 2020, können diese Browser SVG-Favicons verarbeiten :
Beachten Sie, dass diese Browser immer noch nicht:
Vor diesem Hintergrund können wir ein SVG-Favicon sicher verwenden .
2) Präsentieren Sie die SVG als Daten-URI
Das Hauptziel hierbei ist die Vermeidung von HTTP-Anfragen.
Wie andere Lösungen bereits erwähnt haben, besteht eine ziemlich clevere Möglichkeit darin, einen Daten-URI anstelle einer HTTP-URL zu verwenden .
SVGs (insbesondere kleine SVGs) eignen sich perfekt für Daten-URIs, da letztere einfach Klartext sind (mit potenziell mehrdeutigen Zeichen prozentual codiert) und erstere als XML als lange Klartextzeile (mit einem Hauch von etwas) ausgeschrieben werden können von Prozentcodes) unglaublich einfach.
3) Die gesamte SVG ist ein Emoji
Im Dezember 2019 erkannte Leandro Linares als einer der Ersten, dass es sich lohnt, zu experimentieren, um herauszufinden, ob ein Favicon aus einem Emoji erstellt werden kann, seit Chrome zusammen mit Firefox SVG Favicons unterstützt.
https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/
Linares Vermutung war richtig.
Einige Monate später (März 2020) erkannte Code Pirate Lea Verou dasselbe:
https://twitter.com/leaverou/status/1241619866475474946
Und Favicons waren nie wieder die gleichen.
4) Implementieren Sie die Lösung selbst:
Hier ist eine einfache SVG:
Und hier ist das gleiche SVG wie ein Daten-URI :
Und zum Schluss noch die Daten-URI als Favicon:
5) Weitere Tricks
Da das Favicon ein SVG ist, können beliebig viele Filtereffekte (sowohl SVG als auch CSS) darauf angewendet werden.
Zum Beispiel können wir neben dem obigen White Unicorn Favicon ganz einfach ein Black Unicorn Favicon erstellen, indem wir den Filter anwenden:
Schwarzes Einhorn Favicon:
quelle