页面静态化处理的主要作用是:减少数据库的访问,减少服务器的带宽。
在高并发得情况下,大量的用户在访问某个页面的时候,首先PHP需要从数据库里面读取数据,然后在数据返回给前端,接着前端在将数据呈现在页面上,这一系列的情况下,首先大量得消耗了服务器本身的带宽,其次数据库的I/O也会被占用,一般mysql的吞吐量在800-1000的情况下是属于满载状态,超过这个数值,那剩下得请求就会处于堵塞等待状态,因此出现了页面静态化处理得技术。
它的实现原理就是:第一个用户在请求得到页面后,PHP会将整个页面的内容获取到,然后存储在一个文件中,当第二个用户或者第N个用户在访问这个页面的时候,PHP就直接读取这个文件然后将内容返回给用户。这样得话,首先减少了对数据的读取,其次也减少了,前后端之间的交互。其次也减少了服务器的带宽和流量。若是在这个静态化设置的前提下,在优化一下,那就是将存储的文件进行压缩,比如:访问一个文章页面,PHP经过处理后将内容存在一个article.html,这个文件得大小为30K,若PHP将内容压缩一下,在存入article.html文件,文件可能就变成15K或者更小。
PHP对内容进行压缩得处理,说白了,就是讲内容中的一些注释,换行,空白符给除去。下面是我自己写的一个类,话不多说,贴代码。
方法1,判断缓存文件是否存在(其中$time 指得是缓存的失效)
判断缓存文件是否存在
方法2,获取缓存文件内容并且返回
获取缓存内容
方法3,制作缓存文件,其中$this->compress_html()就是将内容进行压缩
内容缓存
方法4,压缩内容
内容压缩
下面就是对方法进行实例:以laravel为例
案例
下面看一下该文件。
压缩后的内容
贴一下代码:
class CompressHtml
{
/*@name:youngxs
* $path 缓存路径 * $time 判断缓存的有效期* */
public function is_file_html($path,$time=3600){
if(file_exists($path)&& time()-filemtime( $path )<$time){
return true;
}else{
return false;
}
}
/*@name:youngxs
* $path 缓存路径* */
public function get_html_detail($path){
if(file_exists($path)){
$get_html_content=file_get_contents($path);
return $get_html_content;
}else{
return false;
}
}
/*@name:youngxs
* $path 缓存路径 * @content 需要静态化的内容* */
public function put_html_data($path,$content){
ob_start();//开启缓存
$content=$this->compress_html($content);
echo $content;
file_put_contents( $path, ob_get_clean());
return $content;
}
/*@name:youngxs
* 压缩html : 清除换行符,清除制表符,去掉注释标记* @param $string
* @return压缩后的$string
* */
function compress_html($string){
$string=str_replace("\r\n",'',$string);//清除换行符
$string=str_replace("\n",'',$string);//清除换行符
$string=str_replace("\t",'',$string);//清除制表符
$pattern=array(
"/> *([^ ]*) *</",//去掉注释标记
"/[\s]+/",
"/<!--[^!]*-->/",
"/\" /",
"/ \"/",
"'/\*[^*]*\*/'"
);
$replace=array (
">\\1<",
" ",
"",
"\"",
"\"",
""
);
return preg_replace($pattern, $replace, $string);
}
}







网友评论