web快取簡介

2021-06-16 07:39:02 字數 2444 閱讀 6048

1.把內容快取到磁碟上

1).某些框架模板的頁面快取功能,例如smarty,zend framework 快取等等

這些的缺點是你必須用到這些框架或是模板,這也會帶來一些效能的開銷。其實也可以自己寫個簡單的快取方法。

2)直接將變化不是很頻繁的內容靜態化,定期更新,靜態檔案的請求速度和消耗資源都遠小於動態。

2 將內容快取到記憶體中,快取到磁碟上,每次讀取快取都會存在磁碟io的開銷,所以放在記憶體中快取的訪問會更快

1)借助php的apc模組,我們可以將任何資料或物件快取到記憶體中。與apc類似xcache也是php的乙個快取擴充套件。

2)使用apc 或是xcache是將內容快取到本機的記憶體中,因為本機可能還會執行其他程式,所以可能面臨記憶體不足,況且這麼做不易擴充套件

,所以更好的辦法是使用專門的快取伺服器例如memcache,就速度而言,這麼做沒有本機記憶體快。

3.opcode 快取

php執行時,php直譯器會將原始碼翻譯成中間**(opcode),利用一些opcode快取擴充套件例如apc,xcache等可將opcode快取到共享記憶體中

例如只要 在php.ini中開啟opcode cache的開關:

apc.cache_by_default = on opcode可以減少動態內容的處理時間,減少一定的cpu和記憶體開銷,但是系統的效能瓶頸如果不在cpu和記憶體上

,比如在資料庫,這麼做的效能提公升非常有限。

4.客戶端(瀏覽器)快取

一般來說web伺服器對於靜態檔案都會在返回的響應頭部加上last_modified 即最後修改時間,當客戶端再次請求時就會在

請求頭部加上if-modified-since 將這個最後修改時間傳送給web伺服器,伺服器會對比時間如果檔案沒有被修改,就會直接返回304

標記(不會返回靜態檔案的內容)告訴瀏覽器使用客戶端快取。

例如web伺服器會在響應頭部新增

etag: "467ae-e44feac344"

瀏覽器在獲得這個標記後在下次的http請求中就會包含

if-none-match: "467ae-e44feac344"

伺服器重新計算這個編碼 如果相同就返回304,如果採用最後修改時間來協商有可能導致即使檔案內容沒有變化也會重新獲取,另外乙個

如果是負載均衡的情況下,相同內容的檔案在不同的伺服器上最後修改時間也會不同,etag就可以避免這個問題。

補充:apache預設開啟etag,可以使用fileetag來設定

fileetag none|inode|mtime|size|all

對於動態內容,web伺服器不會在響應頭中加上last_modified,和etag 等標記,這個就需要應用程式自己來輸出了

例如:header("last-modified: ".gmdate("d,d m y h:i:s")." gmt");

同時判斷是否過期也要程式來判斷

5.伺服器快取

web伺服器可以提供快取,如果只關注url和最終響應內容,那麼url和響應內容可以看做是一系列的對應關係,將這些對應關係快取起來的任務交給

web伺服器最合適不過了。比如apache的快取模組mod_disk_cache 和mod_mem_cache官方推薦使用mod_disk_cache,由於有磁碟檔案系統緩衝區以及

mmap的作用mod_disk_cache的速度並不比記憶體慢。

要在apache中開啟mod_disk_cache必須在編譯的時候為configure追加必要的模組, 如:

--enable-cache=shared --enable-disk-cache=shared --enable=so

然後在配置檔案中增加:

loadmodule cache_module_modules/mod_cache.so

loadmodule disk_cache_module_modules/mod_disk_cache.so

cacheroot /data/apache_cache

cacheenable disk /

cachedirlevels  5

cachedirlength  3

其中cacheenable disk / 指定了快取引擎和需要快取的目錄為站點根目錄

如果只需要快取某個目錄 可以寫成 cacheenable disk /image

web伺服器判斷快取的過期同樣依賴於expires 和last-modified標記

6.反向**快取

很多web伺服器都可以作為反向**伺服器例如nginx squid等等,這些都有一定的快取機制,例如可以使用更加專注與反向**

web窗體快取

在做許可權管理時,出現了模式窗體快取的現象,就是用管理員身份登陸,後訪問奇數次模式窗體,再用另外乙個身份 沒有該模式窗體的訪問許可權 登入後訪問該模式窗體,竟然可以訪問,查明原因之後,明白了原來是,本次訪問的是快取中的資料,這為應用程式,帶來了極大的不安全因素 所以必須解決快取問題,禁止快取 立即過...

web快取技術

php本身沒有所謂處理快取的函式,因為快取實現的方式很多種.如檔案快取,那麼就是操作檔案的相關函式,如memcached,php也有相關的擴充套件函式支援.快取如何使用取決於你的程式快取方式和內容 ob 系列函式是處理向瀏覽器傳送資料的快取,跟資料快取是兩碼事 如果你不使用ob start 那麼你輸...

web快取技術

web快取包括瀏覽器快取,資料庫快取,伺服器快取。反向 伺服器,在資料 過程中,可以快取一些資料,以提高響應速度。這個了解的不多,不多寫了。我們可以將一些讀取非常頻繁的資料,比如訪問次數,表單中顯示的資料等,儲存在redis,memcached等基於記憶體的nosql資料庫中,作為快取,提高響應速度...