WordPress終極提速之靜態(tài)頁內(nèi)存緩存

2013-08-06 09:19:19來源:linuxde作者:

大多數(shù)WordPress個人博客站長都會使用諸如Hyper Cache、WP Super Cache等緩存插件,使用這類插件可以將PHP動態(tài)頁面在首次訪問時生成html靜態(tài)頁面并存儲在硬盤中,當(dāng)其他訪客再次訪問時直接讀取該靜態(tài)頁面,這樣不需

大多數(shù)WordPress個人博客站長都會使用諸如Hyper Cache、WP Super Cache等緩存插件,使用這類插件可以將PHP動態(tài)頁面在首次訪問時生成html靜態(tài)頁面并存儲在硬盤中,當(dāng)其他訪客再次訪問時直接讀取該靜態(tài)頁面,這樣不需要再次通過PHP生成動態(tài)頁面也不需要再從數(shù)據(jù)庫中讀取數(shù)據(jù),大幅降低系統(tǒng)資源消耗,且大幅提升了頁面打開速度。

如果不考慮服務(wù)器帶寬,那最大的瓶頸就是硬盤了,因為這些生成的靜態(tài)頁面都存儲在硬盤上,訪問量大時,硬盤的讀寫速度低會導(dǎo)致網(wǎng)站訪問緩慢,如何在較大的訪問量下依然能保持頁面的迅速打開呢?如果你使用VPS、云服務(wù)器或獨立服務(wù)器,繼續(xù)閱讀下去,你會有大收獲:

先來測測我使用的服務(wù)器硬盤讀寫速度:

# dd if=/dev/zero of=bigfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 19.8486 s, 26.4 MB/s
再來對比一下服務(wù)器內(nèi)存的讀寫速度:

#cd /dev/shm
# dd if=/dev/zero of=bigfile bs=1M count=500
245+0 records in
244+0 records out
256016384 bytes (256 MB) copied, 0.141606 s, 1.8 GB/s
26.4MB/s與1.8GB/s,天壤之別!如果我們把這些生成的靜態(tài)文件放到內(nèi)存里緩存,效果不言而喻。

幸運的是Linux系統(tǒng)為我們提供了這樣的解決辦法,那就是tmpfs文件系統(tǒng),tmpfs可以直接使用內(nèi)存,同時在內(nèi)存不夠時使用swap分區(qū)來存儲。另外需要注意的是tmpfs不具備持久性,重啟后數(shù)據(jù)不保留,請務(wù)必注意,不過我們只用它來存儲緩存文件,即使文件丟失也不影響網(wǎng)站訪問,完全無風(fēng)險。

wordpress如何使用tmpfs:

/dev/shm/是一個設(shè)備文件,它使用就是tmpfs文件系統(tǒng)(注意:在CentOS和Redhat下,/dev/shm目錄是一個鏈接,指向/run/shm目錄,在Ubuntu系統(tǒng)下tmpfs文件系統(tǒng)對應(yīng)的是/run/shm目錄,可以使用df命令查看),因為/dev/shm/這個目錄不在硬盤上,而是在內(nèi)存里,它就所謂的tmpfs?赏ㄟ^命令 df -h 查看到,tmpfs默認(rèn)大小為物理內(nèi)存的一半,當(dāng)然也可以根據(jù)實際情況調(diào)整。

首先為wordpress的緩存文件建立一個目錄wpcache

# mkdir /dev/shm/wpcache
賦予讀寫執(zhí)行權(quán)限

# chmod 1777 /dev/shm/wpcache
將tmpfs掛載到wordpress緩存插件生成的/cache目錄下

# mount --bind /dev/shm/wpcache /home/wwwroot/amznz.com/wp-content/cache
# ls -ld /dev/shm/wpcache
返回類似下面的內(nèi)容說明掛載成功

drwxrwxrwt 3 www www 60 Jul 31 22:50 /dev/shm/wpcache
此時緩存插件會重新生成靜態(tài)頁面文件,過一段時間后,通過命令

# df -h
即可查到tmpfs的使用情況。

需要注意的兩個問題:

根據(jù)實際情況(內(nèi)存大小、文章數(shù)量)調(diào)整wordpress緩存插件的中的緩存頁面到期時間,否則會占用太多內(nèi)存;
注意添加swap分區(qū),以防內(nèi)存不夠用時備用,4G物料內(nèi)存以下設(shè)置swap分區(qū)大小為2G即可。
OK!來測試一下:感受一下,速度有沒有更快一些呢?當(dāng)然你也可以參考此方法運用在其它類型的網(wǎng)站程序上。

之前在網(wǎng)上看到有人在wordpress上使用memcache緩存模塊來優(yōu)化,咱這里也做了個測試,使用memcache緩存模塊與使用共享內(nèi)存/dev/shm的讀寫測試對比,不多說,自己看吧:

測試一:讀取100000次數(shù)據(jù)

--------------------------------
//使用memcache
require_once 'tools/cache/memcached-client.php';
$mem = new memcached($options);
$mem->set('x' , '0');
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){ $mem->get('x');
}
$end = microtime(TRUE);
echo round($end - $time , 2);
--------------------------------
連續(xù)運行三次腳本,結(jié)果分別為10.5,10.46,10.63

--------------------------------
//使用共享內(nèi)存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
$data = file_get_contents('/dev/shm/php_system/vipcache');
}
$end = microtime(TRUE);
echo round($end - $time , 2);
--------------------------------
連續(xù)運行三次腳本,結(jié)果分別為3.2,3.25,3.2
測試二:寫入100000次數(shù)據(jù)

--------------------------------
//使用memcache
$mem = new memcached($options);
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){ $mem->set('x' , '0');
}
$end = microtime(TRUE);
echo round($end - $time , 2);
--------------------------------
連續(xù)運行三次腳本,結(jié)果分別為10.93,9.22,9.41,與讀取測試結(jié)果相差不大,說明memcache的讀與寫時間是差不多的

--------------------------------
//使用共享內(nèi)存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
$data = file_put_contents('/dev/shm/php_system/vipcache' , '0');
}
$end = microtime(TRUE);
echo round($end - $time , 2);
--------------------------------
連續(xù)運行三次腳本,結(jié)果分別為2.5,2.52,2.53,寫跟讀的性能一樣優(yōu)越
測試結(jié)論:直接操作本地的共享內(nèi)存,速度比memcache要快很多。

關(guān)鍵詞:WordPress

贊助商鏈接: