1.什么是动态语言静态化
将现有PHP等动态语言的逻辑代码生成为静态HTML文件,用户访问动态脚本重定向到静态HTML文件的过程。
对实时性要求不高的页面
2.为什么要静态化
原因:
动态脚本通常会做逻辑计算和数据查询,访问量较大,服务器压力越大
访问量大时可能会造成CPU负载过高,数据库服务器压力过大
静态化可以减低逻辑处理压力,降低数据库服务器查询压力
3.静态化的实现方式
(1)使用模板引擎
可以使用Smarty的缓存机制生成静态HTML缓存文件
$smarty->cache_dir = $ROOT."/cache"; //缓存目录
$smarty->caching = true; //是否开启缓存
$smarty->cache_lifetime = "3600"; //缓存时间
$smarty->display(string template[, string cache_id[, string compile_id]]);
$smarty->clear_all_cache(); //清除所有缓存
$smarty->clear_cache('file.html'); //清除指定的缓存
$smarty->clear_chache('article.html', $art_id); //清除同一个模板下的指定缓存号的缓存
(2)利用ob系列的函数
理解ob系列函数的操作方法,会更容易理解Smarty缓存的原理。
ob_start():打开输出控制缓冲
ob_get_contents():返回输出缓冲区内容
ob_clean():清空输出缓冲区
ob_end_flush():冲刷出(送出)输出缓冲区内容并关闭缓冲
可以判断文件的inode修改时间,判断是否过期
使用 filemtime 函数
以下是一个ob函数的栗子:
<?php $id = $_GET['id']; if (empty($id)){ $id = ''; } $cache_name = md5(__FILE__). '-'. $id. '.html'; $cache_lifetime = 3600; if (file_exists($cache_name) && filemtime(__FILE__) <= filemtime($cache_name) && filemtime($cache_name) + $cache_lifetime > time() ){ include $cache_name; exit; } ob_start(); ?> <p>aaaThis is Script id = <?php echo $id; ?></p> <?php $content = ob_get_contents(); ob_end_flush(); $handle = fopen($cache_name, 'w'); fwrite($handle, $content); fclose($handle); ?>