JS kodunu html dosyasına veya harici bir dosyaya koymak daha mı iyi?


16

Tek sayfalık bir web sitesi tasarlıyorsam, JS kodum için harici dosya oluşturmak mı yoksa html koduna koymak mı daha iyi? Sayfaya yerleştirmek daha hızlı mı yükleniyor? Kullanıcıların kod isteklerini reddetmek için izinleri değiştirebilir miyim, ancak html sayfası yine de kodu çağırabilir mi?

Yanıtlar:


26

JS kodunuzu ayrı bir dosyaya koymalısınız, çünkü bu test etmeyi ve geliştirmeyi kolaylaştırır. Kodu nasıl kullandığınız sorusu farklı bir konudur.

  • HTML ve JS'nin ayrı ayrı sunulması, bir istemcinin JS'yi önbelleğe alabilmesi avantajına sahiptir. Bu, istemcinin her seferinde yeni bir istek göndermemesi için uygun başlıklar göndermenizi gerektirir. Bir güncelleştirme gerçekleştirmek ve böylece istemci önbelleklerini geçersiz kılmak istiyorsanız önbellekleme sorunludur. Bir yöntem dosya adına bir sürüm numarası eklemektir, örn /static/mylibrary-1.12.2.js.

    JS ayrı bir dosyadaysa, dosyaya erişimi kısıtlayamazsınız: HTML sayfanızda başvurduğunuz veya birisinin dosyayı indirmek istediği için bir JS dosyasına istekte bulunup bulunmadığını söylemek zordur (teknik olarak: imkansız). direkt olarak. Ancak, çerezleri kullanabilir ve belirli çerezleri iletmeyen (ancak bu aptalca olur) istemcilere hizmet vermeyi reddedebilirsiniz.

  • JS'nin HTML içinde sunulması her sayfanın boyutunu artırır - ancak bir istemcinin birden fazla sayfayı görüntülemesi olası değilse bu sorun olmaz. İstemci JS için ayrı bir istek yayınlamadığından, bu strateji sayfayı daha hızlı yükler - en azından ilk kez, ancak önbelleğe almanın daha iyi olduğu bir başabaş noktası vardır. JS'yi örneğin PHP yoluyla ekleyebilirsiniz.

    Burada istemcinin isterseniz JS dosyasına gizlenebilir ayrı erişim gerekmez. Ancak herkes HTML içindeki JS kodunu görüntüleyebilir.

Yükleme sürelerini en aza indirecek diğer stratejiler arasında

  • Hizmet verdiğiniz JS dosyasının boyutunu azaltan JS minimizasyonu . Küçültme, kodu dağıtırken yalnızca bir kez gerçekleştiğinden, bayt tasarrufu için çok etkili bir yöntemdir. OTOH bu, kodunuzu ilgilenen ziyaretçiler için anlaşılmasını zorlaştırır.

    Minification ile ilgili tüm JS dosyalarınızı tek bir dosyada birleştirme uygulamasıdır. Bu, gerekli isteklerin sayısını azaltır.

  • Sıkıştırma, istemcideki ve sunucudaki her istek için bir hesaplama yükü ekler. Ancak sıkıştırmak için harcanan zaman (de-) sıkıştırılmamış verilerin iletilmesi için harcanan zamandan daha azdır. Sıkıştırma genellikle sunucu yazılımı tarafından şeffaf bir şekilde gerçekleştirilir.

Bu teknikler görüntüler gibi diğer kaynaklar için de geçerlidir.

  • Görüntüler, veri URL'leri ile HTML veya CSS içine yerleştirilebilir. Base64 kodlaması boyutu büyüttüğü için bu yalnızca küçük, basit görüntüler için kullanışlıdır. Bu yine de başka bir istekten daha hızlı olabilir.
  • Birden çok küçük görüntü (simgeler, düğmeler) tek bir görüntüde birleştirilebilir ve daha sonra sprite olarak çıkarılabilir.
  • Görüntüler sunucu tarafından web sitesinde gerçekte kullanıldıkları boyuta küçültülebilir ve bant genişliği tasarrufu sağlanır. Küçük resimleri karşılaştırın.
  • Bazı grafikler için SVG gibi metin tabanlı görüntüler çok daha küçük olabilir.

