幾個場景
首先,讓我先來帶您瀏覽幾個 ChangingThePresent.org 中的頁面吧。我將顯示站點中幾個需要緩存的地方。然后,再指出我們為其中每個地方所做出的選擇以及為實現這些頁面所使用的代碼或策略。尤其會重點討論如下內容:
全靜態頁面 幾乎無變化的全動態的頁面 動態頁面片段 應用程序數據先來看看靜態頁面。幾乎每個站點都會有靜態頁面,如圖 1 所示,其中還有我們的條款和條件??梢酝ㄟ^單擊 register 然后再選擇是否接受用戶協議來瀏覽相應頁面。對于 ChangingThePresent 而言,我們從此頁中刪除了所有動態內容以便 Apache 能夠對它進行緩存。按照我們 Apache 中配置的規則,這些內容永遠都不會由 Rails 服務器生成。因此,我根本無需對其考慮 Rails 緩存。
圖 1. 用戶協議
接下來,再來看看全動態頁面。理論上講,ChangingThePresent 可以有一些動態構建的頁面,但是這些頁面一般很少變化。由于幾乎所有頁面都會顯示用戶是否登錄,因此我們并不怎么關注這種緩存。
再下來,看看頁面分段緩存。圖 2 中所示的主頁原來是完全靜態的,現在,有一些元素變成了動態的。每天,頁面都會顯示一系列禮物,這些禮物有的是隨機選的,有的則由我們的管理員選定。請注意在標題為 “A Few of our Special Gifts for Mother's Day” 節下的那些禮物,同時也請注意在最右邊顯示為 “login.” 的那個鏈接。此鏈接取決于用戶是否登錄。我們不能緩存整個頁。頁面每天只能改變一次。
圖 2. 主頁
最后再考慮應用程序。除非是在 15 年之前進行網絡沖浪,否則您現在遇到的有趣站點全部都是動態的?,F代的應用程序大都分層,而且可以通過在層間添加緩存來使這些分層更加有效。ChangingThePresent 在數據庫層采用了一些緩存。接下來,我將深入討論不同類型的緩存,還會介紹我們為 ChangingThePresent 都采用了何種緩存。
緩存靜態內容
Mongrel 是一種 Web 服務器,由 Zed Shaw 利用 2500 行 Ruby 和 C 編寫而成。這個小型的服務器占用內存極少,非常適合 Ruby Web 應用程序,例如 Rails、Nitro、Iowa 等等。Mongrel 可運行于 UNIX? 和 Linux? 上,也可運行在 Win32 上。Mongrel 也經常可以作為代理運行在另一個 Web 服務器(例如 Apache 或 Litespeed)的后端,但這不是必需的 —— 因為 Mongrel 是一種 HTTP 服務器,可以與所有您偏好的 HTTP 工具結合使用。
除了圖像之外,有關緩存靜態數據的內容,可講的內容不多。由于我們的網站是一個慈善性質的門戶網站,這意味著我們需要更多地關注用戶的感受,比如多加入一些圖像或視頻。但我們的 Web 服務器 Mongrel 并不能很好地服務靜態數據,因此我們使用 Apache 來服務圖像內容。
新聞熱點
疑難解答