Apakah Solusi ini untuk Cache vs Cookie Akan Membuat Saya Kesulitan?

23

Saya telah datang dengan solusi sementara untuk tidak persis umum, tetapi jauh dari masalah yang belum pernah terjadi sebelumnya dengan interaksi solusi caching WP populer dengan cookie, dalam hal ini cookie komentar WP standar. Solusi saya juga mendukung pengecualian "pengguna terkenal" yang jarang didefinisikan untuk melayani file dalam cache. Apakah itu dapat digunakan atau tidak, saya pikir itu menjelaskan dan mungkin belajar mengapa itu ide yang buruk mungkin secara umum bersifat instruktif.

Saya telah menguji metode saya dengan WP Super Cache, W3 Total Cache, dan Comet Cache. Salah satu yang saya uraikan sendiri secara detail saat mempelajari masalah ini adalah WP Super Cache ("WPSC" selanjutnya), jadi saya akan menggunakannya sebagai contoh utama saya.

LATAR BELAKANG

Ketika utas komentar standar WP diatur untuk memungkinkan pengunjung berkomentar, kuki komentar ditetapkan untuk setiap komentator yang bukan pengguna terdaftar dan login, dengan hak istimewa komentar aktual akan dikenakan pemeriksaan lebih lanjut. Dalam apa yang saya percaya adalah konfigurasi yang paling umum, seorang komentator hanya perlu memberikan nama dan alamat email. Ini disimpan dalam dua cookie browser, biasanya comment_author_ . COOKIEHASH, dan comment_author_email_ . COOKIEHASH. COOKIEHASHdidefinisikan sesuai dengan opsi pengguna.

Jika diatur untuk mengirimkan file yang baru dibuat ke "pengguna yang dikenal," WPSC menentukan apakah akan menyajikan file yang di-cache berdasarkan beberapa pemeriksaan: Pengguna yang masuk mendapatkan file baru, dan begitu juga pengunjung "yang dapat berkomentar." Yang terakhir ini terutama diidentifikasi oleh kehadiran di browser comment_author_cookie mereka yang tidak secara spesifik atau unik diidentifikasi untuk pengguna tertentu oleh COOKIEHASH(biasanya tetapi tidak selalu versi MD5-encoded dari "siteurl" yang direkam dalam opsi situs).

Apa yang tampaknya menjadi bagian penting dari kode WPSC, dari wp-cache-phase1.php LL371-383, menggunakan pola RegEx untuk mendapatkan string, bersepeda melalui cookie:

$regex = "/^wp-postpass|^comment_author_";
if ( defined( 'LOGGED_IN_COOKIE' ) )
    $regex .= "|^" . preg_quote( constant( 'LOGGED_IN_COOKIE' ) );
else
    $regex .= "|^wordpress_logged_in_";
$regex .= "/";
while ($key = key($_COOKIE)) {
    if ( preg_match( $regex, $key ) ) {
        wp_cache_debug( "wp_cache_get_cookies_values: $regex Cookie detected: $key", 5 );
        $string .= $_COOKIE[ $key ] . ",";
    }
    next($_COOKIE);
}

Sekarang, jika saya bekerja secara ketat di PHP, saya bisa memproduksi ulang atau menghubungkan ke fungsi-fungsi inti WP, dan mendapatkan comment_author_ . COOKIEHASHset normal dengan templat komentar, tapi saya bekerja di jQuery menggunakan plug-in jQuery Cookie. Namun, seperti yang Anda lihat jika Anda melihat RegEx, fungsi WPSC tidak peduli tentang COOKIEHASH: Itu puas jika bertemu comment_author_.

SOLUSI TENTATIF SAYA

$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );

Bagi mereka yang tidak terbiasa dengan jQuery Cookie: Di atas menetapkan cookie sesi sederhana dengan key = comment_author_proxyhashdan value = proxy_author, bagus untuk seluruh situs. (Juga, bagi mereka yang menggunakan jQuery Cookie dan WP, selain menggantikan jQuery yang sudah dikenal $untuk WP jQuery, saya juga sudah siap $.cookie.raw = true;.)

Saya menambahkan baris ke skrip jQuery saya, dan, voila! , WPSC, W3 Total Cache, dan Comet Cache semuanya bertindak seperti yang saya inginkan. Setelah saya menggunakan skrip, dan memuat ulang, saya mendapatkan halaman baru. Jika saya menempatkan komentar nyata, cookie normal comment_author_dan comment_author_email_diatur, dan tampaknya tidak ada masalah dengan keberadaan bersama.

Mungkin satu cacat adalah bahwa cookie "proxyhash" akan melakukan perjalanan dengan pengguna selama dia menjaga sesi terbuka, tetapi itu tidak membuat saya merasa sebagai masalah besar - atau bahkan layak peringatan. Saya tentu saja tidak pernah mendengar seseorang mengeluh tentang hal seperti itu terjadi pada salah satu cookie biasa.

Tapi mungkin ada sesuatu yang saya lewatkan, dan akan menemukan banyak kesengsaraan saya, jika berpotensi untuk membangun saya juga. Atau mungkin ada cara praktik terbaik yang relatif sederhana bagi saya untuk mereplikasi COOKIEHASHdi jQuery, juga mencakup kasus penggunaan alternatif ... atau untuk mencapai efek akhir yang sama dengan cara lain - cara lain untuk mengelabui plug-in caching untuk merawat pengunjung. sebagai komentator ...

Jika tidak, adakah alasan bagus untuk TIDAK mendorong ini atau sesuatu yang dekat dengannya ke alam semesta melalui plug-in?

