從wordpress-cache外掛看web靜態HTML生成的策略

gudesheng發表於2008-01-03

1 第一次訪問,檢查該檔案是否存在,如果沒有快取,從資料庫中取出檔案放到快取裡面,以後訪問,就直接從快取裡面取。每一個靜態頁面都需要一個輔助的meta檔案,例如wp-cache-12345.meta

為什麼需要獨立的meta?因為返回一個靜態html還不夠,還有很多資訊,例如還需要這個頁面的時間,content-type等資訊。這些資訊又不能存放在html中,所以需要輔助的.meta檔案

meta檔案中的內容是:
$meta_object->uri = $_SERVER['REQUEST_URI'];
$meta_object->post = wp_cache_post_id();
$meta_object->dynamic = true;
$meta_object->headers = array();

array_push($meta_object->headers, "Last-Modified: $value");
array_push($meta_object->headers, "Content-Type: $value");

2 如果某篇文章修改了,刪除這篇文章的快取,如果某個blog換主題了,刪除整個blog的快取。以後按照1的邏輯來。

wp-cache-phase1 檢查某頁面是否存在,如果存在直接去快取。否則進入wp-cache-phase2,訪問動態頁面,生成快取檔案
其中用到
ob_start('wp_cache_ob_callback');
register_shutdown_function('wp_cache_ob_end');
wp_cache_ob_callback wp_cache_ob_end

wp-cache-phase2還有個作用是響應頁面的事件,例如publish_post edit_post delete_post publish_phone trackback_post pingback_post comment_post edit_comment wp_set_comment_status delete_comment switch_theme,不管什麼事件,本質就是將快取裡面的頁清空

採用這種外掛形式需要修改的地方
1 cache: 需要有一個include檔案,根據URL,統一判斷所有的訪問
2 事件響應:

由於硬碟檔案系統,同一目錄下的檔案數超過3000個,訪問就會比較慢
所以快取檔案在硬碟上的結構:需要增加目錄,這樣可以提升索引速度,而且刪除時候也比較方便
可以按照使用者,分類,日期或其他屬性建立目錄



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=816096


相關文章