Önbellek Kontrolü için zor ve hızlı kurallar nelerdir?


15

İtiraf : Korumakta olduğum siteler, çoğunlukla Google'ın Hız İzleyicisi'nde Page Speed & Y-Slow Firefox eklentileri ve Ağ Kaynakları görünümünden gelen önerileri izleyen sunucunun varsayılan yapılandırmasına bağlı olarak Önbellek Kontrolü için farklı kurallara sahiptir . Önbellek Denetimi, yaptıklarına bağlı olarak özel / herkese açık olarak ayarlanır, ETag'ın / Son Değiştirilmiş başlıkları yalnızca Y-Slow bir sorun olduğunu önerdiğinde ve Amazon için dosyaları elle gzip ederken Vary-Accept-Encoding gerekli göründüğünde değişir. CloudFront.

Malzemeyi farklı seçenekler ve bunların yaptıkları hakkında okurken, çelişkili bilgiler, kırık proxy'ler ve kargo kült yapılandırmaları için kurallar gibi görünüyor . Yukarıda belirtilen analiz araçları tarafından sağlanan resmi bilgilere, birleşik bir strateji yerine her bir konuyla ayrı ayrı ele alındığından oldukça erişilemez (bu nedenle tekniklerin çapraz referansı yoktur).

Örneğin, hız analizi araçlarının, ETag'lı bir siteyi önbelleklemeye yardımcı olmaları amaçlanıyorsa, onlarsız bir siteyle aynı şekilde derecelendirdiklerinin hiçbir anlamı yoktur.

Platform agnostik Önbellek Kontrolü stratejisi için zor ve hızlı kurallar nelerdir?

DÜZENLE:

Bir bağlantı aracılığıyla Jeff Atwood makalesinde süper derinlikte Caching açıklıyor.

Kayıt için olsa da zor ve hızlı kurallar:

Dosya GZIP vb. Kullanılarak Sıkıştırılmışsa - proxy olarak sıkıştırılmış sürümü desteklemeyen bir istemciye döndürebilir (tarayıcı önbelleği bu şekilde işaretlenmiş dosyaları tutacaktır). Ayrıca sıkıştırılabilir olduğunu söylemek için bir "Vary: Accept-Encoding" eklemeyi unutmayın.

ETag ile birlikte Son Değişiklik Kullanın - kemer ve parantez kullanımı her iki doğrulayıcı sağlarken, ETag her iki tabanı da kullanarak değişiklik zamanı yerine yalnızca dosya içeriğine dayanır. NOT: AOL'nin PageTest ürününün bir nedenden ötürü ETag'lara karşı carte blanche yaklaşımı vardır. Aynı içeriği barındırmak için birden fazla sunucuda Apache kullanıyorsanız, aynı canlı dosya sistemini kullanmadığınız sürece, örtük olarak bildirilen inode'yi ETags'den FileETag yönergesinden (yani "FileETag MTime Size") hariç tutarak kaldırın.

Mümkün olan her yerde "cache-control: public" kullanın - bu, sayfanın geri kalanında HTTP kimlik doğrulaması vb. Gerekiyorsa bile proxy sunucularının (ve tarayıcı önbelleğinin) içeriğinizi döndüreceği anlamına gelir.

Yanıtlar:


8

Bir sunucu grubu / kümesi kullanmıyorsanız, önce Yahoo'nun dediği gibi ETag'den kurtulmayın. Aynı dosya değişmediği zaman her zaman aynı ETag değerini döndürdüğü sürece, bu çok yararlı bir direktiftir.

Diğer başlıklara gelince, Yahoo'nun en iyi uygulamalarıExpires statik dosyalar için çok ileri bir başlık ayarlamanızı Cache-Controlve dinamik içerik için kullanmanızı önerir . Ancak Cache-controlstatik içerik için mükemmel bir şekilde iyidir (aralarında neredeyse hiçbir fark yoktur).

