PHP: devlet ile önbelleğe sayfaları

7 Cevap php

Ben bir kaç sayfalarında önbelleğe kullanmak istiyorum:

  1. Bireysel blog sayfaları
  2. index.php

Ancak, benim sistemi tasarlamaktan sonra, ben sayfaların başlıkları (aka, "Merhaba, johnnie@example.com" sen imzalı eğer gibi bir şey söylüyor) çok hafif durumuna göre değişiklik olduğunu fark etti. Bu nedenle yanlışlıkla yanlış kullanıcı adı görüntülemek veya kontör e-posta olmadığından emin olmak istiyorum.

Ben bir sayfada önbelleklenmemelidir istiyorum böyle küçük bir şey tüm sitemde şey önbelleğe beni zorlamak gerektiğini bir utanç.

Bunu nasıl etrafında alabilirsiniz?

7 Cevap

Eğer önbelleğe yapmak istediğiniz NEDEN düşünmek isteyeceksiniz. Önbellekleme bir optimizasyon ve gerekirse gibi, sadece yapılmalıdır.

Eğer emin değilseniz bu gerekli, geri dönüp emin olmak için biraz araştırma yapmak. Bu test laboratuarı yapım sınıf donanım üzerinde performans testleri içerecektir.

Eğer gerekli olduğundan emin olduğunuzda, o zaman ihtiyacınız ne kadar gelişme bilecek. Sen önbelleğe sayfaları sadece PARÇA düşünebilirsiniz - bu tam sayfaları önbelleğe daha ön-uç ve önbelleğe alma katman üzerinde daha az etkili olacak, ancak daha yüksek bir önbellek isabet oranı elde edecek şekilde arka ucundan daha fazla yük alabilir.

Bir kişiselleştirilmiş bir öğesi vardır sayfasını (örneğin, Merhaba Johnnie) ve değişiklikler nispeten seyrek hesaplamak için pahalı ama bir kısmını düşünün ve tüm kullanıcılar için aynıdır - bazı hisse senedi fiyatları söylüyorlar.

(Demek) 5 dakika boyunca sayfanın hisse senedi fiyatları kısmını önbelleğe ve sayfanın kişiselleştirilmiş parçayı her zaman üretebilir. Bu şekilde hisse senedi fiyatları için arka uç basmayın ve hala doğru kişilere doğru sayfayı gösterebilirsiniz.

Çoğu şirket, ön-uç üreten (hüzünle birlikte HTML yapışmasını zaman alıcıdır) oldukça hesaplama pahalı ama çok iyi ölçekler bulmak - bu yeterince hızlı değil zaman size sadece daha fazla kalay ekleyebileceğiniz anlamına gelir. Öte yandan, arka-uç sunucular çok daha fazla iş yapabilir, ama çok az iyi ölçek - örneğin veritabanları - ölçeklenebilirlik sınırlamak hangi ile uğraşmak tutarlılık / senkronizasyon sorunları vardır çünkü sadece daha fazla sunucu ekleyebilirsiniz olamaz.

Ben birkaç kez kullandım bir olasılık şudur:

  • sayfa oluşturmak ve "Hello, %%PLACEHOLDER_NAME%%" yerine gerçek adı gibi bir şey içeren, önbellek içine saklayın.
  • when a user loads the page :
    • önbelleğe sayfasını yüklemek
    • kullanıcı adı ile bir (quick) str_replace to replace the %%PLACEHOLDER_NAME%% etiketi yapmak
    • Eğer bu şekilde creaeted ettik "kısmen dinamik" sayfa gönderebilirsiniz.

Bu, bazı PHP manipülasyonlar yapmak zorundasınız demektir, ve tüm sayfayı önbelleğe ne de statik bir dosya olarak hizmet edemez ...

Isim oturumda saklanır eğer, örneğin, herhangi bir veritabanı sorgu yapmak zorunda olmayacak - ... Ama aynı zamanda, neredeyse tam sayfa önbellekte olacağı anlamına gelir.

(Some will say it's a bit "dirty" -- but it works really well when there is only one or two small portions that have to be dynamic, which seems to be the case, in your situation)


And if you, one day, start having "too many" of those placeholders, you'll have to consider not caching the page, but the data that are needed to generate the page.

Bu önbellekten veri almak ve sayfa oluşturmak için onları bir arada tutkal gerekecek demektir - verilerinizi en önbellekten yüklenmesine olacak gibi ancak, bu şekilde, hala, SQL sorguları bazı sayısını kaçınmak gerekir.

Sen orada en Önbellek Kütüphaneleri kullanılan Cache_ID veya Cache_ID_Key gibi kullanıcı belirli parametreleri kullanabilirsiniz:

Örnek:

$id = sh1($userMail);
$cache->save($id);

Bu, en az bir örnektir. Fikir "anahtar kullanıcının belirli bilgileri içermelidir", her kullanıcı için benzersiz olduğunu.

Eğer fikir olsun umuyoruz.

Hangi motor şablonu kullanıyorsunuz? Smarty? eğer öyleyse o zaman böyle bir web sayfasının dinamik bazı bölümlerini önbelleğe değil zorlayabilir

{nocache}
Hello {$username} This is your Email {$email}
{/nocache}

Nereye önbelleğe istiyorsun?

Sizin sunucuda? Sen Smarty bakmak isteyebilirsiniz.

Vekiller / istemcileri mi? Ardından, html sayfa önbelleklenebilir yapmak boş divlere ile herhangi bir dinamik içeriğini değiştirmek ve javascript kullanarak değerleri yazmak - javascript çerezleri bazı bilgi önbelleğe olabilir ve geri kalanı için geri sunucuya gidin.

Oturum odaklı önbelleğe alma yapmak için nasıl: 'Cookie Değişir' başlığında ya da bir göz var.

C.

Bu ne istediğiniz için muhtemelen overkill dürüst, ama ESI karşılaştığınız sorunları giderir.

Sadece ne kadar trafik kaydediliyor: Ancak, aynı zamanda bu düşünebilirsiniz? Birçok web uygulamaları için, + trafiğinin% 90'ı anonim, anonim ve tüm sayfaları aynı kılıyor. Sadece anonim sayfaları önbelleğe tüm çok iş olmadan, size aradığınız yararına çok verebilir.

Ayrıca, birçok sayfalar arasında yeniden olabilir sayfanın herhangi küçük parçalar önbelleğe düşünün - örneğin, tüm sayfalarda gösterir, ve üretmek için 200 ms alır bir etiket bulutu varsa, bu önbelleğe.

Tüm sayfayı önbelleğe etmeyin - sadece gerçek önbelleğe (bir veritabanı bağlantısı açma sizi kurtaracak örneğin bölüm) ihtiyacı kısmını önbelleğe. Sonra sayfanın geri kalanı hala dinamik olabilir ve ben bir oturum değişkeni adını saklıyoruz zannedebilir, bu yüzden hala örneğin yapabilirsiniz

echo "Hello ".$_SESSION['username'];