CDN'de birden çok dosya ve yerel olarak bir dosya


93

Web sitem jQuery, jQuery UI, önek içermeyen, birkaç jQuery eklentisi ve ayrıca kendi javascript kodum gibi yaklaşık 10 üçüncü taraf javascript kitaplığı kullanıyor. Şu anda harici kitaplıkları Google CDN ve cloudflare gibi CDN'lerden alıyorum. Daha iyi bir yaklaşımın ne olduğunu merak ediyordum:

  1. Harici kitaplıkları CDN'lerden çekmek (bugün yaptığım gibi).
  2. Tüm dosyaları tek bir js ve tek bir css dosyasında birleştirip yerel olarak depolamak.

Herhangi bir görüş açıklandığı sürece kabul edilir. Teşekkürler :)

Yanıtlar:


139

Bir CDN'nin değeri, kullanıcının o CDN'den aynı dosyayı arayan başka bir siteyi daha önce ziyaret etmiş olma olasılığında yatar ve dosyanın boyutuna bağlı olarak giderek daha değerli hale gelir. Durumun böyle olma olasılığı, talep edilen dosyanın her yerde bulunması ve CDN'nin popülerliği ile artar.

Bunu akılda tutarak, popüler bir CDN'den nispeten büyük ve popüler bir dosyayı çekmek mutlak bir anlam ifade eder. jQuery ve daha az bir dereceye kadar jQuery UI, bu faturaya uyuyor.

Bu arada, dosyaları birleştirme çok fazla değişme olasılığı olmayan daha küçük dosyalar için anlamlıdır - yaygın olarak kullanılan eklentileriniz bu faturaya uyacaktır, ancak temel uygulamaya özel kodunuz muhtemelen uymayacaktır: haftadan haftaya değişebilir ve eğer diğer tüm dosyalarınızla yeniden birleştirirseniz, kullanıcıyı her şeyi yeniden indirmeye zorlamanız gerekir.

HTML5 standart metni , bunun için genel bir çözüm sağlama konusunda oldukça başarılıdır:

  1. Modernizr, kafada yerelden yüklenir: çok küçüktür ve örnekten örneğe oldukça farklıdır, bu nedenle onu bir CDN'den kaynaklamak mantıklı değildir ve kullanıcıyı sizden yüklemek için çok fazla zarar vermez. sunucu. Kafaya yerleştirildi çünkü CSS onu kullanıyor olabilir, bu yüzden vücut oluşturulmadan önce etkilerinin bilinmesini istersiniz. Diğer her şey, daha ağır komut dosyalarınızın yüklenirken ve yürütülürken oluşturmayı engellemesini durdurmak için en alta gider.
  2. CDN'den jQuery, çünkü hemen hemen herkes kullanıyor ve oldukça ağır. Kullanıcı muhtemelen sitenizi ziyaret etmeden önce bunu önbelleğe almış olacaktır, bu durumda önbellekten anında yükleyecektir.
  3. Çok fazla değişme ihtimali olmayan tüm küçük 3. taraf bağımlılıklarınız ve kod parçacıkları plugins.js , kendi sunucunuzdan yüklenen bir dosyada birleştirilir . Bu, kullanıcı ilk kez ziyaret ettiğinde uzak bir son kullanma tarihi başlığıyla önbelleğe alınır ve sonraki ziyaretlerde önbellekten yüklenir.
  4. Temel kodunuz main.js, uygulama mantığınızın haftadan haftaya veya aydan aya değişebileceğini hesaba katmak için daha yakın bir son kullanma başlığıyla içeri girer . Bu şekilde, bir hatayı düzelttiğinizde veya kullanıcı bundan sonraki iki haftada bir ziyaret ettiğinde yeni bir işlevsellik sunduğunuzda, yukarıdaki tüm içerik önbellekten getirilebilirken bu yeni bir şekilde yüklenebilir.

Diğer büyük kitaplıklarınız için, onlara ayrı ayrı bakmalı ve kendinize jQuery'nin öncülüğünü takip edip etmemeleri, kendi sunucunuzdan ayrı ayrı yüklenmeleri veya birleştirilmeleri gerekip gerekmediğini sormalısınız. Bu kararlara nasıl varabileceğinize bir örnek:

  • Angular, inanılmaz derecede popüler ve çok büyük. CDN'den alın.
  • Twitter Bootstrap, benzer bir popülerlik düzeyindedir, ancak bileşenlerinin nispeten ince bir seçimine sahipsiniz ve kullanıcı henüz sahip değilse, tüm şeyi indirmeye değmeyebilir. Bunu söyledikten sonra, kodunuzun geri kalanına sığma şekli oldukça içseldir ve tüm siteyi yeniden oluşturmadan onu değiştiremezsiniz - bu nedenle yerel olarak barındırılmak isteyebilirsiniz, ancak dosyalarını sizinkinden ayrı tutun. ana plugins.js. Bu şekilde plugins.js, kullanıcıyı tüm Bootstrap çekirdeğini indirmeye zorlamadan her zaman Bootstrap uzantılarınızı güncelleyebilirsiniz .

Ancak zorunluluk yok - kilometreniz değişebilir.


4
Çok güzel cevap. Tarayıcı önbelleğinin sizin için çalışmasına izin verin. Popüler kitaplıkları birleştirilmiş dosyalardan ayırma fikrini seviyorum.
Jon

3
Çok faydalı analiz
kullanıcı

8
Çok güzel bir cevap. Ayrıca, CDN'nin kullanıcıların dosyaları "yerel" bir sunucudan veya en azından daha yakın (kullanıcıya) bir sunucudan çekmesine izin vereceğinden bahsetmeye değer. Dolayısıyla, sunucunuz Avrupa'da ise, örneğin Güney Amerika veya Rusya'daki kullanıcılar dosyaları nispeten hızlı almaya devam edeceklerdir.
H.Wolper
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.