通過研究CDN緩存登錄信息問題對WP Super cache的一些新的領悟
編輯:狂族晨曦 來源:WordPress技巧 日期:2016-04-13 閱讀: 6,397 次 11 條評論 » 百度已收錄
先森之前也發文提到過,網站已經接入百度云加速,開啟了全站緩存。先森使用了兩天之后,感覺很不錯,就把體驗的結果寫了一篇文章發布了。但是突然又發現,先森終于用到了讓很多站長頭疼的動態數據的問題。
先森發現,CDN開啟網頁HTML緩存之后,一篇文章在沒有緩存的情況下,如果第一次訪問是先森自己訪問的,那CDN緩存的時候,就會把先森登錄后顯示的界面緩存下來。也就是訪客訪問的時候,會顯示“內容管理”、“登出”、評論框會顯示先森的頭像,前面兩個因為沒有登錄,所以點擊之后也沒有用,但是評論框顯示先森的頭像的時候,沒有更改昵稱和郵箱的選項,當訪客寫好評論提交的時候會提示“請輸入昵稱和郵箱”。先森的網站本來評論就少,這樣一來豈不是更收不到評論了。

動態判斷內容被緩存
為了解決這個問題,暫時又沒找到合適的解決方法,只得把CDN的緩存HTML給關了。在找解決方法的時候,先森又回頭研究WP Super Cache,這次對WP Super Cache又有了新的領悟,所以趕緊寫篇文章記錄一下。
對WP Super Cache新的領悟
1.WP Super Cache有兩種緩存機制
WP Super Cache 設置->內容里面,點擊列出所有已緩存的文件網頁會刷新出一個顯示框,里面有“最新的 WP-Cached 文件”和“最新的 Super Cached 文件”。之前先森以為都是沒有什么區別,或者說沒弄明白有什么區別。

WP Super Cache的兩種緩存
經過一番研究終于搞明白,WP Super Cache緩存的內容有兩種,一種是對已知用戶的,一種是對未知用戶的。這兩種緩存文件放置的位置和格式都不相同。
其實這一點,先森也發現WordPress大學中,倡萌早有提及。倡萌的介紹比先森自己寫的更規范易懂,但先森也發現有些描述也與現在的插件不吻合了,所以先森自己重新引用整理一下,讓先森自己和更多的人看明白:
WP Super Cache 緩存機制有兩種,WP Cache 和 Super Cache。
WP Cache 緩存時,會在你的“wordpress 安裝文件夾/wp-content/cache/”文件夾下生成一系列wp-cache-xxxxxx.php格式的文件。而且先森發現,每個不同的已知用戶即使他們訪問同一個頁面,都為單獨的為他們緩存一個新的文件,因為他們的昵稱、郵箱、網址是不同的;

為已知用戶緩存
Super Cache 緩存時,則在你的“wordpress 安裝文件夾/wp-content/cache/supercache/”文件夾下生成對應每一篇文章或者標簽等的目錄。名稱為xxx.html,取決于你的文章ID是怎么設置。目錄下面就是靜態的 index.html 文件。

為未知用戶緩存
當你一個訪問者來的你的站點,他沒有登錄或者也沒有留言,這樣他得到是一個在 WordPress cache 文件夾下的 supercache 子文件夾下的純靜態文件,其實你都可以自己到上面的 supercache 目錄下去查看同樣的永久鏈接的 HTML 文件的備份。
如果要判斷一個頁面是否已經被緩存了,在頁面中右鍵查看該頁面的源代碼,最后一行會有“Cached page generated by WP-Super-Cache+緩存時間”這行字,就像下面這行代碼一樣:
<!-- Dynamic page generated in 0.840 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2016-04-13 17:48:08 -->
而如果你開啟了壓縮頁面,緩存會多一行如下代碼:
<!-- Compression = gzip -->

判斷網頁是否被WP Super Cache緩存
2.WP Super Cache高級設置雜項中的兩個設置的作用
搞明白了WP Super Cache的兩種緩存機制之后,加上CDN緩存HTML出現的問題,先森又對WP Super Cache高級設置里,雜項的兩個設置的作業有了領悟。

