Kılavuzun o kısmını yazdım.
Kesinlikle üretimde derleme yaşamak istemezsiniz.
Derleme yaptığınızda, olan budur:
/ Asset içindeki bir dosya için her istek Sprockets'e iletilir. On birinci Her varlık için istek derlenir ve önbellek (genellikle dosya sistemi) için kullandığı olursa olsun Rails önbelleğe.
Sonraki isteklerde Sprockets isteği alır ve parmak izi dosya adını aramak, öğeyi oluşturan dosyanın (görüntü) veya dosyaların (css ve js) değiştirilmediğini ve önbelleğe alınmış bir sürüm olup olmadığını kontrol edin.
Varlıklar klasöründeki ve eklentiler tarafından kullanılan satıcı / varlık klasörlerindeki her şey budur .
Dürüst olmak gerekirse, kod hız için optimize edilmediğinden bu çok fazla ek yüktür.
Bunun, varlığın kablodan istemciye ne kadar hızlı geçtiğini etkileyecek ve sitenizin sayfa yükleme sürelerini olumsuz etkileyecektir.
Varsayılan ile karşılaştır:
Varlıklar önceden derlendiğinde ve derleme kapalıyken, varlıklar derlenir ve public/assets
. Sprockets, ovanın eşleme tablosunu parmak izleri ile dosya adlarını Rails'e döndürür ve Rails bunu dosya sistemine yazar. Manifest dosyası (Rails 3'te YML veya Rails 4'te rasgele bir ada sahip JSON) başlangıçta Rails tarafından Belleğe yüklenir ve varlık yardımcı yöntemleri tarafından kullanılmak üzere önbelleğe alınır.
Bu, doğru parmak izi varlıkları olan sayfaların oluşturulmasını çok hızlı hale getirir ve dosyaların kendilerinin sunulması dosya sisteminden web sunucusundan hızlıdır. Her ikisi de canlı derlemeden çok daha hızlı.
Boru hattının ve parmak izinin maksimum avantajını elde etmek için, web sunucunuzda uzak gelecekteki başlıkları ayarlamanız ve js ve css dosyaları için gzip sıkıştırmasını etkinleştirmeniz gerekir. Sprockets, sunucunuzu kullanacak şekilde ayarlayabileceğiniz varlıkların gzip edilmiş sürümlerini yazar ve her istek için gerekli olanları kaldırır.
Bu, varlıkların istemciye olabildiğince hızlı ve mümkün olan en küçük boyutta çıkarılmasını sağlar, sayfaların istemci tarafında görüntülenmesini hızlandırır ve (çok ilerideki başlıklarla) istekleri azaltır.
Eğer canlı derleme iseniz:
- Çok yavaş
- Sıkıştırma eksikliği
- Sayfaların oluşturma süresini etkiler
Karşı
- Mümkün olduğunca hızlı
- Sıkıştırılmış
- Aşırı duyulan sıkıştırmayı sunucudan kaldırın (isteğe bağlı).
- Sayfaların oluşturma süresini en aza indirin.
Düzenleme: (Yorumu takip etmek için cevap)
boru hattı olabilir ilk talep üzerine precompile değiştirilebilir ama bunu yaparken bazı önemli roadblock'lar vardır. Birincisi, parmak izi isimleri için bir arama tablosu olması veya yardımcı yöntemlerin çok yavaş olmasıdır. Talep üzerine derleme senaryosu altında, her yeni varlık derlendiğinden veya istendiğinden arama tablosuna eklemenin bir yolu olmalıdır.
Ayrıca, birisi tüm varlıklar derlenip yerinde olana kadar bilinmeyen bir süre için yavaş varlık teslimatının bedelini ödemek zorundadır.
Her şeyi derleme fiyatının bir kerede çevrimdışı ödenmesi durumunda, halka açık ziyaretçileri etkilemez ve her şey canlı olmadan önce her şeyin çalışmasını sağlar.
Anlaşma kırıcı, üretim sistemlerine çok fazla karmaşıklık katmasıdır.
[Düzenle, Haziran 2015] Bir dağıtım sırasında yavaş derleme süreleri için bir çözüm aradığınız için bunu okuyorsanız, varlıkları yerel olarak önceden derlemeyi düşünebilirsiniz. Bununla ilgili bilgiler varlık boru hattı kılavuzundadır . Bu, yalnızca bir değişiklik olduğunda yerel olarak ön derleme yapmanıza, bunu taahhüt etmenize ve daha sonra derleme aşaması olmadan hızlı bir dağıtım yapmanıza olanak tanır.