前一章介紹了Cache和http狀態代碼304的技術,這屬於用戶端檔案快取,使用該技術可以靈活的將每一個使用者訪問伺服器的次數和位元組數減少到最低。
不過有這樣一個問題存在,就是上面的緩衝都是針對單個使用者的,如果該使用者通常在緩衝時間內只訪問該檔案一次,是沒有效果的,因此就算這個檔案每天被再多的使用者訪問,也起不到緩衝效果,而這種情況下需要使用服務端緩衝。
使用服務端緩衝的理由很多,我使用的主要理由是每個頁面產生對伺服器效能的要求過大,因為每個頁面產生的過程式需要多次訪問資料庫,並有可能需要從別的來源擷取資料,而這些都是對效能影響很大的部分,而實際上,1000個使用者訪問的同一個頁面,伺服器返回的內容是相同的,這種情況下伺服器產生1000次頁面是完全不可取的,如果只在該頁面初次被訪問的時候產生一遍,而在一定時間內該頁面被再次訪問直接使用緩衝,將會獲得較大的伺服器效能提升。
我的伺服器緩衝過程是這樣的:當使用者訪問一個頁面的時候(假設不考慮用戶端緩衝,因為本章講的是服務端緩衝),首先將該URL映射為硬碟上的的一個檔案路徑,檢查該檔案是否存在。如果存在,則檢查該檔案的最後修改日期,如果該檔案存在並且還沒有到期,則直接返回該檔案內容,而不需要進行資料庫操作;如果檔案不存在或已經到期,則組建檔案內容儲存到相應的檔案,再返回該檔案內容。
這樣做有幾個好處:
1.並不是所有的檔案都預先產生緩衝,節省磁碟空間,而且基本上不需要手工幹預
2.不需要建立快取資料庫,因為我認為,只要涉及到訪問資料庫,就會造成效能和穩定性問題,因為資料庫可能是在另一台機器上,我記得有一次我的資料庫崩潰了,而我發現當天網站70%的訪問還是正常的,因為常被訪問的頁面已經被緩衝了。
3.緩衝訪問快,因為判斷檔案是否存在和檔案的時間是很快的過程,而且,在大多數的程式語言之中,直接將一個檔案返回到瀏覽器也是很方便的過程
這樣做也有幾個缺點:
1.如果有人攻擊或者遍曆你的網站的頁面,網站的所有頁面會很快的被產生,硬碟的空間會急劇增加
2.緩衝沒有自動清除的功能,也就是說,如果要節省空間的,可能需要手工執行一個程式,這個程式自動在快取檔案夾之中找到到期的檔案並刪除
總體上來講,根據頁面產生過程的複雜度和資料庫等頁面產生模組的穩定性來決定是否使用這種伺服器端緩衝,是很有作用的。