Caching file datar tanpa downtime

Setiap kali konten baru diposting ke situs saya, saya membuat ulang cache file datar untuk 5 halaman pertama situs saya. Ini berfungsi dengan baik dan sangat mengurangi beban server.

Masalahnya adalah setiap kali cache file dibuat ulang, saya melihat sedikit penurunan lalu lintas, mungkin karena beberapa persentase kecil, namun tidak dapat diabaikan, dari ~2500 orang yang menjelajahi situs melihat setengah halaman yang dihasilkan.

Saya bertanya-tanya metode apa yang lebih baik untuk menghasilkan halaman-halaman cache ini di php tanpa risiko pengguna melihat halaman setengah tertulis.

EDIT:

Berikut adalah bagian dari file .htaccess saya yang menentukan apakah akan memuat file cache:

RewriteCond %{HTTP_COOKIE} (user)
RewriteRule (.*)? - [S=3] # Skip the below 2 lines if the above test passes
RewriteRule ^$ app/webroot/cache_static_html/cache_static_popular_results_1.php [L]
RewriteRule ^popular/page:([2-9])$ app/webroot/cache_static_html/cache_static_popular_results_$1.php [L]

person makeee    schedule 01.12.2011    source sumber
comment
Bisakah Anda membuat file datar secara offline, lalu memasangnya pada saat yang sama halaman dengan perubahannya naik?   -  person Dustin Davis    schedule 02.12.2011


Jawaban (2)


Symfony mengalami penderitaan yang sama ketika Anda melakukan pembersihan cache. Untuk menghindari masalah ini, kami melakukan pemanasan awal pada cache. Pertimbangkan hal berikut:

  • Buat direktori temp (pastikan untuk mengatur izin yang benar): cache_temp

  • Tambahkan kode untuk mengenali pemicu. Jika pemicu tersedia, setel direktori cache ke cache_temp (bukan cache_current). Contoh pemicu melalui http: http://mydomain.com?prewarm=1

  • Kode akan mengetahui untuk menghasilkan semua file cache di cache_temp dan bukan cache_current

  • Ganti nama cache_current menjadi cache_old

  • Ganti nama cache_temp menjadi cache_current

  • Hapus cache_old

person Mike Purcell    schedule 01.12.2011
comment
Hanya untuk memastikan saya mengerti, saya akan menyetel pemicu ke 1 sebelum saya memulai seluruh operasi ganti nama cache/ganti nama dan kemudian kembali ke 0 setelahnya sehingga saya tahu untuk memuat dari direktori cache_temp saat operasi sedang berlangsung? Adakah yang tahu bagaimana saya bisa memeriksa pemicu dalam aturan htaccess saya (lihat hasil edit saya di posting utama untuk aturan htaccess saya saat ini)? Idenya adalah untuk tidak perlu memuat kerangka kerja saya sama sekali jika mereka harus menyajikan file cache, sehingga mampu menangani pemeriksaan beberapa pemicu (atau jika file cache ada, file meta data..) dalam htaccess akan ideal. - person makeee; 02.12.2011
comment
Pemicu hanya akan diteruskan sehingga kode Anda akan mengetahui bahwa pemanasan awal diminta, sehingga Anda dapat memberi tahu kerangka kerja Anda untuk menghasilkan semua file cache di direktori cache_temp alih-alih direktori cache_curent. Dengan cara ini semua file cache tersedia dan siap digunakan sehingga Anda tidak akan menyajikan sebagian file cache dalam beban berat. - person Mike Purcell; 02.12.2011
comment
Tidak yakin dengan aturan penulisan ulang, setiap permintaan yang kami lakukan melewati kerangka kerja, lalu kerangka kerja menentukan file cache mana yang akan digunakan. - person Mike Purcell; 02.12.2011
comment
Sepertinya saya dapat menggunakan metode Anda dan di htaccess saya gunakan RewriteCond %{TIME_SEC} ‹ 5 sehingga memuat dari cache sementara selama interval 5 detik sementara tugas cron membuat ulang file cache. - person makeee; 04.12.2011

Saya menyarankan mungkin menggunakan solusi memcache. sepertinya Anda dapat menulis cache dengan cukup cepat dan tidak harus menggunakan metode file datar. Ingat!

person hookedonit    schedule 01.12.2011
comment
pastikan untuk membuat konten, sebelum melakukan buffering ke pengguna, dan menyimpannya dalam cache. - person hookedonit; 01.12.2011
comment
Saya menggunakan APC untuk men-cache bagian-bagian situs untuk pengguna yang masuk, tetapi untuk pengguna yang tidak masuk, saya melewatkan memuat seluruh kerangka situs (cakephp). Di htaccess saya, saya memeriksanya apakah cookie pengguna ada dan jika tidak, ia menulis ulang ke file cache di beranda. - person makeee; 01.12.2011