Tout le monde sait comment configurer un lien favicon.ico en HTML:
<link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon">
Mais je pense qu'il est tout simplement stupide que pour une petite icône de plusieurs octets, vous ayez besoin d' une autre requête HTTP . Je me suis donc demandé comment faire pour que cette image fasse partie d'un sprite (par exemple background-position=0px -200px;
) afin d'accélérer et d'enregistrer cette précieuse requête HTTP. Comment puis-je intégrer cela dans une image de sprite existante avec mon logo et d'autres œuvres d'art?
Le robot pointant vers favicon.ico
, l'article numéro 31 sur le graphique en cascade, est mon animal de compagnie ZAM. Il est généralement plus heureux et il a un bon point à me faire savoir qu'il est temps pour quelques mises à jour créatives sur le Web, même si lui et moi ne sommes pas d'accord sur sa tenue, ce qui je pense est un peu idiot aujourd'hui ...
data:
valeurs pour les images et les scripts en ligne.Réponses:
Une amélioration mineure de la réponse de @ yc consiste à injecter le favicon encodé en base64 à partir d'un fichier JavaScript qui serait normalement utilisé et mis en cache de toute façon, et à supprimer également le comportement standard du navigateur consistant à demander
favicon.ico
en lui fournissant un URI de données dans lameta
balise appropriée .Cette technique évite la demande http supplémentaire et est confirmée pour fonctionner dans les versions récentes de Chrome, Firefox et Opera sous Windows 7. Cependant, elle ne semble pas fonctionner au moins dans Internet Explorer 9.
index.html
script.js
Démo: turi.co/up/favicon.html
la source
HTTP Headers Response
fichier .ico ont presque la même taille que mon icône !! Comment ça vous plait?Je pense que dans la plupart des cas, cela ne se traduit pas par une autre requête HTTP car celles-ci sont généralement vidées dans le cache du navigateur après le premier accès.
C'est en fait plus efficace que n'importe laquelle des "solutions" proposées.
la source
Vous pouvez essayer un URI de données. Pas de requête HTTP!
À moins que vos pages aient une mise en cache statique, votre favicon ne pourra pas être mis en cache, et en fonction de la taille de votre image favicon, votre code source pourrait devenir un peu gonflé en conséquence.
Les favicons URI de données semblent fonctionner dans la plupart des navigateurs modernes; Je le fais fonctionner dans les versions récentes de Chrome, Firefox et Safari sur Mac. Ne semble pas fonctionner dans Internet Explorer et peut-être certaines versions d'Opera.
Si vous vous inquiétez de l'ancien IE (et vous ne devriez probablement pas l'être de nos jours), vous pouvez inclure un commentaire conditionnel IE qui chargerait le favicon.ico réel de la manière traditionnelle, car il semble que l'ancien Internet Explorer ne le fasse pas. prise en charge des favicons URI de données
Vous pouvez également simplement utiliser le favicon d'un autre site populaire qui est susceptible d'avoir son favicon mis en cache, comme
http://google.com/favicon.ico
, afin qu'il soit servi à partir du cache.Comme l'ont souligné les commentateurs, ce n'est pas parce que vous pouvez le faire que vous le devriez, car certains navigateurs demanderont favicon.ico quelles que soient les astuces que nous concevons. La quantité de frais généraux que vous économiseriez en faisant cela serait minuscule par rapport aux économies que vous obtiendriez en faisant des choses comme gzipping, en utilisant des en-têtes expirant très loin pour du contenu statique, en réduisant les fichiers JavaScript, en mettant des images d'arrière-plan dans des sprites ou des URI de données , servant des fichiers statiques à partir d'un CDN, etc.
la source
<link rel>
élément dans le navigateur via JavaScript, cela devrait être possible. J'ai même vu un jeu programmé de cette façon ... mais il ne semble pas non plus fonctionner dans IE, et cela n'empêchera probablement pas la/favicon.ico
demande de recherche par défaut/favicon.ico
dans une tentative aveugle de la localiser. Donc, si vous omettez le favicon<link>
(pour l'ajouter plus tard via Javascript), vous ne faites qu'empirer les choses.Vous pouvez utiliser un favicon encodé en base64, comme:
la source
J'ai trouvé une solution intéressante sur cette page . Il est allemand mais vous pourrez comprendre le code.
Vous placez les données base64 de l'icône dans une feuille de style externe, donc elles seront mises en cache. Dans la tête de votre site Web, vous devez définir le favicon avec un identifiant et le favicon est défini comme
background-image
dans la feuille de style pour cet identifiant.et le html
la source
Bon point et bonne idée, mais impossible. Un favicon doit être une ressource unique et distincte. Il n'y a aucun moyen de le combiner avec un autre fichier image.
la source
/favicon.ico
c'est là que les navigateurs vont chercher automatiquement. Maintenant vient la vraie mauvaise nouvelle: si le favicon est NON existant, cela signifie une pénalité d'erreur 404 qui entraînera également un léger retard !! Il ne semble pas possible de s'échapper de ce donjon de favicon. Ils sont si minuscules mais oh si puissants ... bon sang :)Est-ce que c'est vraiment important?
De nombreux navigateurs chargent le favicon comme une priorité faible afin qu'il ne bloque pas la charge de la page de toute façon, donc oui, c'est une demande supplémentaire mais ce n'est sur aucun chemin critique.
La solution acceptée est horrible car jusqu'à ce que le JS ait été récupéré et exécuté, tous les éléments DOM ci-dessous seront bloqués lors du rendu et cela ne réduira pas le nombre de demandes!
la source
La bonne solution consiste à utiliser le pipelining HTTP .
Il est nécessaire que les serveurs le prennent en charge, mais pas nécessairement participer.
De nombreux clients de navigateur ne le font pas quand ils le devraient.
Je vous recommande d'essayer d'activer le pipelining dans Firefox et de l'essayer là-bas, ou d'utiliser simplement Opera (shudder).
la source
Pas vraiment une réponse à la question mais simplement pour compléter les réponses données par Marcel et yahelc, j'offre une solution élégante au problème du favicon 404.
Parce que certaines applications et navigateurs et ainsi de suite recherchent un favicon.com et si l'icône ne se trouve pas à la racine du site, vous pouvez simplement répondre à la demande avec la réponse 204 tête de .
Exemples Apache:
Apache option un (et mon préféré), simple doublure dans vos .htacces ou .conf:
Apache option deux:
Pour plus de lecture, il y a un bel article de blog de Stoyan Stefanov sur http://www.phpied.com/204-no-content/
la source
Je suis désolé, mais vous ne pouvez pas combiner le favicon avec une autre ressource.
Cela signifie que vous avez essentiellement deux options:
Si vous êtes à l'aise avec le fait que votre site n'ait pas de favicon - vous pouvez simplement avoir le
href
point sur une ressource non icône qui est déjà en cours de chargement (par exemple, une feuille de style, un fichier de script ou même une ressource qui bénéficie d'être préchargée .)(Mes brefs tests indiquent que cela fonctionne sur la plupart, sinon la totalité, des principaux navigateurs.)
Acceptez la demande HTTP supplémentaire et assurez-vous simplement que votre fichier favicon possède des en-têtes de contrôle de cache HTTP agressifs.
(Si vous avez d'autres sites Web sous votre contrôle, vous pouvez même les faire précharger sournoisement le favicon de ce site Web - ainsi que d'autres ressources statiques.)
Solutions créatives PS qui ne fonctionneront pas :
<link>
élément favicon (comme suggéré par l'utilisateur @yc) ne fera qu'empirer les choses - en entraînant deux requêtes HTTP.la source
C'est une excellente idée, mais si Google ne l'a pas fait sur sa page d'accueil, je parie que cela ne peut pas (actuellement) être fait.
la source
Vous pouvez utiliser un PNG 8 bits au lieu du format ICO pour une empreinte de données encore plus petite. La seule chose que vous devez changer est d'utiliser l'en-tête de type MIME "data: image / png" au lieu de "data: image / x-icon":
L'attribut "type" peut être "image / png" ou "image / x-icon", les deux fonctionnent pour moi.
Vous pouvez convertir ICO en png 8 bits en utilisant gimp ou convertir:
et encoder le binaire PNG en chaîne base64 à l'aide de la commande base64:
la source
Voici le moyen le plus simple:
Quelle icône cela représente? Répondez et votez ci-dessous!
la source
Killer Solution en 2020
Cette solution intervient nécessairement neuf ans après que la question a été posée à l'origine, car jusqu'à assez récemment, la plupart des navigateurs n'étaient pas en mesure de gérer les favicons au
.svg
format.Ce n'est plus le cas.
Voir: https://caniuse.com/#feat=link-icon-svg
1) Choisissez SVG comme format Favicon
À l'heure actuelle, en juin 2020, ces navigateurs peuvent gérer les favicons SVG :
Notez que ces navigateurs ne peuvent toujours pas:
Compte tenu de ce qui précède, nous pouvons utiliser en toute confiance un Favicon SVG .
2) Présentez le SVG comme un URI de données
L'objectif principal ici est d'éviter les requêtes HTTP.
Comme d'autres solutions l'ont mentionné, une façon assez intelligente de le faire est d'utiliser un URI de données plutôt qu'une URL HTTP .
Les SVG (en particulier les petits SVG) se prêtent parfaitement aux URI de données, car ces derniers sont simplement en texte brut (avec tous les caractères potentiellement ambigus codés en pourcentage) et les premiers, étant XML, peuvent être écrits comme une longue ligne de texte en clair (avec une poignée des codes de pourcentage) incroyablement simple.
3) L' ensemble SVG est un Emoji
En décembre 2019, Leandro Linares a été l'un des premiers à réaliser que depuis que Chrome avait rejoint Firefox pour prendre en charge les favicons SVG, il valait la peine d'expérimenter pour voir si un favicon pouvait être créé à partir d'un emoji:
https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/
L'intuition de Linares avait raison.
Quelques mois plus tard (mars 2020), Code Pirate Lea Verou a réalisé la même chose:
https://twitter.com/leaverou/status/1241619866475474946
Et les favicons n'étaient plus jamais les mêmes.
4) Implémenter la solution vous-même:
Voici un SVG simple:
Et voici le même SVG qu'un URI de données :
Et, enfin, voici cet URI de données en tant que Favicon:
5) Plus de trucs
Étant donné que le Favicon est un SVG, un certain nombre d'effets de filtre (SVG et CSS) peuvent lui être appliqués.
Par exemple, à côté du Favicon de licorne blanche ci-dessus, nous pouvons facilement créer un Favicon de licorne noire en appliquant le filtre:
Favicon de licorne noire:
la source