Semua orang tahu cara mengatur tautan favicon.ico dalam HTML:
<link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon">
Tapi saya pikir itu konyol bahwa untuk ikon beberapa byte kecil Anda memerlukan permintaan HTTP lain . Jadi saya bertanya-tanya, bagaimana saya bisa membuat gambar itu bagian dari sprite (misalnya background-position=0px -200px;
) untuk mempercepat dan menyimpan permintaan HTTP yang berharga. Bagaimana saya bisa menjadikan ini gambar sprite yang ada dengan logo saya dan karya seni lainnya?
Robot yang menunjuk ke favicon.ico
, item nomor 31 pada grafik air terjun, adalah hewan peliharaan saya ZAM. Dia biasanya lebih bahagia dan dia punya poin bagus untuk memberi tahu saya sudah waktunya untuk beberapa peningkatan kreatif di web, meskipun dia dan saya tidak setuju dengan pakaiannya, yang saya pikir agak konyol hari ini ...
data:
nilai untuk gambar, dan skrip sebaris.Jawaban:
Perbaikan kecil untuk jawaban @ yc adalah menyuntikkan favicon yang di-encode base64 dari file JavaScript yang biasanya akan digunakan dan di-cache, dan juga menekan perilaku browser standar meminta
favicon.ico
dengan memasukkan URI data dalammeta
tag yang relevan .Teknik ini menghindari permintaan http tambahan dan dikonfirmasi untuk berfungsi di versi terbaru dari Chrome, Firefox dan Opera di Windows 7. Namun tampaknya tidak berfungsi setidaknya di Internet Explorer 9.
index.html
script.js
Demo: turi.co/up/favicon.html
sumber
HTTP Headers Response
file .ico saya hampir sama dengan ukuran ikon saya !! bagaimana kamu suka itu?Saya pikir sebagian besar tidak menghasilkan permintaan HTTP lain karena ini biasanya dibuang di cache browser setelah akses pertama.
Ini sebenarnya lebih efisien daripada "solusi" yang diajukan.
sumber
Anda dapat mencoba URI data. Tidak ada permintaan HTTP!
Kecuali jika halaman Anda memiliki caching statis, favicon Anda tidak akan bisa di-cache, dan tergantung pada ukuran gambar favicon Anda, kode sumber Anda bisa menjadi bengkak sebagai hasilnya.
Data URI favicons tampaknya berfungsi di sebagian besar browser modern; Saya memilikinya bekerja di versi terbaru dari Chrome, Firefox dan Safari di Mac. Tampaknya tidak berfungsi di Internet Explorer, dan mungkin beberapa versi Opera.
Jika Anda khawatir tentang IE Lama (dan Anda mungkin tidak boleh hari ini), Anda dapat menyertakan komentar bersyarat IE yang akan memuat favicon.ico yang sebenarnya dengan cara tradisional, karena tampaknya Internet Explorer yang lebih lama tidak mendukung Data URI Favicons
Anda juga bisa menggunakan favicon dari situs populer lain yang kemungkinan memiliki favicon di-cache, seperti
http://google.com/favicon.ico
, sehingga disajikan dari cache.Seperti yang ditunjukkan oleh komentator, hanya karena Anda dapat melakukan ini tidak berarti Anda harus melakukannya, karena beberapa browser akan meminta favicon.ico terlepas dari trik yang kami buat. Jumlah overhead yang Anda hemat dengan melakukan hal ini akan sangat kecil dibandingkan dengan penghematan yang Anda dapatkan dari melakukan hal-hal seperti gzipping, menggunakan tajuk kedaluwarsa yang jauh kedaluwarsa untuk konten statis, mengecilkan file JavaScript, menempatkan gambar latar belakang ke dalam sprite atau data URI , menyajikan file statis dari CDN, dll.
sumber
<link rel>
elemen di browser melalui JavaScript, itu harus dimungkinkan. Saya bahkan telah melihat permainan yang diprogram seperti itu ... namun tampaknya juga tidak berfungsi di IE, dan mungkin tidak akan mencegah/favicon.ico
permintaan pencarian standar/favicon.ico
dalam upaya buta untuk menemukannya. Jadi, jika Anda meninggalkan favicon<link>
(untuk menambahkannya nanti melalui Javascript), Anda cenderung memperburuk keadaan.Anda dapat menggunakan favicon yang disandikan base64, seperti:
sumber
Saya menemukan solusi yang menarik di halaman ini . Ini adalah bahasa Jerman tetapi Anda akan dapat memahami kode tersebut.
Anda memasukkan data base64 ikon ke lembar gaya eksternal, sehingga akan di-cache. Di kepala situs web Anda, Anda harus mendefinisikan favicon dengan id dan favicon ditetapkan sebagai
background-image
dalam stylesheet untuk id itu.dan html
sumber
Poin bagus dan ide bagus, tapi tidak mungkin. Favicon perlu menjadi sumber daya tunggal yang terpisah. Tidak ada cara untuk menggabungkannya dengan file gambar lain.
sumber
/favicon.ico
sinilah browser akan otomatis terlihat. Sekarang datang berita buruk yang nyata: Jika favicon NON ada, itu berarti kesalahan 404 penalti yang akan menyebabkan sedikit penundaan juga !! Sepertinya tidak ada yang melarikan diri dari penjara bawah tanah favicon ini. Mereka sangat kecil tapi oh sangat perkasa ... sialan :)Apakah itu penting?
Banyak browser memuat favicon sebagai prioritas rendah sehingga tidak memblokir memuat halaman, jadi ya itu permintaan tambahan tetapi tidak di jalur kritis apa pun.
Solusi yang diterima mengerikan karena sampai JS telah diambil dan dieksekusi semua elemen DOM di bawah ini akan diblokir dari rendering dan tidak mengurangi jumlah permintaan!
sumber
Solusi yang tepat adalah dengan menggunakan pipelining HTTP .
Diperlukan server mendukungnya, tetapi tidak harus berpartipasi.
Banyak klien browser yang tidak melakukannya, padahal seharusnya.
Saya akan merekomendasikan Anda mencoba mengaktifkan pipelining di Firefox dan mencobanya di sana, atau cukup gunakan Opera (ngeri).
sumber
Bukan benar-benar jawaban untuk pertanyaan itu tetapi hanya untuk memuji jawaban yang diberikan oleh Marcel dan yahelc saya menawarkan solusi yang elegan untuk masalah 404 favicon.
Karena beberapa aplikasi dan browser dan yang lainnya memeriksa favicon.com dan jika ikon tidak ditemukan di root situs Anda dapat dengan mudah menanggapi permintaan dengan header respons 204 .
Contoh Apache:
Opsi Apache satu (dan favorit saya), satu liner sederhana di .htacces atau .conf Anda:
Opsi Apache dua:
Untuk bacaan lebih lanjut, ada posting blog yang bagus oleh Stoyan Stefanov di http://www.phpied.com/204-no-content/
sumber
Maaf, tetapi Anda tidak dapat menggabungkan favicon dengan sumber lain.
Ini berarti pada dasarnya Anda memiliki dua opsi:
Jika Anda merasa nyaman dengan situs Anda yang tidak memiliki favicon - Anda bisa langsung
href
menunjuk ke sumber daya non-ikon yang sudah dimuat (mis., Style sheet, file skrip, atau bahkan beberapa sumber daya yang diuntungkan dari pre-fetched) .)(Pengujian singkat saya menunjukkan bahwa ini berfungsi di sebagian besar, jika tidak semua, browser utama.)
Terima permintaan HTTP tambahan dan pastikan file favicon Anda memiliki header kontrol cache HTTP yang agresif.
(Jika Anda memiliki situs web lain di bawah kendali Anda, Anda bahkan dapat membuatnya secara pramuat memuat favicon untuk situs web ini - bersama dengan sumber daya statis lainnya.)
Solusi kreatif PS yang tidak akan berfungsi :
<link>
elemen favicon yang tertunda (seperti yang disarankan oleh pengguna @yc) kemungkinan akan memperburuk keadaan - dengan menghasilkan dua permintaan HTTP.sumber
Itu ide yang bagus, tetapi jika Google belum melakukannya di beranda mereka, saya bertaruh itu tidak bisa (saat ini) dilakukan.
sumber
Anda dapat menggunakan PNG 8-bit sebagai ganti format ICO untuk jejak data yang lebih kecil. Satu-satunya hal yang harus Anda ubah adalah menggunakan "data: image / png" alih-alih "data: image / x-icon" header tipe MIME:
"type" atribut dapat "image / png" atau "image / x-icon", keduanya bekerja untuk saya.
Anda dapat mengonversi ICO ke png 8-bit menggunakan gimp atau mengonversi:
dan menyandikan PNG biner ke string base64 menggunakan perintah base64:
sumber
Inilah cara termudah:
Ikon apa yang diwakilinya? Jawab dan angkat suara di bawah ini!
sumber
Solusi Pembunuh pada tahun 2020
Solusi ini tentu muncul sembilan tahun setelah pertanyaan awalnya diajukan, karena sampai saat ini, sebagian besar browser belum mampu menangani favicon dalam
.svg
format.Bukan itu masalahnya lagi.
Lihat: https://caniuse.com/#feat=link-icon-svg
1) Pilih SVG sebagai format Favicon
Saat ini, pada Juni 2020, browser ini dapat menangani Favicons SVG :
Perhatikan bahwa browser ini masih tidak dapat:
Dengan pemikiran di atas, kita dapat dengan percaya diri menggunakan Favicon SVG .
2) Hadirkan SVG sebagai URI Data
Tujuan utama di sini adalah untuk menghindari Permintaan HTTP.
Seperti solusi lain telah disebutkan, cara yang cukup cerdas untuk melakukan ini adalah dengan menggunakan Data URI daripada URL HTTP .
SVG (terutama SVG kecil) cocok untuk URI Data, karena yang terakhir hanya teks biasa (dengan karakter yang berpotensi ambigu persentase-dikodekan) dan yang sebelumnya, menjadi XML, dapat ditulis sebagai garis panjang plaintext (dengan segelintir) kode persentase) dengan sangat mudah.
3) Seluruh SVG adalah Emoji
Pada bulan Desember 2019, Leandro Linares adalah salah satu yang pertama menyadari bahwa sejak Chrome bergabung dengan Firefox dalam mendukung SVG Favicons, layak untuk bereksperimen untuk melihat apakah favicon dapat dibuat dari emoji:
https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/
Firasat Linares benar.
Beberapa bulan kemudian (Maret 2020), Bajak Laut Code Lea Verou menyadari hal yang sama:
https://twitter.com/leaverou/status/1241619866475474946
Dan favicons tidak pernah sama lagi.
4) Menerapkan solusi sendiri:
Berikut SVG sederhana:
Dan inilah SVG yang sama dengan Data URI :
Dan, akhirnya, inilah Data URI sebagai Favicon:
5) Lebih banyak trik
Karena Favicon adalah SVG, sejumlah efek filter (baik SVG maupun CSS) dapat diterapkan padanya.
Misalnya, di samping White Unicorn Favicon di atas, kita dapat dengan mudah membuat Black Unicorn Favicon dengan menerapkan filter:
Black Unicorn Favicon:
sumber