MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-08-02, 21:13

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 11 篇文章 ] 
發表人 內容
文章發表於 : 2006-12-25, 15:12 
離線
頭像

註冊時間: 2003-07-17, 22:16
文章: 941
這篇是和"過路的"討論時,發現Cache這個東西應該要被更完整的寫出來,它的運算方式跟過程
(之前都只是片斷的分佈於各個討論串內,還沒有看到有完整的討論)

內容可能有誤,如果有錯就請鞭吧
這篇文章的Blog版在這裡,版面上會比較容易閱讀
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:如果是800x600的點陣圖約可以儲存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有了更深刻的了解?


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.2pre) Gecko/20061223 BonEcho/2.0.0.2pre (ayakawa O2-GLT-SSE2-PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-12-25, 18:35 
離線

註冊時間: 2006-12-05, 07:23
文章: 141
奇實看見你們熱烈討論時...我已經想說
對於我這種一知半解的人應該從基本入手...
了解設定及運作...才能真正明白...才有懂得選擇的能力
如果甚麼都不知根本插不了咀= =..............
這編文章對這一點幫助很大...謝
=================================
文章大概都明白了...不知有沒有錯
假設讀取一張jpg圖運作流程就是
第一次流覽時從網頁下載jpg到dc(diskcache)
同時轉換成bmp並儲存到rc(ramcache)並顯示到fx
(如果沒有rc...bmp會放到那?普通ram還是dc?關閉分頁就會消失?)

如果將rc關閉...對低階電腦不利...因為每次顯示都需要執行jpg轉換成bmp程序


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1) Gecko/20061024 BonEcho/2.0 (pigfoot)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-12-25, 19:07 
離線

註冊時間: 2006-12-22, 08:19
文章: 22
謝謝!
希望orange大大
有空多寫些像這樣詮釋基本原理的文章。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.2pre) Gecko/20061223 BonEcho/2.0.0.2pre (ayakawa O2-GLT-SSE2-PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-12-25, 22:12 
離線
頭像

註冊時間: 2003-07-17, 22:16
文章: 941
丙 寫:
假設讀取一張jpg圖運作流程就是
第一次流覽時從網頁下載jpg到dc(diskcache)
同時轉換成bmp並儲存到rc(ramcache)並顯示到fx

其實你說的這部份,我也嘗試著去Memory Cache、Disk Cache挖答案出來
譬如:到一個有"大圖"的網頁,在它還在下載的時候不斷的看Memory Cache、Disk Cache
看看裡面有沒有些痕跡可以被發現
而結果是圖必須要下載完後,在Memory Cache、Disk Cache才看的到那個圖檔的檔名存在.

而看他們大小的話,Memory Cache在下載時 佔用大小完全不變、Disk Cache 會越變越大.
用記憶體管理員看FX佔用記憶體容量則是會忽大忽小
要用這個看到的過程去推背後的運作方式的話

下載時的圖片不會放在Memory Cache裡面,而是由不受Memory Cache最大值限制的那部份記憶體作暫存
同時下載的東西也存放在Disk Cache裡面


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.2pre) Gecko/20061223 BonEcho/2.0.0.2pre (ayakawa O2-GLT-SSE2-PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-12-27, 17:39 
離線
頭像

註冊時間: 2003-07-17, 22:16
文章: 941
因為#1後半部有一些假設必須要證實
剛好今天有一點時間,花了一小時做了實驗,試試看我的假設到底有沒有問題
使用的網頁資料來自 http://nontroppo.org/timer/ (剛剛好有計時的功能)
實驗方式:在Memory Cache沒有資料情況下,測試讀取網頁到完成需要多久

實驗過程中發現Firefox不會對本機來源(file://...)作Disk Cache的動作
所以1、3的測試屬同類,2、4的測試屬同類

1.將網頁資料放在Ram Driver裡面(Disk Cache設在Ram Driver)
平均讀完頁面需要281.1ms
2.將網頁資料放在硬碟裡面(Disk Cache設在Ram Driver)
平均讀完頁面需要279.8ms
3.將網頁資料放在Ram Driver裡面(Disk Cache設在硬碟)
平均讀完頁面需要285.9ms
4.將網頁資料放在硬碟裡面(Disk Cache設在硬碟)
平均讀完頁面需要288.9ms

不管1、3還是2、4他們的差異都在測試的誤差值內,可以視作他們表現相同

因為用本機來源測試畢竟沒有作Disk Cache,我後來也試過架FTP
用FTP的方式讓Firefox可以作Disk Cache,但用這種方式測出來的數值不管是哪個方式(1.2.3.4)都是一模一樣

結論是#1假設「Disk Cache不管放在硬碟還是Ram Driver表現很接近」
這個假設至少在網頁檔案在620KB時,可以成立


附加檔案:
檔案註釋: 測試數據
test.txt [4.14 KiB]
被下載 439 次
回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.2pre) Gecko/20061223 BonEcho/2.0.0.2pre (ayakawa O2-GLT-SSE2-PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-01-05, 14:56 
離線

註冊時間: 2005-09-11, 23:29
文章: 15
謝謝橘子大的講解 小弟這邊有不懂的地方

就是為甚麼firefox的memory cache要預設把所有的圖片 轉成bmp點陣圖檔 才可以顯示

請問轉成點陣圖有什麼好處嗎

而且印象中bmp的圖檔容量比jpg來的大很多

這樣的設定不知道有什麼意義呢???


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-01-05, 17:34 
離線
[社群版本維護者]
頭像

註冊時間: 2004-05-24, 15:50
文章: 826
來自: 資源回收筒
hellkwu 寫:
謝謝橘子大的講解 小弟這邊有不懂的地方

就是為甚麼firefox的memory cache要預設把所有的圖片 轉成bmp點陣圖檔 才可以顯示

請問轉成點陣圖有什麼好處嗎

而且印象中bmp的圖檔容量比jpg來的大很多

這樣的設定不知道有什麼意義呢???
爬個文吧...
某篇文章裡頭有提到原因!! 至於是哪篇, 小弟忘了...

根據文中描述, 所有瀏覽器都會把圖片轉換成點陣圖檔再顯示出來, 不是只有 Firefox 特立獨行...

_________________
人必先自重,而後人重之。


回頂端
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20061220 Firefox/2.0.0.1 (Swiftfox)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-10-19, 22:46 
離線

註冊時間: 2006-08-11, 19:31
文章: 188
我把 Memory Cache 設定在 1024k,
也就是 1M,為何開了幾十個分頁後,
卻吃掉了超過設定值的容量。

另外,雖然不是很確定,
但 Opera 跟 IE 似乎都沒有利用 Memory Cache,
只有 Disk Cache,但從快取抓圖片的速度上,
跟放在 Memory Cache 的 Firefox 相差無幾,
所以我的理解是在中高階的電腦可以關閉或者調低 MemoryCache,因為從 Disk Cache 抓圖,
即使要轉換,也是很快所以差異不大,
而這樣做最直接的好處就是能再少吃一些記憶體。
不知這樣是否正確?

另外補充就是,FX 3.0.4pre 似乎無法關閉 Memory Cache,
把開關設為 false,重開之後又會變成 true。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4pre) Gecko/2008092719 GranParadiso/3.0.4pre (ayakawa PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-10-20, 00:23 
離線
頭像

註冊時間: 2003-07-17, 22:16
文章: 941
AlanLive 說的沒錯,memory cache不一定比較好(在速度快的電腦上可能差距是感覺不太到的)
不過使用memory cache,一定不會比較差
速度慢的電腦蠻需要memory cache
速度快的電腦不一定需要,但是通常這類電腦記憶體可用空間很大
(不差用在FX上的這一兩百MB)
要不要用memory cache是看個人喜好啦(我的建議是不要取消)
其他瀏覽器也都有用memory cache,長時間使用可以注意到他們幾乎也是維持在1百多MB左右的容量(似乎是共識?)
Google Chrome multi-process 例外(但它開了single-process後跟其他瀏覽器一樣還是100MB左右)

至於3.0.4pre 重開後又被啟動,可能是因為他把設定寫在 \firefox\defaults\pref\*.js
進去裡面修改掉應該就可以了


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.4 (KHTML, like Gecko) Chrome/0.3.155.0 Safari/528.4
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-10-21, 21:15 
離線

註冊時間: 2006-08-11, 19:31
文章: 188
裝了 Cache Status 這個套件,用來清理 Memory Cache,
雖然 about:cache 上的顯示,快取確實被清除了,
但從工作管理員來看 Firefox 的記憶體,並沒有明顯的下降,
理論上 Firefox 佔用的總記憶體包括 Memory Cache 的佔用,
所以可以推測 Memory Cache 內的舊快取就算被新的快取覆蓋過,
記憶體還是不會釋放出來,或許舊的快取根本沒被釋放,
不知道這屬於 Memory Leak 的問題,
或者是 Firefox 3.0 以後的版本在釋放記憶體效率上,
還是有相當大的改進空間?


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4pre) Gecko/2008092719 GranParadiso/3.0.4pre (ayakawa PGU)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-10-21, 22:19 
離線
頭像

註冊時間: 2003-07-17, 22:16
文章: 941
是不會馬上釋放沒錯(清除後會隨著使用次數or時間慢慢減少)
memory leak主要是程式出現漏洞讓記憶體佔用量不斷膨脹不受控制,譬如:100MB ->1GB -> ? GB
你說的現象不太符合memory leak

如果你這麼在意記憶體佔用量,你可以取消memory cache
再不然還可以使出WINDOWS ONLY的設定最小化時釋放記憶體
(雖然我認為這意義不大,但也許這個對很在意數字的人會比較好吧?)

> 釋放記憶體效率?
這不算是太大重點吧,或者說越來越不是重點會比較ok吧
清除cache後馬上把清除結果反應在系統,在我看來只是表面功夫的動作
有立刻反應可以,沒有立刻反應也無所謂 只要FX有達到清除cache的目的就可以了
(清除cache主要的公用是在清除隱私資料,不是用在釋放FX佔用的記憶體)
--
我的建議是
如果系統記憶體夠用,記憶體佔用量隨便看看參考就好了
反正他也只會維持在一個特定容量
以現在主流系統擁有的記憶體來看 FX佔有的容量幾乎可以忽略
如果真的妨礙到使用,就關掉FX也OK
(如果系統有其他程式要跟FX搶那1百多MB的記憶體,說實在的也沒什麼必要留著FX)
(__________________^^^^^^^^^^如果系統記憶體是1GB以上)


回頂端
Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.9.1b1) Gecko/20081010 orangeFox/3.1b1
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 11 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 23 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群