第 1 頁 (共 2 頁)
[教學]Template cacheing 的使用~
發表於 : 2002-04-09 00:47
由 台灣阿堂
首先先判斷你要針對"資料庫"或是"網頁"做Cache~
建議剛裝PHPBB2.0.0版的朋友們針對"網頁"做Cache~
如果你的"資料庫"資料很多的話建議針對"資料庫"做Cache~
只能選一個方法使用~
做法:
一 . 針對"網頁"做Cache~
在你的 templates/subSilver 目錄下新建二個目錄
cache/
cache/admin/
目錄權限設為777
再把 phpBB2/contrib/template_file_cache.php這個檔案改名為template.php
放到includes目錄下取代原有的template.php就可以了~
二 . 針對"資料庫"做Cache~
在你的PHPBB資料庫執行下段指令:
CREATE TABLE phpbb_template_cache (
template_name char(255) NOT NULL default '',
template_handle char(50) NOT NULL default '',
template_cached int(11) NOT NULL default '0',
template_echo tinyint(1) NOT NULL default '1',
template_compile text NOT NULL,
PRIMARY KEY (template_name)
)
再把 phpBB2/contrib/template_db_cache.php這個檔案改名為template.php
放到includes目錄下取代原有的template.php就可以了~
發表於 : 2002-04-09 01:09
由 oO]-[Oo
嗯.. 糾正一下..
file_caching 和 db_caching 差別只在暫存的方法不同, 一個將資料寫進file一個寫進db, 相對的在讀取時, 也是從file或db讀進. template暫存的好處是, 在線上人數多的時候, 會直接利用暫存的資料來產生output以減少重複讀取相同的資料. 就常理來講, db_caching應該比db_chching來的快, 可是上次很多人測的結果都是file_caching比較快一點, 原因我就不清楚了.. 但是file_caching的缺點是, cache/底下要chmod777, 也就是門戶洞開了.. 這部分的安全性問題我也不大清楚...
[分享]據說是這樣啦.....
發表於 : 2002-04-09 01:15
由 kenlai
OOHOO 寫:就常理來講, db_caching應該比db_chching來的快, 可是上次很多人測的結果都是file_caching比較快一點, 原因我就不清楚了..
我曾經請教過指導教授這方面的問題(隨口問問關於聊天室的儲存資料方式),他是說資料量少的時候,是 flat-file 的方式較快;但資料量大的時候,就是 DB 較快了....而且當資料越來越多的時候更為明顯。
所以我想應該很多人上線的時候就可以看出端睨了。
供各位參考。;-)
發表於 : 2002-04-09 01:19
由 oO]-[Oo
嗯.. 難怪, 因為那些暫存的templates, 不多不少, 的確是用file caching會比較快一點點..
差大概 0.00.....幾秒... ㄏㄏ.. 不管他, 用哪個都好, 至少選一個來用就對了
發表於 : 2002-04-11 16:23
由 IVAN
做法:
一 . 針對"網頁"做Cache~
在你的 templates/subSilver 目錄下新建二個目錄
cache/
cache/admin/
目錄權限設為777
再把 phpBB2/contrib/template_file_cache.php這個檔案改名為template.php
放到includes目錄下取代原有的template.php就可以了~
我照做了,但不能夠進入控制台!何解呢?
發表於 : 2002-04-11 16:58
由 台灣阿堂
這個是加袂網頁的存取~
產生的快取檔會放在上述的目錄裡~
只要有人瀏覽你的網頁,就會先去快取目錄
將網頁送到畫面,減少對資料庫的查詢
所以可以加快網頁出來的速度呦~
發表於 : 2002-04-11 18:32
由 jondy
Good idea for Cache !
發表於 : 2002-04-11 18:40
由 peigs
我也進不去控制台說
這是為什麼啊
我是用file cache
發表於 : 2002-04-11 18:45
由 peigs
我可以進去了
原來我剛剛忘了把cache/admin也設為777啦\r
呵呵喝
發表於 : 2002-04-17 12:50
由 akimasa
那這快取是如何判斷資料是否更新過?
只要使用者按reload就會重新產生新的快取檔案嗎?
發表於 : 2006-10-11 17:00
由 進藤光
oO]-[Oo 寫:嗯.. 糾正一下..
file_caching 和 db_caching 差別只在暫存的方法不同, 一個將資料寫進file一個寫進db, 相對的在讀取時, 也是從file或db讀進. template暫存的好處是, 在線上人數多的時候, 會直接利用暫存的資料來產生output以減少重複讀取相同的資料. 就常理來講, db_caching應該比db_chching來的快, 可是上次很多人測的結果都是file_caching比較快一點, 原因我就不清楚了.. 但是file_caching的缺點是, cache/底下要chmod777, 也就是門戶洞開了.. 這部分的安全性問題我也不大清楚...
這篇文章已經超級老舊了,不過倒是還能用在最新的 phpBB 2.0.21 就是了~
我覺得透過 SQL 快取只會更慢不會更快!特別是你把 SQL Server 安裝在另外一部主機,只透過網路連線的話... 如果都是裝在 localhost 還有可能因為現在的 Core Duo 夠快、記憶體夠大、硬碟也夠快,才有可能會更快!
要不然 file_cache 應該會更快,我安裝之後確實是 file_cache 快許多... 但還是沒有 100% 滿意...
原來 Cache 只不過是把風格的 .tpl 檔轉成編譯好的內容,風格幾乎不會改來改去了,可以轉成新的 .php 也不見得更快,除非縮減 .php 裡面的指令,都只要丟 HTML 出去,要不然 php 還是會很忙...
發表於 : 2006-10-11 23:07
由 chiouss
進藤光 寫:這篇文章已經超級老舊了,不過倒是還能用在最新的 phpBB 2.0.21 就是了~
我覺得透過 SQL 快取只會更慢不會更快!特別是你把 SQL Server 安裝在另外一部主機,只透過網路連線的話... 如果都是裝在 localhost 還有可能因為現在的 Core Duo 夠快、記憶體夠大、硬碟也夠快,才有可能會更快!
要不然 file_cache 應該會更快,我安裝之後確實是 file_cache 快許多... 但還是沒有 100% 滿意...
原來 Cache 只不過是把風格的 .tpl 檔轉成編譯好的內容,風格幾乎不會改來改去了,可以轉成新的 .php 也不見得更快,除非縮減 .php 裡面的指令,都只要丟 HTML 出去,要不然 php 還是會很忙...
這個問題其實我之前也和 ckmarkhsu 討論過,大概猜測如下 :Q
用 cache 的方法通常是把 tpl 和 php 產生出來的 html 拿來當 cache (通常是這樣,像 Smarty),目的在節省 tpl 沒有更動的情況下每次去 parse 你 template 的時間。寫在檔案的話就像是去開一般 static 的 html page 一樣,寫在 db 的話 db 本身會對 query 結果做 cache,在一般情況下這會比讀 html 快,因為 db 的 cache 通常就在 memory 裡面了。但是在 query 還沒 cache 起來之前,query 的時間會比直接去讀 static html 還要慢,因為 db server 本身需要去 parse 你的 query 然後再去抓出對應的資料,這中間的時間會花費比較多。
以 Gallery 為例,G1 就是用檔案系統,G2 改用 db,官方也是說在人多的情況下 G2 會比較快,因為對檔案的 r/w 一般 http server 是沒有 cache 的 (這工作是由另外的 proxy/cache server 執行)。
發表於 : 2006-10-12 03:01
由 進藤光
chiouss 兄說的我懂... 以前你也有提到 Smarty,不過我覺得 Smarty 太複雜,這樣真的會快得起來嗎??
我把我的意思重新整理一下:
當你把 SQL Server 安裝在另外一部主機,只透過 100M 區域網路連線的話... 當網路封包傳送的資料量越大的時候,SQL 只會變得更慢,只有減少 SQL 資料在兩台 Server 端上的資料傳輸量,才有可能會更快。
因此要是把更多的 Cache 資料放在 SQL 上,透過 SQL 抓取大量的快取資料,我認為只會更慢不會更快!也就是會變成 PHP 在等 SQL 把大量資料透過網路傳送過來,導致網頁產生速度變慢!
除非你把 phpBB 與 MySQL 通通架設在一台 Server 上,加大 DDRAM 到 2GB 甚至 4GB 以上,並且使用雙核心或是雙 CPU,一顆跑 php,另一顆跑 MySQL (當然囉~這不是絕對的,而是看誰不忙誰就會幫忙跑) 直接從 RAM Cache 抓取資料,這才可能會變快!
至於 File Cache 套用在 WinXP 與 Linux 都沒錯,不過套用在我這裡可就不一定成立囉~哈哈~~只要開啟過的檔案,File System 都會自動快取,反正整個 phpBB 檔案也不會整天改來改去的,因此到最後這些硬碟上的檔案,其實都被 Cache 到 SDRAM 裡面,效果與 MySQL 使用的 RAM Cache 一樣。
再不然 WinXP 與 Linux 也可以裝一個 RAM Disk,或是 RAM Disk Card (Gigabyte 有),把 phpBB 整個檔案放在 RAM 裡面,這樣就夠快了吧~XD
發表於 : 2006-10-12 09:14
由 chiouss
進藤光 寫:chiouss 兄說的我懂... 以前你也有提到 Smarty,不過我覺得 Smarty 太複雜,這樣真的會快得起來嗎??
用 template 本身就已經會慢了,哪有可能會快多少? XD
它頂多只是比那些不會 cache 的 template 快而已...
當你把 SQL Server 安裝在另外一部主機,只透過 100M 區域網路連線的話... 當網路封包傳送的資料量越大的時候,SQL 只會變得更慢,只有減少 SQL 資料在兩台 Server 端上的資料傳輸量,才有可能會更快。
因此要是把更多的 Cache 資料放在 SQL 上,透過 SQL 抓取大量的快取資料,我認為只會更慢不會更快!也就是會變成 PHP 在等 SQL 把大量資料透過網路傳送過來,導致網頁產生速度變慢!
這樣做會有一些安全上的問題,因為 php 和 db 之間的連線是完全沒有保護的,會不會被 sniff 或是 MIMTA 都很難說 :Q
當然也不是沒有辦法克服啦!MySQL 4.1+ 有支援使用 SSL 連線 (但是 PHP func. 好像還沒做進去),4.0 之前也可以用 SSH tunnel 去避免安全上的問題,但是加密會讓資料傳輸變慢這是一定的道理,要 tweak performance 的話這實在不是個好方法...
除非你把 phpBB 與 MySQL 通通架設在一台 Server 上,加大 DDRAM 到 2GB 甚至 4GB 以上,並且使用雙核心或是雙 CPU,一顆跑 php,另一顆跑 MySQL (當然囉~這不是絕對的,而是看誰不忙誰就會幫忙跑) 直接從 RAM Cache 抓取資料,這才可能會變快!
資源有限的情況下當然是分散開來比較有利,但是如果可以選我應該會讓 web 要用的 db 放在同一台上面,同一台機器 I/O 再怎樣慢也應該比再透過個網路 I/O 來得快。
至於 File Cache 套用在 WinXP 與 Linux 都沒錯,不過套用在我這裡可就不一定成立囉~哈哈~~只要開啟過的檔案,File System 都會自動快取,反正整個 phpBB 檔案也不會整天改來改去的,因此到最後這些硬碟上的檔案,其實都被 Cache 到 SDRAM 裡面,效果與 MySQL 使用的 RAM Cache 一樣。
這的確是 OS 本身的差異...
再不然 WinXP 與 Linux 也可以裝一個 RAM Disk,或是 RAM Disk Card (Gigabyte 有),把 phpBB 整個檔案放在 RAM 裡面,這樣就夠快了吧~XD
這也要實驗才知道,單純的 RAM Disk 分配的大小也要兼顧到 server 本身的 RAM 維持,畢竟這台 server 不是只跑 httpd 而已,要留多少 resource 給其他程式去用也要考慮。甚至其他的使用者 (如果那是台 public 的 server 的話就要考慮)
另外,任何一種方法都有 tweaking 的技巧可以讓他避免掉某些缺點 (像是你說的 i-RAM) 之類的,file cache 或是 db cache 都有,所以沒什麼好爭的,畢竟我們知識都離專家有一段距離 :Q
發表於 : 2006-10-12 20:10
由 進藤光
chiouss 寫:這樣做會有一些安全上的問題,因為 php 和 db 之間的連線是完全沒有保護的,會不會被 sniff 或是 MIMTA 都很難說 :Q
哈哈~~應該還不至於被 sniffer 給偷走...
我想我的防火牆雖然不怎麼頂級,但是想要從 WAN 混進來可不是件簡單的事!再加上我的 Mac 本身就有內建高級的 Firewall,遠比 WinXP 好太多,形成雙重防火牆!
再加上 Web Server 與 SQL Server 之間並不是走普通 192.168.x.x 網段,而是內部第二網路,這個與防火牆並沒有連接,想要 Sniffer 到連不過去的網路,不太可能吧~ XD
如果鄰居想要 sniffer 我的無線網路,也會到不了我真正的 LAN,至於前往 DMZ 應該也只有 80, 110, 25 這幾個 port,因此我不用擔心這個問題。
倒是把 Web Server 與 SQL Server 架在一起,我之前會有一個問題,那就是 Primary Server 掛掉,Secondary Server 接手之後,因為 SQL 不同裡面備份的資料也不同,即便你一天照三餐備份 3 次,也不可能完全一樣,除非你的討論區真的很冷清...
但是把 SQL 獨立之後就不同了,Primary Server 與 Secondary Server 都是抓相同的 SQL 資料,user 感覺不到已經掛掉其中一台 Web Server。當然囉~為了避免 SQL 也掛掉,也只好架成 Primary Server 與 Secondary Server 方式,但是資料又會面臨同步的問題...
至於 RAM Disk,建議至少 2GB 甚至 4GB 以上才能這樣玩。
我買了一張 CF card to IDE 的轉接卡,可是大多數 CF 卡的讀取速度比硬碟還慢,要想用這種方式來提高網站速度可能會效果不佳...