Jquery kodu üst bilgi mi yoksa alt bilgi mi olmalı?


Yanıtlar:


189

Tüm komut dosyaları en son yüklenmelidir

Hemen hemen her durumda, tüm komut dosyası referanslarınızı sayfanın sonuna, hemen öncesine yerleştirmek en iyisidir </body>.

Geçici sorunlar ve ne olursa olsun bunu yapamıyorsanız defer, tarayıcınızın HTML indirildikten sonra komut dosyalarınızı indirmesini bilmesi için komut dosyası etiketlerinizi niteliğiyle dekore edin :

<script src="my.js" type="text/javascript" defer="defer"></script>

Edge kutuları

Bazı kenar durumlarda ancak, sayfa titrek ve genellikle basitçe içinde jQuery script referanslarını yerleştirerek çözülebilir sayfa yükleme sırasında diğer eserler karşılaşabilirsiniz nerede vardır <head>etiketi olmadandefer özniteliği. Bu durumlar, jQuery kullanıcı arayüzünü ve DOM'u işlevlerinin bir parçası olarak değiştiren jCarousel veya Treeview gibi diğer eklentileri içerir.


Diğer uyarılar

Çoklu dolgular gibi DOM veya CSS'den önce yüklenmesi gereken bazı kütüphaneler vardır. Modernizr, kafa etiketine yerleştirilmesi gereken böyle bir kütüphanedir .


5
Şunu düşünün: themeforest.net/item/portfolious-professional-business-template/… . Yakın zamanda satın aldığım, ana sayfasında jCurousel ile jQuery kullanımını içeren bir site teması. Komut dosyası bloklarını baştan dosyanın sonuna taşıdığımda, karuselde kullanılan görüntülerin sayfa yükleme sırasında bir kerede gösterileceğini fark ettim, komut dosyası dosyaları kafadayken sayfanın daha düzgün yükleneceğini fark ettim.
Chad Levy

5
İçeriğin başlangıç ​​durumunu ayarlamak için CSS kullanın. CSS kafaya girmeli. Başka bir şeyin işe yaraması için bir şeyi kırmak çözüm değildir. Bir ziyaretçinin herhangi bir içerik oluşturulmadan önce jQuery ve ilişkili tüm eklentilerin yüklenmesini beklemesi gerekiyorsa, içeriği görecek kadar uzun kalmayabilir.
Duncan

9
ChadLevy haklı: jQuery eklentilerinin altında başvurulursa daha iyi çalıştığı bazı koşullar vardır <head>. İşaretlemeniz sizin için içeriği sıralayan jQuery eklentisine bağımlıysa, eklentiler yüklenene kadar web sayfanızda korkak işaretleme elde edeceğiniz için eklenti referansını sayfanın altına koymanın bir anlamı yoktur. Kurallar, artık çalışmaz hale gelene kadar uyulmalıdır, bu noktada kurallar çiğnenmelidir.
Robert Harvey

2
@Duncan: İdeal olarak, tüm bağımlılıkları kontrol edebileceğiniz durum budur. JQuery (daha spesifik olarak jQuery UI ve diğer eklentiler gibi şeyler) ile ilgili tasarım, işlevsellik üzerinde tam kontrole sahip olamayacağınız tasarımdır, bu nedenle bir DOM öğesine görünürlük nitelikleri gibi bir şey eklemek, böylece daha zarif bir şekilde yüklenirse, bu öğeyi kullanan bir eklenti, söz konusu özelliği dikkate almaz. Bazen basit bir kurala meydan okumak, istediğiniz gibi çalışmaya bağımlı olmaktan daha iyidir.
Chad Levy

2
@Stefan: jQuery eklentilerinizin DOM'yi değiştirmesine izin verilmiyorsa, bunun anlamı nedir?
Robert Harvey

229

Komut Dosyalarını Alta Koy