"Daha Kolay Test ve Geliştirme", JS bu amaçla kendi dosyasında her zaman yararlı olduğundan emin değilim. Bir projede çok küçük HTML dosyaları kullanıyorum ve aslında bunları HTML'ye dahil etmek daha organize. Önbelleğe alma ile ilgili olarak, birden fazla ziyarette (belki de) hızları artırabilir, ancak ilk sayfa yüklemesi için javascript'i doğrudan HTML'ye eklemek her zaman daha hızlı olacaktır.
YungGun

5

Tek sayfalık bir web sitesi tasarlıyorum

Kelimenin tam anlamıyla bir sayfanız varsa, evet, tek bir dosyadaki her şeyi sunmak daha iyidir (performans açısından) ... stil sayfaları, JavaScript ve hatta görüntüler (veri URI'leri ile satırlanmış küçük görüntüler). Bu, nispeten yavaş olan harici kaynakları almak için gereken ek HTTP isteklerini ortadan kaldırır.

Ortaya çıkan dosya, tüm metin yanıtının boyutunu büyük ölçüde azaltacak şekilde sunulmadan önce sıkıştırılmalıdır.

Veri URI'lerinin boyutuyla ve tarayıcı uyumluluğuyla ilgili sınırlamalar bulunduğundan, sayfanın dışında büyük resimlere sahip olmayı düşünmelisiniz. (örn. IE8'in 32KB sınırı vardır, bu da base64 kodlamasının doğası gereği yaklaşık 23 KB gerçek dosya boyutuna eşittir.)

Kullanıcıların kod isteklerini reddetmek için izinleri değiştirebilir miyim, ancak html sayfası yine de kodu çağırabilir mi?

Hayır. En iyi ihtimalle, geçici gözlemciden "gizlemek" için kod gizlenebilir, ancak gerçek bir koruma sunmaz.


1
Neden olumsuz oy? Geliştirme ve çok sayfalı sitelerin ayrı / harici dosyalara sahip olması daha iyi olsa da, bu durumda OP özellikle "tek sayfalık bir web sitesi" ve "yüklenmesinin daha hızlı" olup olmadığını soruyor. HTTP isteklerinin en aza indirilmesi bu örnekte bir öncelik olmalıdır. Yine de birden çok dosyayla geliştirebilirsiniz (ve geliştirmelisiniz), ancak bu sorulan soru değildir.
MrWhite

Js, css ve görüntüleri ayrı dosyalara koyarak tarayıcının dosyaları önbelleğe almasına izin verirsiniz. Dolayısıyla, sayfa içeriği değişirse, yalnızca html'nin yeniden yüklenmesi gerekir.
Thierry J.

@ThierryJ. Tamam dosyaları önbelleğe alabilirsiniz ama ilk sayfa yük (Bu yeni kullanıcılar kazanmak için çok önemlidir) önbellekleme geçerli olmadığından hala tüm dosyaları dahil etmek çok daha hızlı. Ayrıca, bilgisayarın önbelleğe alınmış dosyayı yüklemesi gerekir; bu dosyayı HTML'ye eklerseniz tamamen atlanır. Hemen hemen her durumda dosyanın HTML'ye dahil edilmesi muhtemelen daha hızlı olacaktır. Yine de HTML'yi yeniden yüklemeniz gerekecek ve javascript kısmı yüz kB'den fazla olamaz, bu ihmal edilebilir.
YungGun

4

İstemci tarafı JS kodu tarayıcı tarafından görülmelidir (yani, sayfanın doğrudan JS kullanması gerekiyorsa) - bu, tarayıcı tarafından indirilmesi gerektiği anlamına gelir.

Bir tarayıcıyı indiremiyorsa sayfada JS kullanamazsınız.

Bu bağlamda, JS'yi satır içine alırsanız veya bir dosyaya koyarsanız, ortak uygulama bir JS dosyası kullanmaktır (bir tanesi için endişelerin ayrılması).

Tarayıcıya göstermek istemediğiniz bir kodunuz varsa, sunucu tarafı kodunu kullanmanız gerekir (node.js, php, perl, asp.net, jsp - çok fazla seçenek vardır) ve onunla etkileşime geçmeniz gerekir. ilk sayfa yüklemelerinde veya AJAX kullanarak tarayıcıdan .


