Wszyscy wiedzą, jak skonfigurować link favicon.ico w HTML:
<link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon">
Ale myślę, że to głupie, że dla małej kilku bajtowej ikony potrzebujesz jeszcze jednego żądania HTTP . Zastanawiałem się więc, jak mogę uczynić ten obraz częścią duszka (np. background-position=0px -200px;
), Aby przyspieszyć i zapisać to cenne żądanie HTTP. Jak mogę zamienić to w istniejący obraz duszka z moim logo i innymi dziełami sztuki?
Robot wskazujący na favicon.ico
numer 31 na wykresie wodospadu jest moim zwierzakiem ZAM. Zazwyczaj jest szczęśliwszy i ma rację, mówiąc mi, że nadszedł czas na kilka kreatywnych ulepszeń w Internecie, chociaż on i ja nie zgadzamy się co do jego stroju, który wydaje mi się dziś trochę głupi ...
data:
wartościami obrazów i skryptów.Odpowiedzi:
Niewielkim ulepszeniem odpowiedzi @ yc jest wstrzykiwanie favikonu zakodowanego w base64 z pliku JavaScript, który i tak normalnie byłby używany i buforowany, a także tłumienie standardowego zachowania przeglądarki polegającego na wysyłaniu
favicon.ico
do niego identyfikatora URI danych w odpowiednimmeta
znaczniku.Ta technika pozwala uniknąć dodatkowego żądania HTTP i potwierdzono, że działa w najnowszych wersjach Chrome, Firefox i Opera w systemie Windows 7. Jednak nie działa przynajmniej w Internet Explorerze 9.
index.html
script.js
Demo: turi.co/up/favicon.html
źródło
HTTP Headers Response
moim pliku .ico mają prawie taki sam rozmiar mojej ikony !! Jak ci się to podoba?Myślę, że w większości przypadków nie powoduje to kolejnego żądania HTTP, ponieważ zwykle są one zrzucane do pamięci podręcznej przeglądarki po pierwszym dostępie.
Jest to faktycznie bardziej wydajne niż którekolwiek z proponowanych „rozwiązań”.
źródło
Możesz spróbować URI danych. Brak żądania HTTP!
Jeśli twoje strony nie mają buforowania statycznego, twój favicon nie będzie mógł być buforowany, a w zależności od rozmiaru obrazu favicon, twój kod źródłowy może się w pewnym sensie rozdęć.
Ulubione dane URI wydają się działać w większości nowoczesnych przeglądarek; Mam go działającego w najnowszych wersjach Chrome, Firefox i Safari na komputerze Mac. Wydaje się, że nie działa w przeglądarce Internet Explorer i prawdopodobnie w niektórych wersjach Opery.
Jeśli martwisz się o Old IE (i prawdopodobnie nie powinieneś być w dzisiejszych czasach), możesz dołączyć komentarz warunkowy IE, który załaduje rzeczywisty plik favicon.ico w tradycyjny sposób, ponieważ wydaje się, że starszy Internet Explorer nie obsługa danych URI Favicons
Możesz także po prostu użyć favicon innej popularnej witryny, która prawdopodobnie będzie mieć buforowany favicon, na przykład
http://google.com/favicon.ico
w taki sposób, aby był obsługiwany z pamięci podręcznej.Jak zauważyli komentatorzy, to, że możesz to zrobić, nie oznacza, że powinieneś, ponieważ niektóre przeglądarki wymagają favicon.ico niezależnie od sztuczek, które wymyślimy. Ilość narzutu, który byś zaoszczędził, robiąc to, byłaby niewielka w porównaniu z oszczędnościami, które można uzyskać dzięki robieniu takich rzeczy jak gzipping, używanie w przyszłości nagłówków wygasających dla zawartości statycznej, minimalizowanie plików JavaScript, umieszczanie obrazów tła w duszkach lub URI danych , serwowanie plików statycznych poza CDN itp.
źródło
<link rel>
elementu w przeglądarce za pomocą JavaScript, co powinno być możliwe. Widziałem nawet tak zaprogramowaną grę ... jednak wydaje się, że nie działa ona również w IE i prawdopodobnie nie zapobiegnie domyślnemu/favicon.ico
żądaniu wyszukiwania/favicon.ico
próbując go zlokalizować. Jeśli więc pominiesz favicon<link>
(a później dodasz go przez Javascript), prawdopodobnie pogorszysz sytuację.Możesz użyć favicon w formacie base64, takich jak:
źródło
Znalazłem ciekawe rozwiązanie na tej stronie . To jest niemiecki, ale będziesz w stanie zrozumieć kod.
Umieszczasz dane base64 ikony w zewnętrznym arkuszu stylów, aby był buforowany. W nagłówku witryny musisz zdefiniować favicon za pomocą identyfikatora, a favicon jest ustawiony jako
background-image
aw arkuszu stylów dla tego identyfikatora.i html
źródło
Dobry punkt i fajny pomysł, ale niemożliwy. Favicon musi być pojedynczym, oddzielnym zasobem. Nie ma możliwości połączenia go z innym plikiem obrazu.
źródło
/favicon.ico
których przeglądarki będą automatycznie wyszukiwać. Teraz nadchodzą prawdziwe złe wiadomości: jeśli favicon NIE istnieje, oznacza to karę 404 za błąd, która spowoduje również niewielkie opóźnienie !! Wydaje się, że nie ma ucieczki z tego favicon dungeonu. Są takie małe, ale o tak potężne ... cholera :)Czy to naprawdę ma znaczenie?
Wiele przeglądarek ładuje favicon jako niski priorytet, aby i tak nie blokował ładowania strony, więc tak, jest to dodatkowe żądanie, ale nie jest na żadnej krytycznej ścieżce.
Przyjęte rozwiązanie jest okropne, ponieważ dopóki JS nie zostanie pobrane i wykonane, wszystkie elementy DOM poniżej zostaną zablokowane do renderowania i nie zmniejszy to liczby żądań!
źródło
Właściwym rozwiązaniem jest użycie potokowania HTTP .
Wymagane jest, aby serwery go obsługiwały, ale niekoniecznie partipate.
Wielu klientów przeglądarki tego nie robi, kiedy powinno.
Polecam spróbować włączenia potoku w Firefoksie i wypróbować go tam lub po prostu użyć Opery (wzdrygnąć).
źródło
Naprawdę nie odpowiedź na pytanie, ale po prostu jako uzupełnienie odpowiedzi udzielonych przez Marcela i Yahelca , oferuję eleganckie rozwiązanie problemu 404 favicon.
Ponieważ niektóre aplikacje i przeglądarki nie sprawdzają favicon.com, a jeśli ikona nie znajduje się w katalogu głównym witryny, możesz po prostu odpowiedzieć na żądanie za pomocą nagłówka odpowiedzi 204 .
Przykłady Apache:
Opcja Apache pierwsza (i moja ulubiona), prosta jedna linijka w twoich .htacces lub .conf:
Druga opcja Apache:
Do dalszej lektury jest miły wpis na blogu autorstwa Stoyana Stefanova na stronie http://www.phpied.com/204-no-content/
źródło
To świetny pomysł, ale jeśli Google nie zrobił tego na swojej stronie głównej, założę się, że nie można (obecnie) zrobić
źródło
Przykro mi, ale nie możesz połączyć favicon z innym zasobem.
Oznacza to, że masz zasadniczo dwie opcje:
Jeśli nie masz favikonu w swojej witrynie - możesz mieć na
href
myśli zasób niebędący ikoną, który jest już ładowany (np. Arkusz stylów, plik skryptu lub nawet jakiś zasób, który korzysta z wcześniejszego pobrania .)(Moje krótkie testy wskazują, że działa to w większości, jeśli nie we wszystkich głównych przeglądarkach).
Zaakceptuj dodatkowe żądanie HTTP i upewnij się, że plik favicon ma ustawione agresywne nagłówki HTTP kontrolujące pamięć podręczną.
(Jeśli masz inne witryny pod kontrolą, możesz nawet sprawić, że podstępnie załadują favicon dla tej witryny - wraz z innymi statycznymi zasobami).
Kreatywne rozwiązania PS , które nie będą działać :
<link>
elementu favicon (zgodnie z sugestią użytkownika @yc) prawdopodobnie tylko pogorszy sytuację - powodując dwa żądania HTTP.źródło
Możesz użyć 8-bitowego formatu PNG zamiast formatu ICO, aby uzyskać jeszcze mniejszy ślad danych. Jedyne, co musisz zmienić, to użyć „data: image / png” zamiast „data: image / x-icon” Nagłówek typu MIME:
Atrybut „type” może być „image / png” lub „image / x-icon”, oba działają dla mnie.
Możesz przekonwertować ICO do 8-bitowego png za pomocą gimp lub przekonwertować:
i kodujemy dane binarne PNG do ciągu base64 za pomocą polecenia base64:
źródło
Oto najprostszy sposób:
Jaką ikonę to reprezentuje? Odpowiedz i głosuj poniżej!
źródło
Rozwiązanie Killer w 2020 roku
To rozwiązanie koniecznie pojawia się dziewięć lat po tym, jak pytanie zostało pierwotnie zadane, ponieważ do niedawna większość przeglądarek nie była w stanie obsługiwać ulubionych
.svg
formatów.Tak już nie jest.
Zobacz: https://caniuse.com/#feat=link-icon-svg
1) Wybierz SVG jako format Favicon
Obecnie, w czerwcu 2020 roku, te przeglądarki mogą obsługiwać SVG Favicons :
Pamiętaj, że te przeglądarki nadal nie mogą:
Mając powyższe na uwadze, możemy z pewnością korzystać z SVG Favicon .
2) Przedstaw SVG jako identyfikator URI danych
Głównym celem jest uniknięcie żądań HTTP.
Jak wspomniano w innych rozwiązaniach, całkiem sprytnym sposobem na to jest użycie URI danych zamiast adresu URL HTTP .
Pliki SVG (szczególnie małe pliki SVG) doskonale nadają się do identyfikatorów URI danych, ponieważ ten ostatni jest po prostu tekstem jawnym (z dowolnymi potencjalnie niejednoznacznymi znakami zakodowanymi procentowo), a ten pierwszy, będący XML, może być zapisany jako długa linia tekstu jawnego (z drobnym rozproszeniem) kodów procentowych) niezwykle prosto.
3) Cały plik SVG to emoji
W grudniu 2019 r.Leandro Linares był jednym z pierwszych, którzy zdali sobie sprawę, że odkąd Chrome dołączył do Firefoksa, wspierając SVG Favicons, warto eksperymentować, aby sprawdzić, czy favicon można utworzyć z emoji:
https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/
Przeczucie Linares było słuszne.
Kilka miesięcy później (marzec 2020 r.) Code Pirate Lea Verou zrozumiała to samo:
https://twitter.com/leaverou/status/1241619866475474946
I favikony już nigdy nie były takie same.
4) Samodzielne wdrożenie rozwiązania:
Oto prosty plik SVG:
A oto ten sam plik SVG jak identyfikator URI danych :
I na koniec oto ten identyfikator URI danych jako Favicon:
5) Więcej sztuczek
Ponieważ Favicon jest SVG, można do niego zastosować dowolną liczbę efektów filtrów (zarówno SVG, jak i CSS).
Na przykład, obok Favicon Białego Jednorożca powyżej, możemy łatwo zrobić Favikona Czarnego Jednorożca , stosując filtr:
Favicon Czarnego Jednorożca:
źródło