標籤:載入 常用 運行 conf 接收 squid服務 ext 應用服務 不用
1、全頁面靜態化緩衝
也就是將頁面全部產生html靜態頁面,使用者訪問時直接存取的靜態頁面,而不會去走php伺服器解析的流程。此種方式,在CMS系統中比較常見,比如dedecms;
一種比較常用的實現方式是用輸出緩衝:
Ob_start()
******要啟動並執行代碼*******
$content = Ob_get_contents();
****將緩衝內容寫入html檔案*****
Ob_end_clean();
2、頁面部分緩衝
該種方式,是將一個頁面中不經常變的部分進行靜態緩衝,而經常變化的塊不緩衝,最後裝配在一起顯示;可以使用類似於ob_get_contents 的方式實現,也可以利用類似ESI之類的頁面片段快取策略,使其用來做動態網頁面中相對靜態片段部分的緩衝
任何一個Web網站的內容都是在不斷更新和變化,但這並不意味這這個網站的內容就是動態內容,事實上,動態內容是指使用者每次點擊 相同的連結時取的的內容是由Web伺服器應用程式產生的,如常見得ASP,JSP等,與此相對應,靜態內容一般就是指由文本、映像和多媒體組成,在使用者每 次單擊相應連結時基本保持不變。現在解決動態內容緩衝的最新技術就是通過ESI技術來設計網站的內容。 ESI技術工作原理 動態產生的內容能為使用者帶來豐富精彩的頁面,網站開發人員也可以更容易和更靈活地控制相關的內容,但在享受這些便利的同時,也增加了 網站資料庫和應用伺服器的處理壓力的。當網站的訪問量增大後,硬體和資料庫的投資是非常巨大的,即使如此,仍然有可能導致頁面的嚴重延遲甚至訪問失敗。 使用者訪問動態產生的內容速度慢的根本原因在於動態產生的內容需要經過一個複雜的過程,首先,根據使用者請求的不同將使用者的請求分配 到應用伺服器相應的軟體模組中,軟體模組必須通過運算決定需要從資料庫中提取什麼樣的資料給使用者,然後再從資料庫中提取出相應的資料按照定義的格式傳給用 戶。這些冗長的過程導致使用者訪問速度變慢,同時增加了伺服器的負載。 在實際環境中,一個動態產生的頁面,當中可能只有少量的內容是頻繁變化的或是個人化的,對於傳統的Cache伺服器來說,為了能 夠保證頁面的時效性,卻由於頁面中這些少量的動態內容而無法將整個頁面進行緩衝。ESI(Edge Side Include)通過使用簡單的標記語言來對那些可以加速和不能加速的網頁中的內容片斷進行描述,每個網頁都被劃分成不同的小部分分別賦予不同的緩衝控制 策略,使Cache伺服器可以根據這些策略在將完整的網頁發送給使用者之前將不同的小部分動態地組合在一起。通過這種控制,可以有效地減少從伺服器抓取整個 頁面的次數,而只用從原伺服器中提取少量的不能緩衝的片斷,因此可以有效降低原伺服器的負載,同時提高使用者訪問的回應時間。 ESI是一種簡單的標識語言,開發人員可以使用它標誌內容片斷以便通過相應的Cache伺服器來加速緩衝。同時ESI還定義了一 套內容效驗標準,可以實現原伺服器對Cache伺服器中緩衝內容的管理,提高了網站對內容的控制能力。CDN網路也可以利用在分布全國各地的節點中安裝支 持ESI的Cache伺服器來提供對網站動態內容提供CDN服務。
該種方式可以用於如商城中的商品頁;
3、資料緩衝
顧名思義,就是快取資料的一種方式;比如,商城中的某個商品資訊,當用商品id去請求時,就會得出包括店鋪資訊、商品資訊等資料,此時就可以將這些 資料緩衝到一個php檔案中,檔案名稱包含商品id來建一個唯一標示;下一次有人想查看這個商品時,首先就直接調這個檔案裡面的資訊,而不用再去資料庫查 詢;其實快取檔案中緩衝的就是一個php數組之類;
Ecmall商城系統裡面就用了這種方式;
4、查詢快取
其實這跟資料緩衝是一個思路,就是根據查詢語句來緩衝;將查詢得到的資料緩衝在一個檔案中,下次遇到相同的查詢時,就直接先從這個檔案裡面調資料,不會再去查資料庫;但此處的快取檔案名可能就需要以查詢語句為基點來建立唯一標示;
按時間變更進行緩衝
其實,這一條不是真正的緩衝方式;上面的2、3、4的緩衝技術一般都用到了時間變更判斷;就是對於快取檔案您需要設一個有效時間,在這個有效時間 內,相同的訪問才會先取快取檔案的內容,但是超過設定的緩衝時間,就需要重新從資料庫中擷取資料,並生產最新的快取檔案;比如,我將我們商城的首頁就是設 置2個小時更新一次;
5、按內容變更進行緩衝
這個也並非獨立的緩衝技術,需結合著用;就是當資料庫內容被修改時,即刻更新快取檔案;
比如,一個人流量很大的商城,商品很多,商品表必然比較大,這表的壓力也比較重;我們就可以對商品顯示頁進行頁面緩衝;
當商家在後台修改這個商品的資訊時,點擊儲存,我們同時就更新快取檔案;那麼,買家訪問這個商品資訊時,實際上訪問的是一個靜態頁面,而不需要再去訪問資料庫;
試想,如果對商品頁不緩衝,那麼每次訪問一個商品就要去資料庫查一次,如果有10萬人線上瀏覽商品,那伺服器壓力就大了;
6、記憶體式緩衝
提到這個,可能大家想到的首先就是Memcached;memcached是高效能的分布式記憶體快取服務器。 一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、 提高可擴充性。
它就是將需要緩衝的資訊,緩衝到系統記憶體中,需要擷取資訊時,直接到記憶體中取;比較常用的方式就是 key–>value方式;
<?php
$memcachehost = ‘192.168.6.191‘;
$memcacheport = 11211;
$memcachelife = 60;
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
$memcache->set(‘key‘,‘緩衝的內容‘);
$get = $memcache->get($key); //擷取資訊
?>
7、apache緩衝模組
apache安裝完以後,是不允許被cache的。如果外接了cache或squid伺服器要求進行web加速的話,就需要在htttpd.conf裡進行設定,當然前提是在安裝apache的時候要啟用mod_cache的模組。
安裝apache時:./configure –enable-cache –enable-disk-cache –enable-mem-cache
8、php APC緩衝擴充
Php有一個APC緩衝擴充,windows下面為php_apc.dll,需要先載入這個模組,然後是在php.ini裡面進行配置:
[apc]
extension=php_apc.dll
apc.rfc1867 = on
upload_max_filesize = 100M
post_max_size = 100M
apc.max_file_size = 200M
upload_max_filesize = 1000M
post_max_size = 1000M
max_execution_time = 600 ; 每個PHP頁面啟動並執行最大時間值(秒),預設30秒
max_input_time = 600 ; 每個PHP頁面接收資料所需的最大時間,預設60
memory_limit = 128M ; 每個PHP頁面所吃掉的最大記憶體,預設8M
9、Opcode緩衝
我們知道,php的執行流程可以用來展示:
首先php代碼被解析為Tokens,然後再編譯為Opcode碼,最後執行Opcode碼,返回結果;所以,對於相同的php檔案,第一次運行時 可以緩衝其Opcode碼,下次再執行這個頁面時,直接會去找到緩衝下的opcode碼,直接執行最後一步,而不再需要中間的步驟了。
比較知名的是XCache、Turck MM Cache、PHP Accelerator等。
PHP中9大緩衝技術總結