Başlık bölümünde atıfta bulunulan JavaScript ana belge ile aynı ana bilgisayar adından mı sunulmalıdır?


12

En iyi performans için Javascript'in statik içerik olarak ele alınması ve CSS dosyaları, resimler vb.İle birlikte çerezsiz bir alandan sunulması gerektiği izlenimindeydim.

Ancak Google burada diyor: Çerezsiz alan adından erken yüklenmiş harici JS dosyalarını sunma

Dokümanın başına atıfta bulunulan ve sayfa başlangıcı için gerekli olan JavaScript için, dokümanın ana doküman ile aynı ana bilgisayar adından sunulması gerekir. Çoğu tarayıcı, tüm JavaScript dosyaları indirilinceye, ayrıştırılıp yürütülene kadar diğer indirmeleri ve oluşturmayı engellediğinden, bu işlem noktasında ek bir DNS araması riskinden kaçınmak daha iyidir.

Şimdi çatıştım. "Sayfa başlatma için gerekli" ifadesinin ne anlama geldiği konusunda net değilim.

Genellikle iki JavaScript başvurum var, JQuery ajax.googleapis.com hizmet ve çoğunlukla $ (belge) .ready () işlevinde olay işleyicileri içeren bir master.js dosyası. Bu sayfanın başlatılması için gerekli mi?

Mevcut seçenekler göz önüne alındığında, (ajax.googleapis.com, statik çerezsiz alan adı, orijinal ana bilgisayar adı) JavaScript'im nerede sunulmalıdır?

Yanıtlar:


5

Şimdi çatıştım. "Sayfa başlatma için gerekli" ifadesinin ne anlama geldiği konusunda net değilim.

Bu, sitenizin nasıl çalıştığına bağlıdır. Temel olarak, birisi web sayfasını kullanmadan önce çalışması gereken JavaScript'tir.

Örneğin, http://www.weather.com/ adresine giderseniz iyi kişilerin hava durumu arama formu için bir ipucu sağlamak için bazı JavaScript sihirleri kullanmaya karar verdiklerini görebilirsiniz. Yani kelimeler Enter Zip, City or Place (e.g. Disney World)metin giriş alanında görünür. Maalesef, sayfa yüklenirken, en azından sonunda, biraz gecikme var. Dolayısıyla, sayfa yüklenecek kadar yavaşsa ve JavaScript yürütülmeden önce metin girişini yazmaya başlamak için yeterince hızlıysanız - ki bu bir streç değildir - girişiniz bu ipucunu körü körüne yerleştiren JavaScript tarafından bozulabilir giriş kutusuna metin.

Kabul edilirse, önce metin kutusundaki kullanıcı girişini kontrol ederek veya sadece bu anakronistik teknikten vazgeçerek önlenebilir. Ancak, o zaman çok iyi bir örnek olmazdı.

Mevcut seçenekler göz önüne alındığında, (ajax.googleapis.com, statik çerezsiz alan adı, orijinal ana bilgisayar adı) JavaScript'im nerede sunulmalıdır?

Bu, JavaScript'inizin ne yaptığını bilmeden gerçekten cevaplanamaz. Ayrıca, bpeterson76 ifadesiyle sitenizin özel durumuna bağlıdır. Yani sayfa ne kadar büyük? ev sahibi toplantı talebiniz ne kadar iyi? kaç tane CSS dosyası, resim vs. yüklüyor? kaç tane harici kaynak yüklüyor?

Özel durumunuza bağlı olarak, bu erken optimizasyon olabilir.


4

