1 什么是动态语言静态化
将现有的php 等动态语言的逻辑代码生成为静态的html文件,用户访问动态脚本重定向到静态html 文件的过程就是动态语言静态化。
2 为什么要进行静态化处理
请求php 文件的过程:
用户打开浏览器 输入域名--> 找到对应ip地址(dns 服务器进行解析)--> ip返回客户端 -->客户端找到真实服务器--> 真实服务器找到相应端口的web服务 (比如80端口)--> 服务器(nginx 反向代理给 php-fpm ,fpm php 解析器)--> 解析成html 浏览器能看懂的文件--> 返回html;
如果是请求的html文件则不需要解析php文件以及访问数据库,可大大节省数据的查询。
原因:
- 动态脚本通常会做逻辑计算和数据查询,访问量越大,服务器压力越大。
- 访问量大时可能会造成CPU负载过高,数据库压力过大。
- 静态化类降低逻辑处理压力,降低数据库服务器查询压力
ps:但是只有对实时性要求不高的页面进行静态化缓存。
3 静态化实现的方式
1 使用模板引擎
使用smarty 的缓存机制生成静态html缓存文件
2 利用ob系列的函数
//主要用到一下几个函数
ob_start();// 打开输出控制缓冲
ob_get_contents(); // 返回输出缓冲区内容
ob_clean(); //清空输出缓冲区
ob_end_flush(); // 冲刷出输出缓冲区内容并关闭缓冲区
<?php
// html to php 动态语言静态化
if(!empty($_GET['id'])) {
$id = $_GET['id'];
}else{
$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() )){
echo '这里走html 缓存';
include $cache_name;
exit;
}
//打开输出控制缓冲
ob_start();
?>
<b>
this is php to html <?php echo $id;?>;
</b>
<?php
// 返回输出缓冲区的内容
$content= ob_get_contents();
//冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_flush();
$handle = fopen($cache_name,'w');// 打开文件或者 URL
fwrite($handle,$content);//写入文件(可安全用于二进制文件)
fclose($handle);//关闭一个已打开的文件指针
?>