[v4↑] 優化每日任務的檢查手續
發表於 : 2011-02-13 1:18 am
按照原設定,玩家在呼叫mission_list(), mission_detail(), mission_get(), mission_book()時會要求將前日的每日任務狀態刪除,達到刷新的效果
但每呼叫一次就會向資料庫做一次查詢,在大型環境下還是會顯得有些吃力
下面是改用文本的方式,檢查cache內存有的日期與系統日期有所不同時才會執行更新,希望藉此能紓緩資料庫的流量
※在V4.5的wog_class_mission.php的最底部似乎少了?>,如果有缺少的話請記得加上。
修改後有任何問題請提出~
但每呼叫一次就會向資料庫做一次查詢,在大型環境下還是會顯得有些吃力
下面是改用文本的方式,檢查cache內存有的日期與系統日期有所不同時才會執行更新,希望藉此能紓緩資料庫的流量
開啟檔案class/wog_act_mission.php 寫:In mission_list(), mission_detail(), mission_get(), mission_book()
尋找
- 代碼: 選擇全部
$DB_site->query('DELETE wog_mission_book FROM wog_mission_book,wog_mission_repeat WHERE wog_mission_repeat.m_id=wog_mission_book.m_id AND wog_mission_repeat.update_time<'.time());
改成
- 代碼: 選擇全部
$this->dailymission_check();
尋找
- 代碼: 選擇全部
}
?>
上方,加上
- 代碼: 選擇全部
function dailymission_check() {
global $DB_site;
$checkfile = './cache/dm.data';
if(!file_exists($checkfile)) {
$day = date('d');
$fp = fopen($checkfile, 'w+');
fputs($fp, $day);
fclose($fp);
} else {
$day = file($checkfile);
$day = intval($day[0], 10);
$today = intval(date('d'), 10);
if($today !== $day) {
if(!is_writeable($checkfile));
$fp = fopen($checkfile, 'w+');
flock($fp, LOCK_EX);
fputs($fp, $today);
flock($fp, LOCK_UN);
fclose($fp);
$DB_site->query('DELETE wog_mission_book FROM wog_mission_book,wog_mission_repeat WHERE wog_mission_repeat.m_id=wog_mission_book.m_id AND wog_mission_repeat.update_time<'.time());
}
}
}
儲存、關閉所有檔案
※在V4.5的wog_class_mission.php的最底部似乎少了?>,如果有缺少的話請記得加上。
修改後有任何問題請提出~