Komut dosyalarının neden olduğu sorun paralel indirmeleri engellemesidir. HTTP / 1.1 belirtimi, tarayıcıların ana makine adı başına paralel olarak en fazla iki bileşen indirmesini öneriyor. Resimlerinizi birden çok ana bilgisayar adından sunuyorsanız, paralel olarak ikiden fazla indirme gerçekleştirebilirsiniz. Ancak bir komut dosyası indirilirken, tarayıcı farklı ana bilgisayar adlarında bile başka herhangi bir indirmeye başlamaz. Bazı durumlarda, komut dosyalarını alt tarafa taşımak kolay değildir. Örneğin, komut dosyası sayfanın içeriğinin bir kısmını eklemek için document.write kullanırsa, sayfanın altına taşınamaz. Kapsam belirleme sorunları da olabilir. Birçok durumda, bu durumları geçici olarak çözmenin yolları vardır.

Genellikle ortaya çıkan alternatif bir öneri, ertelenmiş komut dosyaları kullanmaktır. DEFER özniteliği, komut dosyasının document.write içermediğini ve tarayıcılar için oluşturmaya devam edebilecekleri konusunda bir ipucu olduğunu belirtir. Ne yazık ki Firefox, DEFER özelliğini desteklemiyor. Internet Explorer'da komut dosyası ertelenebilir, ancak istendiği kadar olmayabilir. Bir komut dosyası ertelenebilirse, sayfanın altına da taşınabilir. Bu, web sayfalarınızın daha hızlı yüklenmesini sağlayacaktır.

EDIT: Firefox, sürüm 3.6'dan beri DEFER özniteliğini desteklemiyor.

Kaynaklar:


4
Devlet senaryolarının en üste yerleştirilmesi gerektiğine dair bazı modern tavsiyeler gördüm. Komut dosyalarının altına yerleştirilmesi, sayfanın gövdesindeki görüntülerin ve diğer içeriğin paralel olarak yüklenmesine izin verir, ancak sayfadaki komut dosyalarının daha sonra yüklenmesine neden olur - tarayıcının bilmeden önce tüm HTML gövdesinin indirilmesi gerekir yüklenecek komut dosyası URL'lerini. Çoğu kişi artık doğru olmayan Yahoo rehberine başvuruyor - Firefox gerçekten de komut dosyalarındaki ertelenmiş özellikleri onurlandırıyor. Üst taraftaki erteleme, ölçerseniz daha hızlı sayfa yüklenmesine neden olur.
ShadowChaser

Bu yöntemle sayfa yükleme hızlarında bazı istatistikler görebilir miyim?
Gabriel Alack

1
Firefox, 3.6 sürümünden bu yana DEFER sertifikasını desteklemektedir. Kaynak: w3schools.com/tags/att_script_defer.asp
Nikita 웃

1
Güncelleme: 2016 başı / ortası itibariyle, tüm modern tarayıcılar ana bilgisayar adı başına bağlantı sayısını en az 6'ya
Gece Baykuşu

32

Tabii ki CDQ ile sadece kafasına jQuery yükleyin.

