今天有個朋友問我什麼叫動態快取。n年前曾經看過一篇文章,不記得叫什麼了。只記得靜態快取是在寫了文章過後,就生成靜態頁面。動態快取是寫了文章以後不生成靜態頁面,當有使用者第一次瀏覽以後,才觸發相關條件生成靜態頁面。
我朋友又問?那不是動態快取需要更加多的判斷和操作?其實是錯的。動態快取要比靜態快取先進多,至少在我看來是這樣。目前絕大多數web程式生成靜態頁面,都是採用靜態生成。這就是我一直不做靜態快取(生成)的原因——麻煩。
因為靜態快取,有比較嚴重的缺點——資料即時性。如果要保證靜態頁面的某些資料的即時性,也可以說同步更新,就必須執行大量操作,統計,重新寫入。或者是改變內容後,還要重新生成。如果不注重即時性,那也要定期重新更新所有靜態檔案。因此,在後台和前台都必須要有**來執行更新和寫檔案的操作。
我說動態快取就比靜態快取,先進就先進在生成是觸發式的,這樣可以讓後台部分少去了很多操作。比如寫完文章後,不生成靜態頁面,有使用者第一次訪問時,檢查是否有快取過的記錄或者快取檔案是否存在。沒有,就生成,這次操作稍微慢點,然後記錄一下,第2個使用者訪問時,系統檢查到有快取的記錄。就直接呼叫快取檔案。這次的速度就快了。對資料庫的訪問也就減少了。我們還可以給快取設定乙個有效期,當前臺使用者瀏覽時,可以觸發是否更新。更新的話,這個使用者瀏覽肯定會稍微慢點。但是第2個使用者就又快了。又可以看到新內容了。後台干預的操作也大大減少了。當然,管理員可以有時間去喝咖啡了。
比如sablog-x要加入動態快取的功能那我們就要多加幾個欄位來記錄某些資訊。
lastvisit 最後訪問時間
cached 是否已經快取 預設0
新文章,cached當然為0了。第乙個使用者訪問,然後就開始生成檔案,處理資料庫的資訊是個漫長的過程,可能也就0.00n秒吧。呵呵。生成完畢後,更新cached的值為1,然後跳轉到/cachedir/datedir/articleid.html。
當第2個使用者訪問,查詢到cached的值是1,就直接跳轉或者呼叫/cachedir/datedir/articleid.html,就跳過了下面對資料庫的操作。當然,之中可以加入快取有效時限的判斷操作,看看lastvisit和當前時間的間隔。這個間隔可以在後台設定,比如1天,2天……如果大了。就把快取刪除。再生成。如果小了。繼續呼叫快取檔案或者跳轉。反正用不了幾毫秒。這一步也可以在後台批量操作。反正**也簡單。總之操作要比靜態快取簡單得多。**量肯定也要少得多。
這下就不用和朋友解釋這麼多了,說這麼通俗。再笨都懂了。不知道有沒有高手的思路或者方法更加好的。歡迎交流交流。
最近學習了不少東西,本來如果不預定51發布sablog-x的,就可以加入更加多的重大改進。但是為了不跳票。只能將就咯。我臉皮比較厚,敢說現在的sablog-x在國產blog中,也算排得比較靠前的了。哈哈。
by angel
靜態資源快取和更新
五 靜態資源 本節課cdn的核心原理將靜態頁面部署在cdn上,來提公升我們商品詳情頁的流量能力發揮到極致。cdn靜態資源 cdn cache control 響應頭 1 dns 用cname 解析到源站 2 回源快取設定 cacahe control 狀態 private客戶端可以快取 public...
快取原理 (靜態)
快取可以更好的幫助我們修改頁面 思路如下 1首先我們要判斷是否有快取 判斷檔案是否過期 函式 file exists b.html 判斷是否過期 函式 filemtime 2 如果 沒有 那麼我們就要開啟 讀取 錄入 函式 開啟 ob start 讀取 ob get contents 錄入 fwri...
thinkphp靜態快取
thinkphp裡面內建了乙個 靜態快取功能,說靜態快取可能對我這種菜鳥而言不太好理解。其實靜態快取就是將thinkphp的某乙個操作顯示出來的頁面生成乙個html檔案儲存在設 置的路徑,當使用者再次訪問的時候,如果快取沒過期,那麼這個操作將不再執行它下面的php程式,而是直接呼叫生成的html快取...