"Oluşturma başlayacak sayfa önce gerekli şey aynı sunucudan olmalıdır" kuralı genellikle uygulanır seninsunucular veya diğer daha küçük kaynaklar - DNS aramasının gözle görülür derecede bir saniye alabileceği durumlar (nesneleriniz birçok etki alanına yayılmışsa hızlı bir şekilde toplanabilir). Google'ın jQuery önbelleği ve diğer kütüphaneler gibi ortak genel kaynaklarla, ziyaretçinizin tarayıcısının bugün DNS aramasını zaten yapmış olması ihtimali yüksektir (çünkü diğer siteler bu hizmetin içeriğine atıfta bulunur) ve muhtemelen dosyayı önbellekte de barındırır. aktarımın yapılması gerekir (veya bir talep yapılırsa kısa bir "304 - değiştirilmemiş" yanıtı geri alınabilir). Nesne için tam bir indirme gerekli olsa bile, Google'ın içerik dağıtım ağı çoğu kullanıcı için küçük ölçekli işleminizden daha hızlı olacaktır.

İlgili bir kural: sayfanın doğru işlevi için gerekli olmayan nesnelere (kullanıcının gördüğü gibi) ana HTTP yanıtında mümkün olduğunca geç olarak başvurulmalıdır. Örneğin, reklam / istatistik hizmetleri için gereken komut dosyaları (ör. Google Analytics ve ilk) gibi şeyler - kullanıcıya içeriğinizi mümkün olan en kısa sürede verin, ardından yalnızca sizi gerçekten ilgilendiren arka plan öğelerini yükleyin. Birkaç reklam / istatistik hizmetini engelledim (ana bilgisayar dosyamda 127.0.0.1 ile eşleştirerek) çünkü genellikle çok yavaşlar ve bunlara erken gönderme yapan siteler komut dosyaları beklenirken bana boş bir sayfa veriyor diğer şeyler arka planda yuvarlanırken orada olduğum içeriği okuyabilmem için onlara geç başvurma.

Çerez içermeyen bir alanın statik içerik için faydası bir ölçek meselesidir. Sahip olduğunuz tek şey çerezlerde 10 baytlık bir oturum kimliği ve ziyaret başına ~ 20 statik nesne isteyen günde on bin ziyaretçi varsa, ayda yalnızca ~ 118Mbyte bant genişliği tasarrufu sağlarsınız (20 * 20 * 10000 * 31/1024/1024). Öte yandan, siteniz çerezlerde bir veya iki Kbyte değerinde bir şey tutarsa, özellikle kullanıcılarınızdan herhangi biri siteye yavaş bağlantılar (yani bir cep telefonuna tethering yoluyla GPRS veya daha fazla üzerinden) erişirse, fark çok daha önemli olabilir. yüksek bir girişim alanında kalabalık bir wifi bağlantısı) veya günde milyonlarca ziyaret alırsanız.

Özetlemek gerekirse, sayfamı tercih edebilmem için önce yüklenmesi gereken komut dosyaları için:

  1. ajax.googleapis.com veya benzeri
  2. arayan sayfanın orijinal ana bilgisayar adı
  3. çerezsiz statik alan adı

İlk sayfa oluşturma için gerekli olmayan kaynaklar için, bunlara mümkün olduğunca geç başvurun ve yukarıdaki tercih listesini tersine çevirin (büyük bir ölçekte çalışmadığınız sürece orijinal ana bilgisayar adı ve çerez içermeyen alan arasındaki fark büyük olasılıkla önemli değildir. ).


With common public resources ... there is a good chance that your visitor's browser has already done that DNS lookup today Şahsen, bu güvenerek rahat olmaz benim sitede. Mümkün olduğu kadar çok durumda mümkün olduğunca hızlı olmasını isterdim. Ne olursa olsun, iyi puanlar verirsiniz. +1
George Marian

1

Google, içeriği kullanıcılara çalıştırdığınız herhangi bir sunucudan daha yakına yerleştiren büyük bir içerik ağı çalıştırıyor (Akami'yi düşünün, ancak Google'a ait) Bu nedenle, hız açısından, Google, kişisel sunucunuza çok yakın olmadıkça dosyanızı dosyanızı yerel sunucunuzdan daha hızlı alacaktır ...