2

Bu, kod miktarına ve bir kodlayıcıya karşı bir programcı / yazılım mühendisi olmanın ne kadar ciddi olduğuna bağlıdır. Kısa kod snippet'lerini doğrudan HTML'ye koyan tasarımcılarla çalıştım ve saçmalarken gerçekten işe yaradı.

Bu kendim yapacağım bir şey olmasa da ve en iyi yazılım geliştirme uygulamalarını bilmek istiyorsanız, harici *.jsdosyadaki her şeyi pu'ye eklemenizi ve <script>etiketlerle yüklemenizi şiddetle tavsiye ederim .

İkinci noktanıza ilişkin olarak, kodunuzu görüntülemek için kullanıcı veya tarayıcıyı inkar edemezsiniz obfuscation, kodunuzu okumayı zorlaştıracak denilen bir şey vardır , ancak performans düşecektir.


1

JS kodum için harici dosya oluşturmak veya sadece html koduna koymak daha mı iyidir?

JS kodunuz için harici bir dosya oluşturmak daha iyidir. Ayrıca, istemciye sunduğunuz bir veya iki dosyaya sahip olmak daha iyidir. Ancak, sürdürülebilirlik sorunları için JS kodunuzun birden fazla dosyaya bölünmesi de daha iyidir. Bunu yapabilmek için Gulp gibi farklı JS dosyalarınızı tek bir dosyada birleştirecek olan ön işlemcileri kullanabilirsiniz .

İstemcinin işlemesi için daha az HTTP isteği olacağından, daha az dosya sunmak daha iyidir.

Sayfaya yerleştirmek daha hızlı mı yükleniyor?

Evet, HTML için yalnızca bir istek yaptığınızdan, harici olarak JS kodunuzla çok sayıda istek (en az 2) yaptığınızdan, daha hızlı olduğu açıktır. Bu yalnızca JS kodunuz her iki tarafta da küçültülmediyse ve bu, tek bir HTML sayfasında kodunuzu korumanın ne kadar zor olacağını dikkate almaz.

Kullanıcıların kod isteklerini reddetmek için izinleri değiştirebilir miyim, ancak html sayfası yine de kodu çağırabilir mi?

Hayır yapamazsın. JS kodu, CSS kodu ve HTML kodu gibi statik içeriktir. Bu, tarayıcıya girdikten sonra istemci onu ve içeriğini tamamen indirebileceği anlamına gelir. Her bir dosya, resim, script indirilmeye açıktır. Ancak , kodunuzu küçültebilir / büyütebilirsiniz , böylece bir insanın onu kullanması daha zordur. Bu sadece önce performans için yapılan çirkinleşmenin bir sonucudur .


0

Html ve javascript içeriğini ayrı dosyalara ayırmanın birçok avantajı:

  • bireysel dosya dosyalarının okunabilirliğini artırır
  • javascript kodu artık bir html dosyasıyla sınırlı olmadığından, diğer html ve javascript dosyaları veya kitaplıkları javascript kodunuzu kullanabilir
  • benzer bir şekilde ayrı bir dosyaya konan javascript kodu kolayca karmaşık hesaplamalar (makine öğrenme, 3D grafikler, çerçeve, vb kitaplıklar) yapmak için diğer dosyaları ve gelişmiş kütüphaneleri kullanabilirsiniz
  • javascript istemci tarafında önbelleğe alınabilir ve bu sayede sayfa yenilemesinde yalnızca html içeriğinin yeniden yüklenmesi gerekir
  • iyi / modern yazılım mühendisliği uygulamaları ayrı bir javascript dosyasına / modülüne / kütüphanesine daha kolay uygulanabilir (tasarım kalıpları, daktilo / babel hakkında bilgi vb.)
  • javascript kodu ziyaretçiden web sayfasına küçültme / uglification ile kolayca gizlenebilir veya 'gizlenebilir'
  • javascript dosyaları gulp, webpack, vb. yoluyla tek bir dosya / modül halinde bir araya getirilebilir

1
Bu yapılan puan üzerinden sağlam teklif şey gibi görünüyor ve önceki 6 cevapları açıklandığı gelmez
tatarcık
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.