Hangi başlıklar Ben statik içeriğe hizmet için kullanmak gerekir?

4 Cevap php

Ben PHP kullanarak benim statik Javascript ve CSS dosyalarını Gzip Sıkıştırma duyuyorum. Orijinal dosya talep edildiğinde, sunucu Last-Modified ve ETag başlıkları gönderir. Ben henüz PHP ile bu göndererek değilim. Ben de önerileri Cache-control ve Expires başlıklarını ve biraz daha ben hatırlamıyorum olduğunu kullanımı gördüm.

Bu ilk iki yeterli mi? Ben PHP ile oldukça kolay son değiştirilme tarihini alabilirsiniz sanırım, ama nasıl bir ETag üretmek istiyorsunuz?

Bu diğer iki eklemek daha iyi değilse, ne görüntü gibi diğer dosyalar için bu eklemek için en iyi yolu nedir? Belki yoluyla .htaccess? (Ben sunucuya doğrudan erişim yok.)

4 Cevap

ETag'a için herhangi bir değeri kullanabilirsiniz, ama (hiç gerçekten çok çarpışmalar bu olmamalı) içeriği için benzersiz bir tanımlayıcı olarak geçerli dosya [s] md5_file () sha1_file () kullanmayı tercih.

Her çıkıştan önce bunu yapın.

<?php header( "Etag: " . sha1_file( basename( $_SERVER[ 'PHP_SELF' ] ) ) ); ?>

. veya (etkinse genellikle, hangi) Apache htaccess sizin için bunu sağlayabilirsiniz:

# if we're clustered this will still be cool
FileETag MTime Size

Eğer (bu olsa biraz tehlikeli) sona uzun ayarlamak istiyorsanız, siz de yapabilirsiniz:

# turn on far-future expiration dates
# to cache content longer (30 days)
ExpiresActive On
ExpiresDefault A2592000

Ama sen dosyayı güncelleştirmek her zaman değiştirmek zorunda olduğunu) size (dosyasının bir sürümünü yapmak gerekir, dikkatli olun.

Bkz:

Temelde istiyorum:

  • (Vb, Spriting onları birleştirerek aracılığıyla) göndermek dosya sayısını en aza indirmek;
  • Minify tüm JavaScript dosyaları;
  • (Doğru destekleyen tarayıcılar için) GZIP her şey; ve
  • Sürüm herşey.

Sürüm ile demek yerine:

<img src="/images/logo.gif">

Dosyanın mtime gibi bir "versiyonu" göstermek için bir şey eklemek:

<img src="/images/logo.gif?1234568899">

Bir çok geleceği olan bu birleştirin başlık Expires böylece tarayıcı yalnızca bir kez dosya talep edecektir. Eğer yeni bir kopyasını almak için tarayıcı istediğinizde Sonra sürüm numarasını değiştirin.

Bu ETAG'ları ve benzeri içeren yöntemlere üstündür IMHO.

Apache uses inode-size-timestamp as Etag this however does not work if you have a cluster of web servers. In this case you might use an md5 of url-size-timestamp. More info in the Etag section here

Bu (örneğin resim, ses, video) büyük dosyalar üzerinde pahalı olabilir, çünkü ben tüm dosya bir MD5 hesaplamak için değil öneririm.

Neden statik isteklere hizmet doğrudan Apache kullanmak değil mi?

Bu da kenar durumlarda kolları, doğru malzeme, hem de set başlıkları sıkıştırmak ve ne tahmin edebilirsiniz.

Doğru koşullu istekleri işleme açık değildir ve ben bunu yapmak için denemek gerektiğini sanmıyorum. Zaten öyle bir web sunucusu kullanın.

O dedi, tüm varsayılan mantıklı. Muhtemelen site birden fazla web sunucusu ve ayar varsa ETag devre dışı bir seyrek değişen içerik başlığının "Expires" oldukça fazla zorunlu siz müşterilerimizin önbelleklerini en yararlı olmak istiyorum. Gerekir

, Biraz küçümseyici bakmak

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

Hangi size yardımcı olacaktır.