Önbellekleme gzip'li css

2 Cevap php

Ben sıkıştırması ile css dosyaları dahil etmek için bir kamu php dosyası oluşturun hangi bir css dosyası gziplemek konusunda bazı dersler üzerinde var. Sorun benim css dosyaları önbelleğe alınamıyor değildir. Ben referans için kundakçı kullanıyorum ve aslında bazı javascript sıkıştırmak için aynı kodu kullanarak denedim ve gayet önbelleğe alır.

İşte kod:

if(extension_loaded('zlib')){
ob_start('ob_gzhandler');
}
$offset = 60 * 60 * 24 * 31;
header('Content-type: text/css');
header ('Cache-Control: max-age=' . $offset . ', must-revalidate');
header ('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT');
ob_start("compress");
function compress($buffer) {
    // Remove Comments, White Space, End ;'s
    $buffer = preg_replace('#/\*.*?\*/#s', '', $buffer);
    $buffer = preg_replace('/\s*([{}|:;,])\s+/', '$1', $buffer);
    $buffer = preg_replace('/\s\s+(.*)/', '$1', $buffer);
    $buffer = str_replace(';}', '}', $buffer);
    $buffer = str_replace(' {', '{', $buffer);
    return $buffer;
    }

    include('global.css');

    if(extension_loaded('zlib')){
    ob_end_flush();
}

Then I'm simply referencing my php file as a css document on other pages. As you can see I've tried adding max age to the mix which also proves unsuccessful.

İşte yanıt başlıkları vardır

Date    
Tue, 21 Jul 2009 19:59:19 GMT

Server  
Apache/1.3.41 (Darwin) PHP/4.4.9

X-Powered-By    
PHP/4.4.9

Cache-Control   
max-age=2592000, must-revalidate

Expires 
Thu, 20 Aug 2009 19:59:19 GMT

Content-Encoding    
gzip

Vary    
Accept-Encoding

Keep-Alive  
timeout=15, max=93

Connection  
Keep-Alive

Transfer-Encoding   
chunked

Content-Type    
text/css

Kaçırdığım bir şey, ya da bu yapıyor hakkında gitmek için daha iyi bir yolu var mı?

Teşekkürler,

EDIT:

Dosya değiştirildi ve olup olmadığını algılayan bir komut dosyası o varsa uygun başlıklarıyla birlikte, bir 304 değil göndererek bu sorunu çözmüştür.

Arthur

2 Cevap

Başlıklarının kümesine bu eklemeyi deneyin: -

$offset = 60 * 60 * 24;
header('Content-type: text/css');
header('Cache-Control: max-age=' . $offset);
header('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT');
header('Last-Modified: ' . gmdate ("D, d M Y H:i:s", time()) . ' GMT');

Sorun önbellek denetim başlığında must-revalidate talimat oldu. Bu, istemci yeniden isteği neden olur css gerekli ve kod için kullanımı vardır her zaman başlığına If-Modified-Since ve bir 304 Modifikasyonlaştırılmamış yanıt durum kodu gönderiyor.

Yukarıdaki yaklaşım 1 gün önbellek süresini azaltır ve mutlaka REVALIDATE talimat ortadan kaldırır. O da (bir önbellek-Son Değiştirme veya ETag'a başlık eksik olduğunda bir öğe önbelleğe tercih edebilirsiniz) Last-Modified başlığını ekler.

Bu geliştirmek için sıkıştırmakta olduğunuz css dosyanın gerçek son değiştirilme zamanı bulmak ve Son-Modifiye başlık olarak bu gönderebilir. Siz kodunuzu son kez yapılması durumunda-Modified-Since css dosyaları değeri ile başlığının istekleri bir karşılaştırma içerebilir. Eğer aynı göndermek onları başlıklarını bu seti bulmak değil, aynı zamanda bir 304 Unmodfied durum göndermek ve tüm vücut göndermek yoksa. (Ben başka bir cevap yerleştirmek için PHP uzmanlara bırakacağım bu yüzden gerçekten bir PHP kişi değilim).

Onu almak ve buna göre max-age değerini ayarlamak için bir girişim yapmak gerekir önce bir istemci önbelleği css isterim ne kadar gerçekçi bir değerlendirme yapın.

Eğer Python / Django okursanız, django compressor kodunu okuyabilirsiniz. Bu içine birden fazla CSS dosyaları koyar. O CSSTidy CSS temizlemek başlattı gibi CSS kısmı görünüyor.