使用ob缓存实现真静态

时间:2021-02-11 07:26:55

实现页面的真静态化可以通过php的ob缓存来实现:

1、ob缓存认识

Ob就是output_buffering:输出缓存。

如果ob(函数ob_start())缓存打开,则echo的数据首先放在ob缓存中,当php代码执行完毕后,会把ob缓存的数据移到程序缓存,然后依次返回给浏览器缓存

也就是在请求一个php的过程中,实际经过了三个缓存:

ob缓存(如果开启)—> 程序缓存—> 浏览器缓存。

注意:请求一个php一定要经过的两个缓存:程序缓存和浏览器缓存。

2、ob缓存重要的几个函数

ob_start() 开启ob缓存

ob_get_contents() 获取ob缓存中的数据

ob_clean() 清空ob缓存中的内容

ob_end_clean() 清空ob缓存中的内容并关闭ob缓存

ob_flush() 把ob缓存中的数据刷新(移到)到程序缓存

3、ob缓存函数的使用

代码一:

使用ob缓存实现真静态

代码二:

使用ob缓存实现真静态

代码三:

使用ob缓存实现真静态

代码四:

使用ob缓存实现真静态

3、案例-使用ob缓存文章详情页

1、先完成文章的列表页

使用ob缓存实现真静态

使用ob缓存实现真静态

1、需要把对应的文章生成一个html的静态页

分析:当访问一个文章详情页的时候,第一次从数据库获取对应的文章内容,第二次请求之后,应该把ob缓存中的内容写在一个对应的html静态页中。

访问静态页:

detail.php?id=46    detail_46.html

detail.php?id=47    detail_47.html

对应的静态页有生成,怎么直接读取对应的静态页?

答:需要判断对应的文章详情页存不存在,还要设置一个有效期,且在我们设定的有效期内才直接读取对应的静态页。

detail.php?id=46    detail_46.html

判断文件是否存在:file_exists(filename);

设置有效期:文件的修改时间+有效期>time()

100 +   1000 205

filemtime(filename)+100  >2000(time)

使用ob缓存实现真静态

使用ob缓存实现真静态

删除的静态页如下:

使用ob缓存实现真静态

问题:当用户对文章进行编辑或者删除,对应的之前生成的静态页应该怎么处理?

解决办法:直接删除对应的静态页; unlink($filename); 删除之后,用户再次访问的时候,会再次生成一个静态页。

如访问的文章id=4

$filename = “detail_{$id}.html”;

if(file_exists($filename)){

    unlink($filename ); //删除文件

}
function  edit(){

    $id=4;

    $filename = “detail_{$id}.html”;

    if(file_exists($filename)){

        unlink($filename ); //删除文件

    }

}

这种真静态对应并发的好处,如并发量是1000(1秒内有1000请求),

并发量是1000,缓存60s,60内,文章详情页需要操作数据库 1 次

并发量是1000,不缓存,60内,文章详情页需要操作数据库 60*1000 = 60000 次

相关文章