2011-09-26 17 views
6

Gereksinim ve require_dependency arasındaki farkı (How are require, require_dependency and constants reloading related in Rails?'dan) anlıyorum gibi hissediyorum.Rails 3 uygulamalarında require_dependency kullanılmasının performans sonuçları nelerdir?

Ancak, ben orada çeşitli yöntemlerden bazıları kullanırsanız ne olacağını merak ediyorum yüklenirken tüm dosyaları almak için (http://hemju.com/2010/09/22/rails-3-quicktip-autoload-lib-directory-including-all-subdirectories/ ve Best way to load module/class from lib folder in Rails 3? bakınız) bu yüzden:

  1. require_dependency kullanmak gerekmez Uygulamanın her yerinde ve
  2. , lib dizinindeki dosyalar değiştiğinde geliştirme sunucularını yeniden başlatmanız gerekmez.

Geliştirme performansı biraz etkilenecek gibi görünüyor, ki bu benim için büyük bir anlaşma değil. Bir üretim ortamında performans nasıl etkilenir? Üretimde iseniz, tüm dosyalar genellikle yalnızca bir kez yüklenir mi? Göremediğim daha iyi bir yolu var mı?

Bu konuda daha fazla şey okuyabileceğim bazı kaynaklar ekleyebilecekseniz çok memnun kalacaklardır. Bazı blog gönderileri, bu davranışın son zamanlarda lib/* dosyalarını otomatik olarak yükleyebilmek için Rails 3 ile değiştiğini ve bunun tartışmalı olduğunu, ancak bu tartışmalarla herhangi bir bağlantı görmediğimi söyledi. Artıları/eksileri göz önünde bulundurmak yararlı olacaktır. Teşekkürler!

cevap

4

Kod doldurucusu varsayılan olarak üretimde devre dışıdır. Yani bir dosyanın üst kısmında require_dependency çağırıyorsanız, sadece bir kez yürütülür.

Rails 3 değiştirdiğiniz söz konusu değişiklik gerçekten çok küçük. Genellikle Foo'u arayabilir ve otomatik olarak app/models/foo.rb'dan yüklenecektir. Bundan önce lib/foo.rb'dan da yüklenebilir. (Bu dizinlerve lib, otomatik yükleme yolları olarak adlandırılır.) Rails takımı, 3. sürümdeki otomatik yükleme yollarından lib kaldırmaya karar verdi. Hala geri koyabilirsin. Ancak, daha az sıklıkta değiştirilen ve projeye özgü dosyaları serbest bırakmak için teşvik edilir. Uygulama/model veya uygulama/kontrol cihazı gibi varsayılan uygulama alt dizinlerinden birine ait olmayan bir şeyiniz varsa, bunu lib'a eklemeniz gerekmez. Kendi alt dizini ekleyebilirsiniz. Örneğin, app/presenters var. Daha fazla bilgi istiyorsanız, eski sayı izleyicide a discussion var.

İlgili konular