Kami menggabungkan file CSS dan JavaScript untuk mengurangi jumlah permintaan HTTP, yang meningkatkan kinerja. Hasilnya adalah HTML seperti ini:
<link rel="stylesheet" href="all-my-css-0fn392nf.min.css">
<!-- later... -->
<script src="all-my-js-0fn392nf.min.js"></script>
Jika kita punya logika sisi-server / build untuk melakukan semua ini untuk kita, mengapa tidak mengambil satu langkah lebih jauh dan menanamkan gaya dan skrip yang disatukan dalam HTML?
<style>.all{width:100%;}.my{display:none;}.css{color:white;}</style>
<!-- later... -->
<script>var all, my, js;</script>
Itu dua permintaan HTTP lebih sedikit, namun saya belum melihat teknik ini dalam praktek. Kenapa tidak?
javascript
html
css
front-end
Gladstone. Terus
sumber
sumber
Jawaban:
Karena menyimpan permintaan HTTP tidak banyak berguna ketika Anda mencapainya dengan memecah caching. Jika stylesheet dan skrip disajikan secara terpisah, mereka dapat di-cache dengan sangat baik dan diamortisasi pada banyak, banyak permintaan ke halaman yang sangat berbeda. Jika mereka di-bubur di halaman HTML yang sama, mereka harus ditransmisikan ulang dengan setiap. Tunggal. Permintaan.
HTML halaman ini, misalnya 13 KB sekarang. 180 KB CSS mencapai cache, dan begitu pula 360 KB JS. Kedua hit cache mengambil jumlah waktu yang sangat kecil dan praktis tidak menggunakan bandwidth. Keluarkan profiler jaringan browser Anda dan coba di beberapa situs lain.
sumber
Hanya karena kinerja Web sangat penting! 99% kali ini akan memberi Anda waktu respons pengguna akhir yang lebih cepat.
Berikut adalah beberapa contoh dari Velocity Conf.
Dari Steve Souders, pelopor dalam Pengoptimalan Kinerja Web,
Menggunakan file eksternal menghasilkan halaman yang lebih cepat karena file JavaScript dan CSS di-cache oleh browser / jaringan / proksi (sebagaimana didefinisikan dalam protokol HTTP dengan header Cache). JavaScript dan CSS yang diuraikan dalam dokumen HTML dapat diunduh setiap kali dokumen HTML diminta. Ini mengurangi jumlah permintaan HTTP yang dibutuhkan, tetapi meningkatkan ukuran dokumen HTML. Jika Anda menggunakan skrip seperti Jquery, mudah untuk mereferensikan skrip 300 KB dan tidak percaya bahwa setiap orang memiliki bandwidth 100 MBit / s dengan latensi rendah, menjalankan satu aplikasi - peramban - dibuka di situs web Anda. 99% kali itu akan memberi Anda waktu respons pengguna akhir yang lebih cepat.
Frekuensi dimana komponen eksternal JavaScript dan CSS di-cache relatif terhadap jumlah dokumen HTML yang diminta juga penting. Jika pengguna di situs Anda memiliki beberapa tampilan halaman per sesi dan banyak halaman Anda menggunakan kembali skrip dan stylesheet (bundel) yang sama, ada potensi manfaat yang lebih besar dari file eksternal yang di-cache.
Tetapi inlining kadang-kadang-lebih disukai untuk aplikasi satu halaman atau situs web dengan satu tampilan halaman per sesi. Tidak ada aturan emas, dan umumnya melupakannya karena menyangkut terutama situs web yang sangat spesifik yang benar-benar terlibat oleh kinerja pengguna akhir.
Anda dapat membaca di sini mengapa kinerja penting (Penafian: Saya adalah pembuatnya)
sumber
Versi terbaru HTTP dibuat pada tahun 1999. Pada tahun 1999, semua orang terhubung ke Internet dengan dial-up. Internet sangat lambat. 16 tahun kemudian, banyak hal telah berubah, tetapi protokol yang kami gunakan belum.
Jawaban yang tidak seharusnya kita sebaris 'karena mengganggu caching' sedikit menyesatkan, terutama di era internet super cepat. Ketika Anda benar-benar melakukan perhitungan, sering kali ada perbedaan yang dapat diabaikan antara waktu pemuatan dengan pengguna yang melakukan cache-warm dan cache-cold jika Anda telah melakukan inline. Fakta bahwa ada adalah perbedaan kecil tidak inheren karena Anda telah inline, tetapi karena desain fleksibel dari HTTP / 1.1.
Protokol SPDY mengimplementasikan sesuatu yang disebut server push . Ini pada dasarnya membawa keluar dari dokumen HTML itu sendiri, dan ke dalam protokol. Server cerdas akan tahu sumber daya apa yang sudah dimiliki klien. Server bodoh hanya akan mengirim semuanya terlepas - itu masih akan menjadi manfaat kinerja, tetapi mungkin biaya dalam hal bandwidth. Jika peramban memiliki konten di dalam cache, ia dapat dengan mudah membuang salinan yang masuk. Server menunggu hingga HTML dimuat sebelum mengirim sumber daya tambahan - secara teori browser dapat mengirim sinyal untuk membatalkan dorongan server.
HTTP / 2.0 didasarkan pada SPDY dan kemungkinan besar akan mengimplementasikan server push, tetapi secara teori Anda dapat mulai menggunakan SPDY hari ini. Jadi alasan sebenarnya kami tidak sebaris adalah salah satu warisan - protokol yang ada saat ini sudah tua dan tidak cukup fleksibel untuk mencapai 'inlining tingkat protokol'.
sumber
Selain masalah caching dan retrieving yang diajukan oleh jawaban lain, saya ingin menyoroti masalah lain yang lebih tidak jelas: parsing .
JavaScript yang muncul dalam HTML dapat mengalami masalah penguraian, seperti dalam contoh ini:
... yang berarti Anda harus mengubah skrip Anda untuk keluar dari beberapa karakter yang memicu dalam HTML. Masalah ini hilang ketika Anda menyediakan CSS dan JavaScript sebagai sumber daya eksternal, karena mereka tidak lagi harus memasukkan konteks penguraian 'induk' ke dalam akun.
Jika Anda menyajikan konten Anda sebagai XML, Anda harus menyiasatinya dengan menggunakan bagian CDATA. Namun, CDATA hadir dengan masalah serupa:
Hati-hati inliners.
sumber
Pemisahan konten dari penataan presentasi biasanya merupakan keuntungan yang lebih besar daripada permintaan http lebih sedikit.
Memisahkan semua gaya memungkinkan dan mendorong penggunaan kembali dan berbagi file.
Isi file juga akan lebih statis dan tersedia untuk caching di kedua server dan klien untuk halaman itu dan halaman lain yang dikunjungi.
Untuk Anda pertanyaan khusus ... Jika server dibuat untuk melakukan minifikasi sendiri, itu membuat aset lebih sulit untuk mempertahankan dan men-debug masalah. Namun banyak kerangka kerja sekarang melakukan ini di tingkat file, misalnya semua cs dan semua js. Misalnya kerangka ruby on rails sekarang mengecilkan asetnya untuk produksi. 5-10 permintaan http tambahan biasanya bukan hambatan, lebih dari itu jika ada 100 permintaan http (yang sering Anda dapatkan dengan gambar).
Langkah ekstra sebenarnya termasuk kode di halaman itu sendiri akan memiliki kerugian dari halaman yang lebih besar bahwa Anda harus mengelola urutan unduhan dengan hati-hati dan halaman tidak dapat menampilkan konten sering tanpa sisa halaman (sekarang besar) sedang diunduh.
sumber
sumber
Gaya / skrip tersemat harus diunduh dengan setiap permintaan halaman:
Gaya ini tidak bisa di-cache oleh browser dan digunakan kembali untuk halaman lain. Karena itu, disarankan untuk menyematkan jumlah minimal CSS / JS.
Kecepatan situs meningkat untuk permintaan beberapa halaman:
Ketika seseorang pertama kali mengunjungi situs web Anda, peramban mereka mengunduh HTML dari halaman saat ini plus file CSS dan JS yang ditautkan. Ketika mereka menavigasi ke halaman lain, browser mereka hanya perlu mengunduh HTML dari halaman baru, file CSS / JS di-cache sehingga tidak perlu diunduh lagi. Ini dapat membuat perbedaan besar terutama jika Anda memiliki file gaya dan skrip yang besar.
sumber