Saya mencoba mengembangkan tema Wordpress dan mencari tahu cara menyediakan fallback lokal untuk Font Awesome jika CDN gagal atau saya mengembangkan tema saya di server lokal tanpa koneksi internet.
Solusi yang ada dalam pikiran saya adalah sesuatu seperti ini (kode semu):
if ( $CDN_IS_AVAILABLE ) {
wp_enqueue_style( 'font-awesome', '//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css', false );
} else {
wp_enqueue_style('font-awesome', get_template_directory_uri() . '/css/font-awesome/css/font-awesome.min.css', false, '4.0.3' );
}
Terima kasih!
wp_enqueue_style()
dan bagaimana bekerja dengannya adalah sesuai topik.Jawaban:
Masalahnya adalah saya cukup yakin tidak mungkin untuk memeriksa apakah CSS secara efektif ditambahkan ke halaman melalui PHP: CSS diurai oleh browser, jadi sisi klien, dan sama sekali tidak berpengaruh di sisi server.
Tentu saja, dalam PHP dimungkinkan untuk memeriksa apakah CDN responsif atau tidak ...
Pilihan 1
Kirim permintaan dan jika ia merespons dengan status HTTP 200, gunakan itu. Sesuatu seperti:
yang menghasilkan 2 permintaan HTTP, satu untuk cek, yang kedua untuk embedded CSS: sangat buruk .
pilihan 2
Ini bahkan lebih buruk :
wp_enqueue_style
alur kerja: jika sebuah plugin menambahkan Font Awesome, itu akan ditambahkan 2 kali.Jadi, sungguh, jangan lakukan ini di rumah.
Yang benar-benar penting adalah bahwa menggunakan PHP Anda dapat memeriksa permintaan CDN, tetapi tidak memverifikasi CSS, jadi semua upaya Anda berakhir dengan kinerja yang lebih buruk, bukannya lebih baik.
Hormat kami, jika tema Anda adalah tema publik, saya sarankan Anda hanya menggunakan salinan lokal, memberikan pengguna cara untuk memilih CDN:
Jadi pengguna dapat sepenuhnya menimpa fungsi menggunakan tema anak, dan juga dapat menggunakan
'font_awesome css_url'
filter untuk mengubah URL.Juga pertimbangkan bahwa beberapa penyedia hosting kelas atas secara otomatis mengkonversi aset lokal ke yang CDN, dan ada plugin yang memungkinkan CDN semua hal; inilah alasan mengapa tema publik tidak boleh menggunakan CDN sama sekali.
Jika tema itu untuk Anda sendiri, maka buatlah pilihan. Pertimbangkan bahwa CDN paling terkenal memiliki% down time yang sangat rendah (dan bootstrapcdn adalah salah satu yang paling dapat diandalkan, menurut cdnperf.com ). Saya cukup yakin hosting Anda memiliki waktu henti% lebih besar dari bootstrapcdn, sehingga orang-orang memiliki kemungkinan lebih besar untuk tidak melihat situs Anda sama sekali, daripada melihatnya dengan ikon yang rusak.
Cara yang kotor
Seperti yang dikatakan, PHP tidak dapat memeriksa CSS, karena rendering CSS terjadi pada sisi klien, tetapi Anda dapat menggunakan pemeriksaan sisi klien: JavaScript.
Sematkan dulu CSS menggunakan CDN:
Setelah itu, tambahkan beberapa JavaScript ke catatan kaki Anda:
Kode ini berjalan ketika halaman dimuat dan memeriksa apakah rentang tak terlihat ditambahkan ke footer dengan kelas 'fa' memiliki properti font-family diatur ke 'FontAwesome'. Ini diatur oleh Font Awesome, jadi jika itu tidak benar, itu berarti bahwa CSS tidak dimuat. Jika itu terjadi, kode tersebut menggunakan JavaScript untuk menambahkan CSS lokal ke kepala.
(Untuk menguji kode ini, Anda dapat menyematkan melalui
wp_enqueue_style
URL CDN yang salah, dan lihat apa yang terjadi)Jadi, dalam kasus langka CDN tidak tersedia, semua gaya akan ditampilkan seperti yang diharapkan (untuk beberapa milidetik pengguna akan melihat ikon CSS 'rusak', karena CSS ditambahkan setelah halaman dimuat).
Sekarang, mengingat CDN sangat andal, apakah pantas melakukan peretasan ini untuk <1% orang yang akan melihat ikon rusak? Menjawab pertanyaan ini terserah Anda.
sumber
Pemeriksaan sisi server juga tidak tahan peluru. Jika server Anda berlokasi di California, cek Anda akan menggunakan Pusat Data CDN California. Jika pengguna Anda berada di China, mereka kemungkinan akan menggunakan Pusat Data yang sama sekali berbeda. Setidaknya, begitulah menurut saya cara kerjanya.
Bagaimanapun, inilah solusi jquery yang ditingkatkan:
http://jsfiddle.net/skibulk/fp1gqnyc/
sumber
fontFamily
.