Neden? Bazı senaryolarda, katıştırılmış jQuery bağımlı kodlu kısmi bir şablon (ör. Ajax oturum açma formu snippet'i); jQuery sayfanın altına yüklenirse, "$ tanımlı değil" hatası alırsınız, güzel.

Bu geçici çözüm yolları vardır (herhangi bir JS gömme ve bir altta yük js paketi eklemek gibi), ama neden tembel yüklenen js, jQuery bağımlı kodu istediğiniz herhangi bir yere yerleştirme özgürlüğünü kaybetmek ? Javascript motoru, bağımlılıklar (jQuery yükleniyor gibi) karşılandığı sürece kodun DOM'da nerede yaşadığını umursamaz.

Ortak / paylaşılan js dosyalarınız için, evet, onları daha önce yerleştirin </body>, ancak istisnalar için, html'nin o noktasında oraya bir jQuery bağımlı snippet veya dosya referansını yapıştırmanın gerçekten mantıklı olduğu uygulamalarda bunu yapın.

Kafada performans isabetli yükleme jquery yoktur; gezegendeki hangi tarayıcıda zaten jQuery CDN dosyası önbellekte yok?

Hiçbir şey hakkında çok ado, jQuery kafasına sopa ve js özgürlük saltanatı izin.


1
çok, çok sayıda tarayıcı yapmaz; yaklaşık% 2, sürümü dikkate aldığınızda okuduğum en yüksek rakamdır ve önbellekleme tam kaynak adlarına dayanır, bu nedenle jquery1.4.2 jquery1.7 veya 1.9.1 veya ... ile aynı değildir. .
Toni Leigh

Bunlardan 2%yarısı sayfa ilk kez yüklenmeden önce ayrılacaktır. Bu şekilde 1%ziyaretçileri kaybediyorsunuz , ancak potansiyel olarak kendinizi çok fazla geliştirme zamanı ve sıkıntıdan kurtarıyorsunuz. Bunun iş modelinizle mantıklı olup olmadığına bakın ...
osa

13

Nimbuz , konuyla ilgili çok iyi bir açıklama sunuyor, ancak son cevabın sayfanıza bağlı olduğunu düşünüyorum: kullanıcının daha erken olması için daha önemli olan komut dosyaları veya resimler?

Görüntüler olmadan mantıklı olmayan, ancak yalnızca küçük, gerekli olmayan komut dosyalarına sahip bazı sayfalar vardır. Bu durumda, alt kısımdaki komut dosyalarını koymak mantıklıdır, böylece kullanıcı görüntüleri daha erken görebilir ve sayfayı anlamlandırmaya başlayabilir. Diğer sayfalar çalışmak için komut dizisine dayanır. Bu durumda, görüntüler olmayan bir çalışma sayfasına sahip olmak, görüntülerle çalışmayan bir sayfadan daha iyidir, bu nedenle komut dosyalarını en üste koymak mantıklıdır.

Dikkate alınması gereken başka bir şey, komut dosyalarının genellikle görüntülerden daha küçük olmasıdır. Tabii ki, bu bir genelleme ve sayfanız için geçerli olup olmadığını görmek zorundasınız. Eğer bunu yaparsa, bana göre, onları ilk önce bir kural olarak koymak için bir argüman (başka türlü yapmak için iyi bir neden olmadığı sürece), çünkü görüntüleri betikleri geciktireceği kadar geciktirmezler. Son olarak, en üstte komut dosyası olması çok daha kolaydır, çünkü bunları kullanmanız gerektiğinde henüz yüklenip yüklenmedikleri konusunda endişelenmenize gerek yoktur.

Özet olarak, komut dosyalarını varsayılan olarak en üste koyma eğilimindeyim ve yalnızca sayfa tamamlandıktan sonra bunları alta indirmeye değip değmeyeceğini düşünüyorum. Bu bir optimizasyon - ve bunu erken yapmak istemiyorum.


Erken optimizasyon argümanını sürükleyene kadar bana sahiptin. Bu, insanların sonuçlarını tam olarak anlamadan dogmatik olarak takip ettikleri başka bir kuraldır.
Robert Harvey

6
Oh, hepsini kazanamazsınız! Ben onun sonuçlarını anladığım inancındayım. :)
EMP

Komut dosyalarınız yüklendiğinde endişelenmeniz gerektiğinden emin değilim. Bir komut dosyası yüklenene kadar oluşturma blokları, bu tartışmanın büyük kısmı bununla ilgilidir. Yüklemeden önce hiçbir şey aramadığınız sürece sorun yok. Ayrıca, geri aramalar bunun için de geçerlidir ve sayfanıza gerçekten fazla bir şey katmamalısınız. Anladığım kadarıyla, görüntüler engellenmiyor (paralel olarak yükleniyorlar) ve aslında DOM hazır olabilir ve görüntüler tamamen yüklenmeden önce komut dosyalarınız çalışır. Komut dosyalarının engellenmesini önlemek için önce komut dosyalarını koymak mantıklı değildir.
Duncan

4
Genel fikir birliğinin senaryoları en alt düzeye koymak olduğu göz önüne alındığında, bunu varsayılan olarak yapmak daha iyi olmaz ve yalnızca sorun yaşarsanız en üste taşımak olmaz mı? İşleri geriye doğru yapmak garip görünüyor. Bazen harcanan çabada bir fark yoksa en uygun şeyi yapmak daha iyidir :)
Duncan

@Duncan, Evet bu benim yaklaşımımdı. Eklentileri en alta koydum ve sorun yaşadığımda onları en üste koydum ve bu da sorunları düzeltti.
Robert Harvey

6

Çoğu jquery kodu, yine de sayfanın sonuna kadar gerçekleşmeyen belge üzerinde yürütülür. Ayrıca, javascript ayrıştırma / yürütme ile sayfa oluşturma gecikebilir, bu nedenle tüm javascript'i sayfanın altına yerleştirmek en iyi uygulamadır.


