以下測試以取出wog_df 所有資料為準
函式內容 寫:
- 代碼: 選擇全部
function func1()
{
$result=$DB_site->query("SELECT d_id,d_name FROM wog_df");
while($d=$DB_site->fetch_array($result))
{
}
}
function func2()
{
if(!file_exists('./df_cache/df.txt') || filemtime('./df_cache/df.txt')+60*60 < time())
{
$fp=fopen('./df_cache/df.txt','w');
$result=$DB_site->query("SELECT d_id,d_name FROM wog_df");
while($d=$DB_site->fetch_array($result))
{
fputs($fp,$d['d_id'].','.$d['d_name']."\r\n");
}
fclose($fp);
}
$fp=fopen('./df_cache/df.txt','r');
while(fscanf($fp,'%d,%s',$d['d_id'],$d['d_name']))
{
}
fclose($fp);
}
運作結果 寫:第一次執行(快取未建立)
- 代碼: 選擇全部
總運作次數: 1 次.
總運作時間: 0.051589 秒.
[color=brown]Method 1[/color] 運作時間:0.020828 秒.
[color=olive]Method 2[/color] 運作時間:0.030761 秒.
[color=brown]Method 1[/color] 比 [color=olive]Method 2[/color] 快 47.690608795851 %
第二次之後(快取已建立)
- 代碼: 選擇全部
總運作次數: 1 次.
總運作時間: 0.025303 秒.
[color=brown]Method 1[/color] 運作時間:0.022251 秒.
[color=olive]Method 2[/color] 運作時間:0.0030519999999999 秒.
[color=olive]Method 2[/color] 比 [color=brown]Method 1[/color] 快 629.06290956751 %
總運作次數: 1 次.
總運作時間: 0.025568 秒.
[color=brown]Method 1[/color] 運作時間:0.022519 秒.
[color=olive]Method 2[/color] 運作時間:0.0030490000000001 秒.
[color=olive]Method 2[/color] 比 [color=brown]Method 1[/color] 快 638.57002295833 %
總運作次數: 1 次.
總運作時間: 0.025783 秒.
[color=brown]Method 1[/color] 運作時間:0.022744 秒.
[color=olive]Method 2[/color] 運作時間:0.003039 秒.
[color=olive]Method 2[/color] 比 [color=brown]Method 1[/color] 快 648.40408028957 %
個人評論 寫:從上方的四篇運作速度可以明顯的得知:
函式1雖然在第一次時的速度明顯比函式2要快上許多(約50%)
然而一旦快取建立的話,則函式2有著飛快似的處理速度(省去讀取資料庫的時間)
而且,只要有次序地建立起快取的話,甚至可以將整份wog_df都複製到快取內
不過有一點要稍微注意,快取主要是省去讀取少更新的資料的時間,例如wog_df、wog_character、wog_monster等
套用在其他像wog_player、wog_message等常更新的資料上幫助不大,甚至可能會拖慢速度
另外,若使用這種快取的話,必須在對相關資料作出更新後再將快取文件刪除,不然玩家就沒辦法立即取得更新的資料(也就喪失使用資料庫的意義了…)
以上提供給各位參考看看,有任何問題或指正歡迎提出