測試環境:
WindowsXP IIS6 / PHP 5.21 / MySQL 5.1
數據庫有283222條數據.
測試情況:
select id 不使用緩存的情況下,用Adodb的分頁查詢(PageExecute),每頁需要 5-6秒
select * 不使用緩存的情況下,用Adodb的分頁查詢(PageExecute),每頁需要 20秒以上.
使用Adodb的緩存分頁查詢(CachePageExecute),打開速度未見明顯提升,因此放棄使用CachePageExecute .
使用Smarty緩存,查詢結果生成靜態文件保存.訪問速度如同靜態頁,但不是靜態頁,是要經過PHP處理的.(決定使用此方法)
方法代碼:
<?PHP
include_once('./islogin.PHP');
require './libs/smarty/Smarty.class.PHP';
include_once('./config/app.PHP');
$per = 20; //每頁顯示數量
$page = isset($_GET['page'])? $_GET['page'] : 1 ;
if(ereg('^[0-9]+$',$page) !=1)
$page = 1;
$sm = new Smarty;
$sm -> template_dir = "./templates/$web_lang";
$sm -> compile_dir = "./templates_c/$web_lang";
$sm ->caching = true; //開啟緩存
//判斷緩存是否存在
if(!$sm->is_cached('master_websites.htm',$_SESSION['author_id'],$page)) {
$uid = $_SESSION['author_id'];
$sql = "select name,id,email from users";
$websites = $webconn-> PageExecute($sql, $per, $page); //分頁查詢
$page_str = '';
if (!$websites->EOF ) //&& (!$websites->AtFirstPage() || !$websites->AtLastPage())) {
if(!$websites->AtFirstPage())
{
$page_str .= "<a href='websites.php'>首頁</a> <a href='websites.PHP?page=".($websites->AbsolutePage() - 1)."'>前頁</a>";
}
if(!$websites->AtLastPage())
{
$page_str .= " <a href='websites.php?page=".($websites->AbsolutePage() +1)."'>後頁</a> <a href='websites.PHP?page=".($websites->LastPageNo())."'>尾頁</a>";
}
$page_str .=' '. $w['current_page'] .$websites->AbsolutePage() .' '. $w['total_page'] .$websites->LastPageNo();
$ws = $websites->GetRows();
$show = (sizeof($ws)>0);
$sm -> assign('page_title',$page_title);
$sm -> assign('ws',$ws);
$sm -> assign('show',$show);
$sm -> assign('page_str',$page_str);
$sm -> display('master_websites.htm',$_SESSION['author_id'],$page); //區分不同用戶,不同頁面生成的緩存文件
include_once('config/end.PHP');
//$sm->clear_cache(null,$_SESSION['author_id']); //清空該用戶的所有緩存,在設計到修改,添加,刪除操作的時候,都要記得清空.
?>