Discuz!緩存

Discuz!的緩存一樣分了主動緩存和被動緩存。從功能上來講,主動緩存通常用到管理員對全站的設置,等等須要手動更新的地方,這些地方的數據都有一個 特色,那就是它們的更新可能性很小,平時不須要自動更新;Discuz!的被動緩存,通常分佈在諸如帖子內容顯示,用戶信息更新這些地方,這些地方的更新 基本上都是由於用戶使用了某一特定的功能時所激發的。 在正常運行的Discuz!系統文件夾裏面會有一個forumdata文件夾,這個是論壇記錄和緩存文件的存放目錄,通常這些文件都是自動生成的,在 forumdata/cache/裏面存儲的都是一些Discuz!的基本設置和一些常使用的值,這些值通常在系統初始化的時候就保存在$_DCACHE 全局變量中,在後面的操做中將能夠簡單地使用它們進行功能上的判斷。 (1)主動緩存,也就是隻在用戶操做後臺時,由Discuz!系統去刪除原有緩存進行更新的緩存。它們廣泛存在於forumdata/cache/目錄 中,好比說/forumdata/cache/cache_settings.php保存了整個系統的核心設置,通常狀況是不會更新的,只有後臺修改了比 如站點名稱等關鍵信息的時候纔會去主動更新這個緩存文件。還有用於保存用戶組和管理員組相關信息的兩類緩存文件: /forumdata/cache/usergroup_’.intval($groupid).’.php /forumdata/cache/admingroup_’.intval($adminid).’.php 另外還有在index、forumdisplay、viewthread、post、blog、topicadmin、register、 archiver幾個模塊中的時候分別會使用的cache_’模塊名‘.php的緩存。在include/common.inc.php中的流程能夠看 到,這些相似的主動緩存都有一個特色:統一進行引用(include),最後進行失敗檢測,最後再對失敗的緩存(好比說文件丟失或者是上次更新還沒生成這 樣的狀況下)統一進行從新生成的操做,具體的生成方法見/include/cache.func.php中的updatecache函數。 (2)被動緩存,也就是緩存的生成並不是是由用戶手動更新的,而是在系統裏判斷是否須要生成緩存,須要緩存多長時間,由系統自身來完成整個過程。很典型的代 表有帖子內容的緩存生成過程。帖子內容的緩存路徑被cache_setting.php裏定義爲一個能夠由用戶修改的值,默認是在 forumdata/threadcaches下,由viewthread.php裏的邏輯能夠看到,當知足使用緩存條件的時候(通常狀況是第一頁的內 容),系統會執行viewthread_loadcache函數,此函數會判斷緩存是否過時,若是不過時就執行函數中間讀取緩存的操做,最後 Discuz!直接巧妙地在函數中die出一段javaScript,結束訪問。專研Discuz!代碼的你可能會很疑惑,到底是何時生成的緩存 呢?include文件夾裏有一個global.func.php,這個文件包括了整個Discuz!系統使用到的全局方法,其中有一個叫output的 函數,在函數裏判斷了是否能夠緩存當前的頁面,而且使用ob_get_contents函數直接緩存頁面。 提示:ob_start()在服務器打開一個緩衝區來保存全部的輸出。因此在任什麼時候候使用echo ,輸出都將被加入緩衝區中,直到程序運行結束或者使用ob_flush()來結束。而後在服務器中緩衝區的內容纔會發送到瀏覽器,由瀏覽器來解析顯示。函 數ob_end_clean 會清除緩衝區的內容,並將緩衝區關閉,但不會輸出內容。此時得用一個函數ob_get_contents()在ob_end_clean()前面來得到緩 衝區的內容。這樣的話, 能將在執行ob_end_clean()前把內容保存到一個變量中,而後在ob_end_clean()後面對這個變量作操做。
相關文章
相關標籤/搜索