最近因為之前的項目需要,需要對一個PHP項目進行優(yōu)化,優(yōu)化之余,突然想嘗試著用memcache去實現(xiàn)頁面靜態(tài)化的思想會不會有效果那?
頁面靜態(tài)話其實就是在訪問一個頁面的時候,由于這個頁面很少會發(fā)生變化,就可以考慮將這個頁面生成一個靜態(tài)的html保存起來,當(dāng)再次訪問的時候直接訪問的是靜態(tài)的html,這樣的話會使網(wǎng)站的響應(yīng)速度大幅度的提高,對整個網(wǎng)站的并發(fā)以及性能起到了優(yōu)化作用。
動態(tài)生成html需要用到php的ob_start() 、ob_get_contents()函數(shù),其實這個過程就是將解析后的html從瀏覽器的緩存中取出來保存成html文件。
那么我們用memcache去實現(xiàn)會是什么樣的那,首先我們?nèi)〕鲆粋€頁面的唯一url地址(當(dāng)然我們之前的寫法,每個函數(shù)只實現(xiàn)一個功能),經(jīng)過md5作為唯一的key放入memcache緩存服務(wù)器中。當(dāng)下一次訪問的時候如果有直接取memcache中的緩存,如果沒有進行正常解析,并將結(jié)果存入memcache服務(wù)器。
下面是具體的實現(xiàn):
當(dāng)一個已經(jīng)成型的項目擺在你面前的時候,如何對這個項目進行優(yōu)化處理,你拿到的程序有可能是加密的,也有可能項目文件非常大,我們?nèi)绻粋€一個的去看源碼,去修改往往是不太現(xiàn)實的,在這里我的思路時增加一個中間層,如此處,我們將項目入口文件改為index2.php,重新建一個入口文件(index.php)和一個memcache 的優(yōu)化中間層(index1.php),用新的入口文件對index1.php 和 index2.php 做引入操作,加入緩存機制,對所有的訪問鏈接進行memcache緩存(采用頁面靜態(tài)化的思想),把頁面靜態(tài)化的思想去用memcache實現(xiàn),是一種很不錯的方案,但是會有一個缺點,這里使用url 做md5作為唯一的key,假如存在一種情況,這個url有多個不同的頁面調(diào)用,此時會出現(xiàn)一些其他情況,需要注意,可以采取一個內(nèi)置參數(shù),讓某些url不再緩存,而這種方法對于ajax來說是作用不大的,(此處為我自己的理解)因為ajax獲取的是一個參數(shù)傳遞的過程,中間并沒有經(jīng)過瀏覽器的緩存,所以我們得不到ajax的緩存。


其實memcache是一個簡單的內(nèi)存服務(wù)器,平時的使用中多將數(shù)據(jù)查詢結(jié)果放入其中,當(dāng)短時間內(nèi)頻繁請求的時候可以快速響應(yīng),從而緩解是數(shù)據(jù)庫的壓力。這里這種方法只是一種想法的實現(xiàn),相信會有更好的方法去提高響應(yīng)速度,比如我們還可以通過Opcodes,緩存php的中間碼避免php的多次解析來提高站點的響應(yīng)速度。但是自我感覺效果不太大,更大的效果是優(yōu)化sql語句,表結(jié)構(gòu),以及緩存查詢結(jié)果等(僅僅是從自己優(yōu)化的項目來說,只代表自己的觀點。)。
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答