兩個雜項設置的作用
上圖紅框中的兩個設置,以前先森不知道這兩個設置所對應的情景是怎樣的,現在終于有所感悟了。
“不要為已知用戶緩存”的作用。很明顯,開啟之后,在“wordpress 安裝文件夾/wp-content/cache/”文件夾下就不會生成一系列wp-cache-xxxxxx.php格式的文件了。在開啟CDN緩存HTML文件后,緩存期內,誰第一個訪問一個頁面,后來者顯示的都是他打開后顯示的頁面。所以即使繼續為已知用戶緩存,他們也訪問不到為他們單獨緩存的界面。因此,勾選這個選項就很有必要了。
“讓已知用戶匿名使他們瀏覽的內容是緩存文件”的作用。上面也說了,開啟CDN緩存HTML文件后,緩存期內,誰第一個訪問一個頁面,后來者顯示的都是他打開后顯示的頁面。而產生這個問題的原因,就是WordPress會記住評論者的信息,這些人就成為了WP Super Cache中的已知用戶,他們在打開文章的時候,會自動填上昵稱、郵箱等內容。而勾選了這個選項之后,這些已知用戶訪問頁面的時候,會強制匿名,讓他們也成為未知用戶。
其實勾選這兩個設置之后,基本能解決CDN緩存昵稱、頭像的問題,但是這樣也導致了已知用戶們每次訪問都會重新輸入一系列信息,對用戶體驗非常之不好。對于這一點,先森也大致找到了解決方法,等研究好了再分享出來。
2016年4月22日更新
針對CDN緩存問題,先森將近期的解決方法更新上來,有興趣的朋友可以去看看:
3.緩存的機制
這一點的名字可能很多人會沒看懂,其實先森是自己進入了一個牛角尖,沒有對緩存的機制徹底領悟。先森一直在想,WP Super Cache是怎么做到讓訪客訪問的"www.域名.com/*.html"加載的內容變成“www.域名.com/wp-content/cache/supercache/*.html”的呢?也就是怎么讓頁面的內容直接訪問到緩存的內容。
開始先森在想,是不是301跳轉什么的,先森記得有個什么隱形跳轉,就是鏈接不變,內容變了。后來先森想明白了,WP Super Cache會將規則寫入.htaccess中,用這個規則進行訪問緩存文件。
可能有人會對這第三點感到很不屑,但是先森覺得自己弄明白了一件事,還是非常高興的。
轉載請注明出處來自http://www.cnidcc.cn/tgyjcdnhcdlxxwtd_wpsupercache_dyxxdlw.html

川公網安備 51011202000104號
htaccess里有規則,重寫了。
@免費資源部落: 哇,小站終于迎來了第一位我所熟知的名博博主,感謝光臨。
“其實勾選這兩個設置之后,基本能解決CDN緩存昵稱、頭像的問題,但是這樣也導致了已知用戶們每次訪問都會重新輸入一系列信息”,這個找到方法了嗎?用百度cdn設置所有都緩存后,“誰第一個訪問一個頁面,后來者顯示的都是他打開后顯示的頁面。登錄狀態都被緩存了…”
@龍笑天: 這個找到了的,在這里:用cookie解決網站開啟CDN緩存之后已知用戶頭像昵稱被緩存等系列問題//www.cnidcc.cn/ycookiejjwzkqcdnhczhyzyhtxncbhcdxlwt.html
@狂族晨曦: 嗯,看到了,總感覺不大好(登錄者會變成沒登錄了),就沒弄,只開啟了cdn的細致緩存。ps:你博客的表情圖標插入不了,Firefox 28。
@龍笑天: 這個就見仁見智了,根據自己的需求設置了。
剛才測試了一下,火狐確實有問題,點擊表情都新窗口打開空白頁。我解決一下,謝謝提醒。
我開始用w3tc來緩存!
棄用wp super cache了,我的流量太少,沒必要用那個了。
俺哪里開啟的是整站CDN緩存,時間設置不是很長。
w3tc比這個強大些,我感覺wsc是用過最笨重的一個,可為啥所有人都在推這個插件?