Önbelleğe alınmış statik dosyaları değiştirdiğinizde, dosya adını değiştirmeniz veya sonuna benzersiz bir parametre eklemeniz gerekir; örn example.com/styles.css?v=2. Bununla birlikte, gerçek dosya adının değiştirilmesi, aşağıdaki yorumlarda belirtildiği gibi tercih edilir.

Bu arada, Etag kuralını kaldırmak ve kendi etki alanınızı CDN olarak eklemek için YSlow kurallarını istediğiniz gibi düzenleyebilirsiniz. Bu makale ayrıca iyi bir okuma: Yahoo'nun Sorunları Sizin Sorununuz Değil


ETag, Y-Slow'ta inode (güvenilir olmayan FS başına) içeren varsayılan yerine "FileETag MTime Size" yaparak Apache'de anlamlıydı. Ancak Yahoo'nun en iyi uygulamalarına ilişkin öneriler Page Speed'lerle karşılaştırıldığında biraz kafa karıştırıcı. Örneğin, Önbellek Kontrolünü yalnızca dinamik sayfalarda (siz de önerdiğiniz gibi) kullandığını söylerken, Google, manuel olarak GZipped Amazon Cloudfront dosyalarında Cache-Control: statik CSS'de genel ve Cache-Control: private kullanmanızı önerir.
Metalshark

Vekiller için bu tavsiyeden ne yapılacağını bilmek zor. Google sadece "Bazı kamu proxy'lerinde hata var ..." diyor, ancak bunun ne kadar yaygın olduğunu söylemiyor. Başlığı ayarlamanızı önerir Vary: Accept-Encoding, code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat adresinin

Bir sorgu parametresi eklemek, bu dosyanın bazı tarayıcılarda tamamen önbelleğe alınmasını devre dışı bırakır. Yani bunun yerine "dosya adını değiştir" yaklaşımıyla gitmek isteyebilirsinizexample.com/style_v2.css
Evgeny

@Evgeny: Hangi tarayıcılar? Bunu daha önce duymuştum ama aslında dosyayı önbelleğe almayan bir tarayıcı görmedim (özellikle doğru başlıklara sahipseniz).
DisgruntledGoat

@DisgruntledGoat aslında, bazı kazma sonra http / 1.0 çağından bir kalıntı olduğu gibi görünüyor aslında söz konusu kullanıcı aracısı sorgu dizeleri olan varlıkları önbelleğe alması gereken spec bir parçasıydı. Öte yandan, code.google.com/speed/page-speed/docs/caching.html , varlıkların önbelleğe alınmayacak proxy'ler (kalamar <3.0) olduğunu ve bu nedenle önbellek bozma için sorgu dizelerinin kullanılmasının önerilmediğini belirtir.
Evgeny

0

Önbelleğe almak için kaynaklarınızın istek üstbilgilerini değiştirme Çoğu kişi için, önbelleğe alınmayı önbelleğe almanın yolu, web barındırıcınızda / sunucunuzda .htaccess adlı bir dosyaya bazı kodlar eklemektir.

Bu, web barındırıcınızda dosya yöneticisine (veya dosya eklemek veya yüklemek için nereye giderseniz gidin) gitmek anlamına gelir.

.Htaccess dosyası, siteniz için birçok önemli şeyi kontrol eder. .Htaccess dosyasına aşina değilseniz, değiştirmeden önce nasıl yapacağınızı öğrenmek için lütfen .htaccess makalesiyle çalışmamı okuyun.

Aşağıdaki kod tarayıcılara neyi önbellekleyeceklerini ve ne kadar süreyle "hatırlayacaklarını" söyler. .Htaccess dosyanızın üstüne eklenmelidir.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

.Htaccess dosyasını kaydedin ve ardından web sayfanızı yenileyin.

Kaynak:
https://varvy.com/pagespeed/leverage-browser-caching.html


ExpiresByTypeGördüğüm direktiflerin neredeyse her örneği mime türünü içeriyor text/x-javascript- sunucunuz bu içerik türüyle gerçekten yanıt veriyor mu ?! (Kör kopya / yapıştırma IMO örneği.)
MrWhite
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.