什么是动态语言静态化
将现有 PHP 等动态语言的逻辑代码生成为静态HTML 文件,用户访问动态脚本重定向到静态 HTML 文件的过程。
如果页面中的的数据一直都在变化,那么不建议使用静态化。
为什么要静态化
动态脚本通常会做逻辑运算和数据查询,访问量越大,服务器压力越大。
访问量大的时候可能造成 CPU 负载过高,数据服务器压力过大,静态化可以减轻逻辑处理能力,降低数据库服务器的查询压力。
静态化的实现方式
使用模板引擎
可以使用 Smarty 的缓存机制生成静态 HTML 缓存文件。
$smarty->cache_dir = $ROOT.'/cache'; //缓存目录
$smarty->caching = true; //是否开启缓存
$smarty->cache_lifetime = '3600'; //缓存时间
$smarty->display(strign template [,string cache_id[, strign compile_id]]);
如果开启了缓存,Smarty 会自动的生成 HTML 缓存文件。
$smarty->clear_all_cache(); //清除所有缓存
$smarty->clear_cache('file.html'); //清除指定缓存
$smarty->clear_cache('article,html', $cache_id) //清除一同模板下的指定缓存号的缓存。
利用 OB 系列函数
- ob_start():打开输出控制缓冲
- ob_get_contents():返回输出缓冲区的内容
- ob_clean():清空输出缓冲区
- ob_end_flush():冲刷出(送出)输出缓冲区内容并且关闭缓冲
ob_start();
输出到页面的 HTML 代码
ob_get_contents();
ob_end_flush();
fopen()写入
可以使用 filectime 函数 判断文件的 inode 修改时间,判断是否过期。
<?php
$cache_name = md5(__FILE__).'html';
$cache_lifetime = 3600;
if ( filectime(__FILE__) <= filectime($cache_name) file_exists($cache_name) && filectime($cache_name) + $cache_lifetime > time()) {
//判断 PHP 文件修改时间
//判断是否存在缓存
//判断是否过期
include $cache_name;
exit;
}
ob_start();
?>
<b> This is my Script</b>
<?php
$content = ob_get_contents();
$ob_end_flush();
$handle = fopen($cache_name, 'w');
fwrite($handle, $content);
fclose($handle);
?>