Saya menulis sedikit panduan itu.
Anda pasti tidak ingin tinggal kompilasi dalam produksi.
Ketika Anda telah mengkompilasi, inilah yang terjadi:
Setiap permintaan untuk file di / aset diteruskan ke Sprockets. Yang pertama permintaan untuk masing-masing dan setiap aset itu dikompilasi dan di-cache dalam apa pun Rails gunakan untuk cache (biasanya sistem file).
Pada permintaan berikutnya Sprockets menerima permintaan tersebut dan harus mencari nama file sidik jari, periksa apakah file (gambar) atau file (css dan js) yang membentuk aset tidak diubah, dan kemudian jika ada versi cache melayani itu.
Itu adalah segalanya di folder aset dan di folder vendor / aset apa pun yang digunakan oleh plugin.
Itu banyak overhead seperti, jujur, kode tidak dioptimalkan untuk kecepatan.
Ini akan berdampak pada seberapa cepat aset beralih ke klien, dan akan berdampak negatif terhadap waktu pemuatan halaman situs Anda.
Bandingkan dengan yang standar:
Ketika aset dikompilasi dan dikompilasi dimatikan, aset dikompilasi dan sidik jari ke public/assets
. Sprockets mengembalikan tabel pemetaan dari dataran ke nama file sidik jari ke Rails, dan Rails menulis ini ke sistem file. File manifes (YML di Rails 3 atau JSON dengan nama acak di Rails 4) dimuat ke dalam Memory by Rails saat startup dan di-cache untuk digunakan oleh metode pembantu aset.
Ini membuat pembuatan halaman dengan aset sidik jari yang benar menjadi sangat cepat, dan penyajian file itu sendiri adalah web-server-dari-filesystem yang cepat. Keduanya secara dramatis lebih cepat daripada kompilasi langsung.
Untuk mendapatkan keuntungan maksimal dari pipeline dan sidik jari, Anda perlu mengatur header masa depan jauh di server web Anda, dan mengaktifkan kompresi gzip untuk file js dan css. Sprockets menulis versi aset yang di-gzip yang dapat Anda atur untuk digunakan server Anda, menghilangkan keharusan untuk melakukannya untuk setiap permintaan.
Ini memberikan aset kepada klien secepat mungkin, dan dalam ukuran sekecil mungkin, mempercepat tampilan sisi-klien dari halaman, dan mengurangi permintaan (dengan header yang jauh di masa depan).
Jadi jika Anda tinggal mengompilasinya adalah:
- Sangat lambat
- Tidak memiliki kompresi
- Akan memengaruhi waktu render halaman
Melawan
- Secepat mungkin
- Terkompresi
- Hapus kompresi yang tidak sengaja terdengar dari server (opsional).
- Minimalkan waktu render halaman.
Edit: (Jawaban untuk menindaklanjuti komentar)
Pipa dapat diubah untuk dikompilasi pada permintaan pertama tetapi ada beberapa penghalang utama untuk melakukannya. Yang pertama adalah harus ada tabel pencarian untuk nama sidik jari atau metode pembantu terlalu lambat. Di bawah senario kompilasi berdasarkan permintaan akan perlu ada cara untuk menambahkan ke tabel pencarian karena setiap aset baru dikompilasi atau diminta.
Juga, seseorang harus membayar harga pengiriman aset lambat untuk periode waktu yang tidak diketahui sampai semua aset dikompilasi dan di tempat.
Defaultnya, di mana harga kompilasi semuanya dibayar secara off-line pada satu waktu, tidak memengaruhi pengunjung publik dan memastikan bahwa semuanya berfungsi sebelum semuanya ditayangkan.
Pemecah masalah adalah bahwa hal itu menambah banyak kerumitan pada sistem produksi.
[Sunting, Juni 2015] Jika Anda membaca ini karena Anda mencari solusi untuk waktu kompilasi yang lambat selama penerapan, maka Anda dapat mempertimbangkan untuk mengkompilasi ulang aset secara lokal. Informasi tentang ini ada di panduan jalur pipa aset . Ini memungkinkan Anda mengkompilasi secara lokal hanya ketika ada perubahan, komit itu, dan kemudian memiliki penyebaran cepat tanpa tahap precompile.