Mengapa Tidak Keduanya ¯ \ _ (ツ) _ / ¯? Scott Hanselman memiliki artikel bagus tentang menggunakan CDN untuk peningkatan kinerja tetapi dengan anggun kembali ke salinan lokal jika CDN tidak aktif .
Khusus untuk bootstrap, Anda dapat melakukan hal berikut untuk memuat dari CDN dengan fallback lokal :
<head>
<link rel="stylesheet" href="~https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
<script>
var test = document.createElement("div")
test.className = "hidden d-none"
document.head.appendChild(test)
var cssLoaded = window.getComputedStyle(test).display === "none"
document.head.removeChild(test)
if (!cssLoaded) {
var link = document.createElement("link");
link.type = "text/css";
link.rel = "stylesheet";
link.href = "lib/bootstrap.min.css";
document.head.appendChild(link);
}
</script>
</head>
<body>
<script src="~https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="lib/jquery.min.js"><\/script>')</script>
<script src="~https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<script>if(typeof($.fn.modal) === 'undefined') {document.write('<script src="lib/bootstrap.min.js"><\/script>')}</script>
</body>
Pembaruan
- Anda juga dapat melakukan pengujian yang sama menggunakan YepNope atau fallback.js
- per komentar Flash dan solusi ini , jawaban yang diperbarui untuk memeriksa
.visible
kelas alih-alih mengujirgb(51, 51, 51)
- per komentar deste , diperbarui untuk digunakan
.hidden
dan .d-none
untuk Boostrap 3.x atau 4
- saat menguji apakah sebuah lembar gaya dimuat , Anda harus mencari gaya yang akan diterapkan, membuat elemen, dan melihat apakah itu telah diterapkan.
- Memperbarui lembar gaya agar segera dimuat di kepala dengan menggunakan vanilla js. Anda perlu membuat elemen pengujian menggunakan
Document.createElement()
, menerapkan kelas bootstrap, menggunakan Window.getComputedStyle()
untuk menguji display:none
, lalu memasukkan lembar gaya secara bersyarat menggunakan js.
Praktik terbaik
Untuk pertanyaan Anda tentang Praktik Terbaik, ada banyak alasan yang sangat bagus untuk menggunakan CDN dalam lingkungan produksi :
- Ini meningkatkan paralelisme yang tersedia.
- Ini meningkatkan kemungkinan terjadinya cache-hit .
- Ini memastikan bahwa muatan akan sekecil mungkin .
- Ini mengurangi jumlah bandwidth yang digunakan oleh server Anda.
- Ini memastikan bahwa pengguna akan mendapatkan respons yang dekat secara geografis .
Untuk masalah pembuatan versi Anda, CDN apa pun yang sepadan dengan bobotnya memungkinkan Anda menargetkan versi pustaka tertentu sehingga Anda tidak secara tidak sengaja memasukkan perubahan yang merusak pada setiap rilis.
Menggunakan document.write
Menurut mdn on document.write
Catatan : saat document.write
menulis ke aliran dokumen , memanggil dokumen document.write
tertutup (dimuat) secara otomatis memanggil document.open
, yang akan menghapus dokumen .
Namun, penggunaannya di sini disengaja. Kode harus dijalankan sebelum DOM dimuat sepenuhnya dan juga dalam urutan yang benar. Jika jQuery gagal, kita perlu memasukkannya ke dalam dokumen secara inline sebelum kita mencoba memuat bootstrap, yang bergantung pada jQuery.
Output HTML Setelah Dimuat :
Namun, dalam kedua contoh ini, kami memanggil saat dokumen masih terbuka sehingga harus menyebariskan konten, daripada mengganti seluruh dokumen. Jika Anda menunggu sampai akhir, Anda harus mengganti dengan document.body.appendChild
untuk memasukkan sumber dinamis.
Selain : Di MVC 6, Anda dapat melakukan ini dengan pembantu tautan dan tag skrip
rgb(51, 51, 51)
tampaknya berisiko - bagaimana jika seseorang mengubah warna dan lupa mengupdatenya? Apakah ada properti yang lebih stabil yang dapat digunakan?