PHP页面全静态化压缩缓存

2019-04-03  本文已影响0人  youngxs

页面静态化处理的主要作用是:减少数据库的访问,减少服务器的带宽。

在高并发得情况下,大量的用户在访问某个页面的时候,首先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);

}

}

上一篇 下一篇

猜你喜欢

热点阅读