Büyük siteler neden görüntülerini / css'lerini harici alanlarda barındırıyor?


43

Neden Facebook, Twitter ve Google gibi siteler görüntülerini ve css’lerini aşağıdaki gibi harici alanlarda barındırıyor:

  • Facebook: static.ak.fbcdn.net
  • twitter: a0.twimg.com
  • Google: ssl.gstatic.com

Soru (lar):

  • Performans mı? veya güvenlik?

Yanıtlar:


53

@toomanyairmiles kısmen doğrudur - bu tekniğin amacı web tarayıcıdan sunucuya paralel bağlantılara izin vermektir. Web tarayıcıları, tek bir ana bilgisayara en az iki eşzamanlı bağlantıya izin vermelidir , ancak birçok yeni tarayıcı 60'a kadar yönetebilir. Ne olursa olsun, tarayıcı ve web sunucuları arasındaki eşzamanlı eşzamanlı bağlantılar, büyük bir hız darboğazıdır.

Gönderen Google'ın kaynak :

HTTP 1.1 spesifikasyonu (bölüm 8.1.4), tarayıcıların ana bilgisayar adı başına en çok iki eşzamanlı bağlantıya izin vermesi gerektiğini belirtir (yeni tarayıcılar bundan daha fazlasını sağlarsa da: bir liste için bkz. Tarayıcı). Bir HTML belgesi, bir ana bilgisayarda izin verilen maksimum değerden daha fazla kaynağa (örn. CSS, JavaScript, resimler vb.) Referanslar içeriyorsa, tarayıcı bu sayıda kaynak için istekte bulunur ve gerisini sıraya koyar. İsteklerin bazıları biter bitmez, tarayıcı sıradaki bir sonraki kaynak sayısı için istekler yayınlar. Tüm kaynakları indirinceye kadar işlemi tekrarlar. Başka bir deyişle, bir sayfa tek bir ana bilgisayardan X dış kaynağından daha fazlasını gösteriyorsa, X her ana bilgisayar için izin verilen maksimum bağlantıdır, tarayıcı bunları bir seferde X, her X kaynağı için 1 RTT uygulayan sırayla indirmelidir. Toplam gidiş-dönüş süresi N / X, N ise bir ana bilgisayardan alınacak kaynak sayısıdır. Örneğin, bir tarayıcı ana bilgisayar adı başına 4 eşzamanlı bağlantıya izin veriyorsa ve bir sayfa aynı etki alanındaki 100 kaynağa başvuru yapıyorsa, her 4 kaynak için 1 RTT'ye ve toplam 25 RTT indirme süresine neden olur.

Dolayısıyla, bu sorunu çözmenin yolu, farklı alanlara veya ana bilgisayarlara olan istekleri "engellemektir":

Yine aynı Google kaynağından:

Paralelleştirilebilir kaynakları ana bilgisayar adları arasında dengeleyin. Görüntüler, CSS ve diğer ikili nesneler dahil olmak üzere çoğu statik kaynağın istekleri paralelleştirilebilir. Tüm bu nesnelere istekleri ana bilgisayar adları üzerinden mümkün olduğunca dengeleyin. Bu mümkün değilse, genel bir kural olarak, hiç kimsenin tüm ana bilgisayarlardaki ortalamanın% 50'sinden daha fazla hizmet etmemesini sağlayın. Bu nedenle, örneğin, 40 kaynağınız ve 4 sunucunuz varsa, her ana bilgisayar ideal olarak 10 kaynağa hizmet etmelidir; En kötü durumda, hiçbir ana bilgisayar 15'ten fazla hizmet etmemelidir. 100 kaynağa ve 4 ana makineye sahipseniz, her ev sahibi 25 kaynağa hizmet etmelidir; hiç kimse ev sahibinin 38'den fazla hizmet vermemelidir.

Ancak, bulmacanın bir parçası daha var. Her istek normalde, genellikle çerez şeklinde, kendi genel giderleriyle birlikte gelir. Resimler, CSS ve JavaScript gibi statik öğelerin çerez verilerini iletmesi gerekmez, bu nedenle çerezleri daha az (alt) alanlardan sunmak daha hızlı Gidiş dönüşleri ile sonuçlanabilir:

Görüntüler, JS ve CSS dosyaları gibi statik içeriklerin, bu kaynaklarla kullanıcı etkileşimi olmadığından çerezler eşliğinde olması gerekmez. Çerezleri sunmayan bir etki alanından statik kaynaklar sunarak istek gecikmesini azaltabilirsiniz. Bu teknik, özellikle sık sık değiştirilen küçük resimler veya nadiren erişilen görüntü arşivleri gibi büyük miktarlarda nadiren önbelleğe alınmış statik içeriği gösteren sayfalar için kullanışlıdır. Bu tekniği 5'ten fazla statik kaynak sunan herhangi bir sayfa için öneririz. (Bundan daha az kaynak sunan sayfalar için, fazladan bir etki alanı oluşturmanın maliyeti yoktur.)

Statik içerik sunmak için kokusuz bir etki alanı ayırmak için, yeni bir etki alanı adı kaydedin ve DNS veritabanınızı yeni etki alanını mevcut etki alanı A kaydınıza yönlendiren bir CNAME kaydıyla yapılandırın. Web sunucunuzu, yeni etki alanından gelen statik kaynaklara hizmet edecek şekilde yapılandırın ve hiçbir çerezin bu etki alanında herhangi bir yere kurulmasına izin vermeyin. Web sayfalarınızda, statik kaynaklar için URL’lerin alan adına bakın.


13

Geçmişte, Web tarayıcıları bir kerede yalnızca iki öğe indirebiliyorlardı (şimdi 6 ya da daha fazla), böylece çeşitli alanlardan kaynak indirmek tek bir alan adından daha hızlıdır. Bu, resimlerden javascriptlere kadar her şey için geçerlidir.

Birçok şirket , son kullanıcının verilerini coğrafi olarak yakın olan bir sunucudan almasını sağlayan ve aynı zamanda kaynak istekleri için gidiş dönüş süresini azaltarak site performansını artıran bir araç olan bir CDN kullanır .


7

Büyük siteler, coğrafi olarak dağınık sunucuları yapacak birden fazla boyunca içerik dağıtma gibi bir İçerik Yayınlama Network veya CDN onların statik içerik (resim, JS ve CSS dosyaları) hareket sayfalar daha hızlı yüklenmesini kullanıcının bakış açısıyla.

CDN farklı bir etki alanı adına sahip olduğundan, etki alanı paylaşma yararları da sağlar .



-1

Bu, harici etki alanı adını kullanırken herhangi bir çerez ayarı bulunmadığında başlığa gönderilen istenmeyen çerezler için hala gereklidir, bu nedenle içerik yüklemek çok daha hızlıdır.

Yani evet, hala hız amacı için gerekli.


Kabul edilen cevap zaten çerezlerin harici bir etki alanı için gönderilmediğini söylüyor. Bu cevap, diğer cevapların zaten kapsamadığı hiçbir şeyi söylemez.
Stephen Ostermiller
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.