Bu soru Stackoverflow'da etrafta dolaştı ve yukarıdaki cevap her zaman fikir birliği gibi görünüyor. Ancak gerçekçi bir bakış açısıyla, birine karşı diğerine ev sahipliği yaparak elde edilen kazançlar uzun vadede oldukça az olacaktır. Genel http isteklerini küçültmek, optimize etmek ve azaltmaktan, işlerin fiziksel olarak nerede bulunduğunu inceleyeceğinizden çok daha iyi faydalar elde edersiniz. Önemli olmaya başladığı durumlarda (bir sayfanın günde 1,5+ milyon kez yüklendiği bir iş yaptım, bu nedenle 5k'lik bir iyileştirme bant genişliği tasarrufunda 5 konser anlamına geliyordu) genellikle bu kararları incelemekle görevli bir karar vericiler ekibi var.

Şahsen, genellikle aradığım şeyin en güncel kopyasını vermeleri için Google'a ev sahipliği yaparım.


Özel JavaScript'inizi nerede barındırıyorsunuz? Statik çerezsiz alan adı mı yoksa orijinal ana bilgisayar adı mı?
James Lawruk

Dürüst olmak gerekirse, (çoğunlukla) Jquery in-line dışında, dinamik olarak bağlanamayacak çok fazla şey yok. Datatable eklentisinin olası istisnası dışında (öncelikle) çekirdek Jquery ve Jquery UI kullanarak voodoo'yu minimumda tutma eğilimindeyim. Ben basit tutun (aptal) kavramına büyük bir inanan ve geriye dönük uyumlu değilse kod koymak olmaz, hangi çok seçenek dışlar. Yukarıda söylediğim gibi, bir dosyayı cookieless olmayan bir alana koymak çok büyük bir şey değil.
bpeterson76

1

Hatırlanması gereken önemli bir nokta, tarayıcıların aynı etki alanından aynı anda kaç tane kaynak indireceğine, genellikle tarayıcıya bağlı olarak 2 ila 6 arasında sınırlara sahip olmasıdır. Farklı bir alan adı kullanmak, tarayıcının alan adınızdan aynı anda daha fazla şey indirmesini sağlar.

Bu nedenle en iyi çözüm, çerez olmadığı için ajax.googleapis.com gibi popüler bir CDN kullanmaktır. Kullanıcı muhtemelen zaten DNS araması yapmış ve kaynağı önbelleğe almış olabilir. CDN'ler hız için optimize edilmiştir ve muhtemelen kullanıcılara yakın bir sunucuya sahiptir.

Bir CDN bir seçenek değilse, çok fazla çereziniz varsa veya indirilecek çok fazla kaynağınız varsa (resimler vb.), Çerez içermeyen bir alan kullanın (yalnızca yine de bir kez DNS araması yapmanız gerekir).

Aynı alan adından birkaç kaynağınız (yalnızca bir özel javascript dosyası) ve birkaç çereziniz (yalnızca küçük bir oturum kimliği) barındırıyorsanız.

İyi kaynaklar:

http://www.phpied.com/free-falling-waterfalls/

http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/

http://developer.yahoo.com/performance/rules.html


1

Yukarıdaki yanıtlar sorunuzun çoğunu kesmiş olsa da, "sayfa başlatma için gerekli" ye katkıda bulunacağım. Bunu şuraya çeviriyorum: Bu script web sitesini kullanmak için gerekli mi? Deneyimden, genellikle cevap hayır. Ancak, ne zaman:

  • Form doğrulaması
  • JavaScript tabanlı bir gezinme (yine de ideal değil)
  • Düzen JavaScript’e bağlıysa
  • Kritik olan DOM değişiklikleri için JavaScript veya bir kitaplık (jQuery gibi) kullanılıyorsa

Yahoo'nun referans için YSlow performans yönergeleri .

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.