Otomatik sürüm statik içerik

3 Cevap php


I'm developing a PHP site that serves static content from a cookie free domain (Teşekkürler SO Blog!), this domain serves content with a high cache which among other things means that I'm unable to change content (JS, CSS and images) without invalidating that cache. Currently I do this by appending ?revision (e.g. style.css?19) to the end of the static URL, currently I'm doing this manually which is obviously far from convenient.

Bu tamamlamak için önerilen yol ne olmalıdır? Ben Subversion kullanıyorum ve benim anlayıştan ben revizyon numarasını kapmak için kullanabileceğiniz çeşitli araçlar var - ama nasıl PHP içine bu alma hakkında gitmek istiyorum (her sayfa yükleme bu çalıştırmak akıllıca çok Performansın görünmüyor?). Ben büyük olasılıkla yapı sistemi çeşit kullanarak gerektiğini tahmin ediyorum.

Herhangi bir öneriler büyük mutluluk duyacağız.

Teşekkürler

3 Cevap

SVN keyword substitution çözüm olabilir. Bu gibi kullanabilirsiniz: Önce bir yere sürümünü kullanmak istediğiniz yerin yakınında, PHP kodu için aşağıdaki kodu ekleyin. Bu gibi:

$svn_version = '$Revision$'; // remember to use single quotes!

Şimdi bu dosyayı işlemek. Ve sonra yeniden açık bu. Yukarıdaki satır şimdi gibi bir şey değiştiğini gözlemleyin:

$svn_version = '$Revision: 66232 $';

SVN anahtar kelime etiketi tanınan ve revizyon numarası ile değiştirilir. Bir ödeme ya da ihracat yaptığınızda Bu etiket artık en son sürüm numarası ile bu dosyayı işlemek her zaman güncel olacak, ayrıca sürüm numarasını içerir.

Şimdi, sadece bu dize dışında bu sayıyı almak için küçük bir dize manipülasyon yapmak gerekir. Kendini anlamaya olabilir emin değilim.

PHP dokunmadan gerçek css / js dosyalarını güncellemek Tabii ki, bu alışkanlık iş. Ve kolayca çözülemez. PHP CSS / JS değiştirmek her zaman değiştirebilir. Ya evet iliked, bazı yapı sistemi için gidebiliriz.

Her neyse, ben bu işe bazı fikirler var umuyoruz.

Mükemmel bir PHP script ve CSS / Javascript dosyalarının sürüm için kullanılabilir. Htaccess kümesi vardır. Daha sonra dosyanın değiştirilmiş olup olmadığını görmek için denetler bir dosya, combine.php, tüm CSS / JS isteklerini yeniden çalışır. O varsa, dosyanın yeni bir önbelleğe alınmış sürümünü oluşturur. Modifiye edilmemiş ise, sadece dosyanın önceden önbelleğe alınmış sürümünü gönderebilirsiniz. Bu script başka performans iyileştirme http isteklerinin sayısını en aza indirmek yararı vardır.

Görüntüler daha zordur - Eğer / resim adları için css dosyaları yoluyla yerine ve bunları güncelleştirmek olabilecek bir temel düzeyde. Bu bir yapı komut içine dahil edilebilir. SASS sadece tek bir yerde görüntü adlarını güncellemeniz gerekir, yani CSS içinde değişkenler destekleyen bir css işleme sistemidir.

Son olarak, bir sorgu dizesi bir isteği dahil olup olmadığını, tarayıcı başlıklarını sona görmezden ve yine sunucu başvurun, böyle Fiddler gibi bir araç kullanırken fark ettim, bu yüzden bir yer için daha iyi olabilir alt, yani yerine

/css/main.css?16

/css/16/main.css

Bir fikir sadece (revizyon numarasını yani) bir sayı içeren bir metin dosyası olmasıdır. (Istediğiniz gibi bir SVN sürüm numarası ya da sadece bir sayaç gibi) Her güncelleme, bu sayıyı artırmak.

Yani önerdiği gibi sadece devam ettik; Eğer dosyada sayısını okumak, ve csss veya diğer dosyalara GET argüman olarak geçmesi. Bir uygulanan, sadece revizyon numarasını (bunu kullanmak durumunda ve belki önbelleğini temizleyin) her sayfada güncellemek için güncelleme var. Oldukça kolay :)