CK MacLeod
sumber
3
Alat peraga untuk pertanyaan yang diteliti dan didokumentasikan dengan baik. Namun, saya merasa sifat pertanyaan itu mungkin membuka lebih banyak diskusi daripada jawaban yang pasti (di luar topik: terutama berdasarkan pendapat). FWIW menurut pendapat saya, saya tidak melihat ada yang salah di sini - pada akhirnya Anda hanya menetapkan satu cookie umum tanpa data pribadi.
TheDeadMedic
Terima kasih banyak atas masukannya. Saya akan berterima kasih atas diskusi seperti itu, dan saya akan menandai sebagai jawaban yang baik yang a) menunjukkan masalah dengan metode "cookie umum" ini, b) menyediakan cara alternatif untuk mencapai efek yang sama, atau c) asalkan bermanfaat wawasan tentang pertanyaan teknis mendasar yang terkait dengan "pengguna yang dikenal."
CK MacLeod
Sebagai catatan, Anda dapat menggunakan wp_localize_scriptuntuk mengirimkan hash cookie ke Javascript Anda sehingga Anda dapat menggunakan cookie "asli" alih-alih proxyhash. Jika tidak, ini adalah masalah yang sangat menarik dan solusi Anda tampaknya solid, meskipun cookie + cache selalu sangat rumit sehingga sulit untuk mengatakan apakah itu solusi yang "tepat" atau jika ada sesuatu yang terlewatkan. Penelitian hebat!
phatskat
Pertanyaan menarik - Saya tidak bisa memikirkan apa pun tentang hal ini yang akan membuat Anda mendapat masalah, tetapi bisakah saya bertanya mengapa Anda ingin memotong cache dengan cara ini? Memberi pengguna kemampuan semacam ini mengalahkan tujuan memiliki cache halaman penuh untuk memulai. Lebih lanjut, cookie tambahan menambah ukuran permintaan (meskipun minimal), ketika hasil yang sama dapat dicapai dengan konfigurasi cache yang umum dengan hanya menambahkan setiap kueri permintaan ke URL, misalnya mysite.com?a. Hanya $ 0,02 saya ...
ssnepenthe
ssnepenthe: Mungkin saya seharusnya menjelaskan: Sebuah plugin yang saya kembangkan ketika saya menulis pertanyaan - wordpress.org/plugins/commenter-ignore-button - menggunakan jQuery untuk memungkinkan pengunjung menempatkan komentator terpilih "di abaikan." Tindakan awal menerapkan pemformatan CSS ke utas komentar, dan kemudian bergantung pada cookie untuk menyimpan peruntukan dan keberadaannya untuk menduplikasi efek (melalui PHP) selama penyegaran berikutnya sampai kadaluarsa cookie. Dalam versi halaman yang di-cache, efeknya tidak akan terdaftar. Jadi, ya, ini adalah bentuk penghilang cache lokal yang disengaja.
CK MacLeod

Jawaban:

1

Solusi Anda dengan cookie comment_author_proxyhash tentu saja akan berfungsi secara teknis - semua plugin caching yang saya tahu tidak menganalisis nilai hash dan hanya akan menghentikan pengiriman konten yang di-cache berdasarkan comment_author_ * cookie cookie.

Masalahnya di sini adalah bahwa fungsi caching halaman adalah sesuatu yang sangat dibutuhkan oleh situs web dan seringkali caching halaman dikonfigurasikan dengan tepat karena kinerja WordPress telanjang tidak cukup dan bahkan dapat membuat crash server pada waktu puncak. Tergantung pada sifat konten situs web, tetapi pemilik situs terkadang tidak dapat membayar perangkat keras yang diperlukan untuk menangani semuanya melalui kode PHP / WP. Dengan kata lain, sebanyak mungkin lalu lintas harus dilayani dari cache halaman bila memungkinkan. Dari latihan saya dapat mengatakan bahwa kita sering harus mengidentifikasi dan menonaktifkan plugin yang melakukan pengecualian cache.

Tentu saja itu tidak selalu memungkinkan, tetapi cobalah untuk bekerja dengan halaman yang di-cache kapan pun memungkinkan. Misalnya Anda dapat menyembunyikan divtag dengan komentar yang ingin Anda abaikan melalui javascript, atau blok seluruh komentar ajax-ify.

Bagaimanapun Anda tidak perlu menandai pengunjung sebagai komentator, tetapi berhentilah melakukan caching karena alasan logika kustom Anda. Jadi lebih baik menggunakan cookie unik dan menjadikannya sinyal pengecualian cache. W3 Total Cache memiliki opsi "Tolak cookie" untuk itu, tetapi tidak plugin lain dari daftar Anda sehingga Anda akan memerlukan hack seperti yang Anda sarankan.

WowPress.host
sumber
Terima kasih! Anda mengangkat sejumlah masalah yang valid, tetapi saya akan mengatakan bahwa apa yang kode ini lakukan, pada dasarnya, adalah memperlakukan setiap pengunjung yang berpartisipasi dalam utas komentar cukup untuk membuat seseorang "diabaikan" atau "bisu" sebagai "pengguna yang dikenal / komentator. " Jika sebuah situs tidak dapat menangani partisipasi seperti itu, maka kemungkinan situs tersebut juga tidak dapat menangani templat komentar WordPress standar (dan komunitas komentar)!
CK MacLeod
Pikirkan Anda ada di sini, sementara tentu saja tidak tahu pasti bagaimana pengguna Anda menggunakannya. Btw banyak situs web lalu lintas tinggi mengeluarkan pemrosesan komentar mereka ke permintaan terpisah atau bahkan layanan pihak ketiga dengan tujuan untuk menampilkan konten artikel dengan cepat dan malas memuat konten komentar dinamis nanti. Anggap itu sebagai ide offtopic untuk mungkin versi lebih lanjut dari plugin Anda :)
WowPress.host