5

Standart uygulama, tüm komut dosyalarınızı sayfanın altına koymaktır, ancak ASP.NET MVC'yi bir dizi jQuery eklentisi ile kullanıyorum ve jQuery komut dosyalarını <head>master'ın bölümüne koyarsam her şeyin daha iyi çalıştığını görüyorum sayfa.

Benim durumumda, komut dosyaları sayfanın altındaysa, sayfa yüklendiğinde oluşan eserler vardır. Ben jQuery TreeView eklentisini kullanıyorum ve komut dosyaları başlangıçta yüklü değilse, ağaç eklenti tarafından dayatılan gerekli CSS sınıfları olmadan işleyecektir. Böylece, sayfa ilk yüklendiğinde komik görünümlü bir karışıklık yaşarsınız, ardından TreeView'in düzgün oluşturulması sağlanır. Çok kötü görünüyor. JQuery eklentilerini <head>kalıp sayfanın bölümüne yerleştirmek bu sorunu ortadan kaldırır.


İntranetler internet ile aynı koşullara tabi değildir, bu nedenle yük gecikmesi muhtemelen daha az algılanabilir. Yine de kurallara uymanız tavsiye edilir.
Duncan

hayır, CSS tanımlayıcılarını / stillerini biçimlendirmeye koymak (jQuery'nin DOM için hazır olmasını beklemek yerine) sorunu çözer.
Dan Beam

1
@Dan Beam: Ağaç Görünümü bir veritabanı tablosundan doldurulur ve Ağaç Görünümü'nün stilleri, tablonun içeriğine bağlı olarak Ağaç Görünümü eklentisi tarafından ayarlanır, bu nedenle hayır çalışmaz.
Robert Harvey

1
Neden değiştirilmemiş Treeview Eklentisi betiğini sayfanın üst kısmına koyabildiğimde ve neden işe yarayacağı zaman bunu yapmalıyım? Bu hiç mantıklı değil, Dan.
Robert Harvey

1
Şerefe Robert, ben de kısmi formlarda ASP.NETMVC kullanıyorum. Kısmi her yürütüldüğünde yeni alanların işlevlerine yeniden atanması nedeniyle javascript'i kısmi içinde tutmak mantıklıdır (doğrulama için söyleyin). @Html.ActionKısmi benim $ is undefinedyerine bunun yerine kısmi yüklemek için .load ('@ Url.Action') kullanmak zorunda anlam verdiği için, kullanmaya çalışırken , bu çıktı dinamik bir sonuç yazar, bu konuda sorunlarla karşı karşıya . Ancak bu ekstra istek nedeniyle bir fouc verir. Girişinize dayanarak, jquery'yi ana sayfamdaki RenderBody () üzerine taşıyacağım
Malkin

4

Hemen hemen tüm web siteleri hala Jquery ve diğer javascript başlıklarını D'ye yerleştirse de, stackoverflow.com'u kontrol edin.

Ayrıca vücudun son etiketinden önce koymanızı öneririm. Her iki yere yerleştirdikten sonra yükleme süresini kontrol edebilirsiniz. Komut dosyası etiketi, daha fazla yüklenmesi için web sayfanızı duraklatır.

ve javascript'i altbilgiye yerleştirdikten sonra, javascript'i yükleyene kadar web sayfanızın alışılmadık görünümlerini elde edebilirsiniz, bu nedenle başlık bölümünüze css yerleştirin.


2
Ancak, senaryoda erteleme kullanarak aynı şeyi başarabilirsiniz. w3schools.com/tags/att_script_defer.asp
Jack Tuck

2

Hemen önce </body>en iyi yer uygun olan Yahoo Geliştirici Ağı 'ın Web Sitesi hızlandırmak için En İyi Uygulamalara bu bağlantıyı , çok mantıklı.

Yapılacak en iyi şey kendiniz test etmektir.


0

Benim için jQuery biraz özel. Belki norm için bir istisna. Buna güvenen çok fazla komut dosyası var, bu yüzden erken yüklenmesi oldukça önemlidir, böylece daha sonra gelen diğer komut dosyaları amaçlandığı gibi çalışacaktır. Başka birinin işaret ettiği gibi, bu sayfa bile baş bölümüne jQuery yükler.

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.