[轉貼]Firefox的Cache架構

以下資料來自網絡:

剖析Firefox的Cache架構

Posted by emukim on December 25th, 2006

這篇文章是為了”來常駐FX吧!”這篇寫的註解
因為Firefox 的Memory Cache有個地方蠻特殊的,可能有些人會誤解

Cache中文翻譯是”快取”,是程式為了執行快速而產生的一種機制(可以把Cache想像成一種記憶體的形式)

Firefox的Cache有兩大種類:Disk Cache、Memory Cache

1. Disk Cache顧名思義就是放在硬碟上的Cache(Firefox預設給Disk Cache的容量是50MB)
這是什麼意思咧?就是複製各種從網路上抓回來的資料到硬碟上
為什麼要這樣作呢?這樣可以免去重新再從網路上抓資料下來的過程,可直接讀取硬碟上儲存的資料
2. Memory Cache則是放在記憶體上得Cache(Firefox預設給Memory Cache容量會因系統而不同)
也可以手動給Memory Cache設定一個最大值(譬如:64MB) 

在Memory Cache下面還有兩個小分類,分別是Storage in use、Inactive Storage
1. Storage in use存放比較活躍(常被讀取的資料)
2. Inactive Storage存放比較不活躍(不常被讀取的資料)

而Storage in use、Inactive Storage各自都會受到Memory Cache的限制有他們的最大值

譬如:Memory Cache最大值設成64MB,則Storage in use、Inactive Storage各自都不能超過64MB
但他們兩個合起來可以超過64MB,但不能超過128MB (128=64+64)
(但有特例存在,譬如一個頁面需要耗費的記憶體容量超過Memory Cache的最大值
則會出現短暫超過最大值的現象,但關閉該頁面後 則會恢復到正常的現象)

到這裡不知道大家看得懂看不懂,我舉個例子來加深大家的印象

Q:在Memory Cache最大值設為64MB下,Firefox在系統內最多能佔用多少實體記憶體?(去除特例的狀況)
A:64MB(Storage in use)+64MB(Inactive Storage)+(Firefox佔用的記憶體)
由於Firefox程式本身佔用的記憶體會依據佈景主題、Plugins、安裝套件、網頁內容內嵌媒體檔…有所不同,在此先估為30MB
所以最多可佔用64+64+30=158MB的容量

註:Firefox在運算時也會佔用一些記憶體(運算完後會釋放出來)

接下來就是介紹Memory Cache跟Disk Cache不同之處:
Memory Cache與Disk Cache最大的不同點就是
Disk Cache儲存的東西跟網頁幾乎是一模一樣(不管是圖片檔、媒體檔,還是html、JS)
但Memory Cache儲存的都是圖片,且存的格式是點陣圖(BMP)
為什麼會這樣呢,這是firefox的要求 所有圖片(jpg、png、gif…)都要轉成點陣圖之後才顯示出來

Q:那64+64=128MB的空間可以存放多少張的點陣圖呢?
A:如果是800×600的點陣圖約可以儲存90張
Q:那90張夠不夠用呢?
A:對一般人來說蠻夠的(或許還太多了)
對常看”很多”的”大圖”的人可能不夠吧(不過FX會作管理剔除掉已經看過或者不常用的部份,影響不大)

註:在頂到Memory Cache最大容量(Memory Cache裝滿圖片時)
會很常出現Memory Cache破表的狀況(但不至於太誇張,在關閉該頁面時 破表的記憶體會釋放出來)

1. 部份是因為有媒體檔(還記得Memory Cache只放圖片嗎)
在瀏覽到媒體檔時 FX 會另外給它記憶體用(而這部份不受Memory Cache最大值限制)
2. 部份是因為瀏覽到新的圖片會暫時的讓Memory Cache破表
新的圖片會擠掉舊的圖片之後Memory Cache就回復到最大容量

感覺敏銳的人看到這裡應該會發現一件事
如果Memory Cache只放圖片,那加大Memory Cache對瀏覽速度有幫助嗎?

圖片檔在Disk Cache內沒有資料的情況需要從網路下載,並轉換格式成點陣圖儲存於Memory Cache
圖片檔在Disk Cache內有資料的情況會直接讀取Disk Cache的資料,並轉換格式成點陣圖儲存於Memory Cache
圖片檔在Memory Cache有資料,會直接讀Memory Cache不讀Disk Cache的東西
(這樣會少了一個從Disk Cache的傳輸跟轉換格式的步驟)

回到主題「加大Memory Cache對瀏覽速度有幫助嗎?」
有,在Memory Cache有資料下可節省Disk Cache的傳輸時間跟轉換點陣圖的時間

或許有人會想把Disk Cache放在Ram Driver裡面
這樣的確還可以加快”Memory Cache沒資料,但Disk Cache有資料時”的傳輸時間
不過我認為不值得這樣去作
因為在讀取Disk cache前FX會先讀取網站上的html資料,中間網路浪費的時間可能遠大於硬碟、記憶體傳輸時間
(如果Disk cache放的東西很大讓傳輸時間感覺得到差異,這就是另一個議題了 在此先不討論)

可能又有人會問
「Disk Cache在硬碟、記憶體傳輸時間如果感覺不到差異,那Memory Cache加大的效果感覺得到嗎?」
還記得前幾段談到的東西嗎?
「在Memory Cache有資料的情況下會少了一個從Disk Cache的傳輸跟轉換格式的步驟」
假設Disk Cache的傳輸時間(不管是放在Ram Driver或是放在硬碟)都是趨近於0的
跟Memory Cache有資料不需要Disk Cache傳輸的情形是一樣的

那他們的差異就只剩下一點了(把圖片轉換成點陣圖消耗掉的時間)
轉換所消耗的時間依據系統的效能會有所不同,這大概也是為什麼低階電腦用firefox會比較慢的原因吧?
(因為轉換成點陣圖的時間較久)
反觀中高階電腦上轉換成點陣圖的時間較快
如果轉換時間快到察覺不出來的情況的話,Memory Cache設多大或設多小在那些中高階電腦上看不出來太大差異
這大概是為什麼會有人認為Firefox Memory Cache 效能顯示不太出來的原因!
(不是效能顯示不出來,而是電腦的處理能力Cover掉 Memory Cache的優勢)

看到這裡不知道大家有沒有對firefox有了更深刻的了解?

2006?

TOP

講真, 依家d機咁多RAM, 直接將所有cache掉晒入RAM都得啦!

TOP

改左咁多version 都仲貼上嚟
定樓主講緊FF 咁多年都無改進

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

唔通Firefox 個 快取 已經用左全新架構?

TOP

唔通Firefox 個 快取 已經用左全新架構?
新手C 發表於 2015-9-19 14:09


Yes (不過唔知有咩分別)
http://www.janbambas.cz/mozilla-firefox-new-http-cache-is-live/

另外,修改cache 大細前(預設350MB),可以先睇下呢個blog: https://todesschaf.org/posts/2012/07/25/cache-usage-results.html

TOP

回覆 7# Fanolian


    原來還有資料流失等問題,謝謝師兄提醒

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP