使用ob缓存实现真静态
实现页面的真静态化可以通过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缓存函数的使用
代码一:

代码二:

代码三:

代码四:

3、案例-使用ob缓存文章详情页
1、先完成文章的列表页


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)


删除的静态页如下:

问题:当用户对文章进行编辑或者删除,对应的之前生成的静态页应该怎么处理?
解决办法:直接删除对应的静态页; 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 次
使用ob缓存实现真静态的更多相关文章
- 利用PHP的ob函数实现生成静态化页面
之前用过一些开源的CMS管理系统,当时就很好奇后台中的生成HTML静态文件是怎么实现的.今天和同事讨论了下,没想到同事之前做过这类的生成静态页面的功能,果断向他请教了下. 经他讲解后,才知道其实生成静 ...
- 利用php的ob缓存机制实现页面静态化
利用php的ob缓存机制实现页面静态化 首先介绍一下php中ob缓存常用到的几个常用函数ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清 ...
- php利用ob缓存机制实现页面静态化方法全解
首先介绍一下php中ob缓存常用到的几个常用函数 ob_start():开启缓存机制 ob_get_contents():获取ob缓存中的内容 ob_clean()清除ob缓存中的内容,但不关闭缓存 ...
- 使用ob缓存简单实现页面静态化
<?php //接收新闻id,传统的方法查询数据库并显示数据 $id=intval($_GET['id']); //先判断该新闻对于的静态页面是否存在,如果有,则直接返回,如果 //没有,则查询 ...
- 页面静态化3 --- (伪静态+ob缓存)实现优化
要求:使用伪静态完成简单的新闻查询! 伪静态是站在SEO的角度来看的,他对应的页面不是真正存在的(而真静态的页面是事先生成的),而是每次查询数据库得到的信息!
- php页面静态化,ob缓存方法
<?php ob_start();//开启缓存 //要生成静态网页的内容开始 ?> 中间的html代码 <?php //要生成静态网页的内容结束 //把生成的静态内容保存到文件,而不 ...
- ob缓存
ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存.如果是header信息,直接放在程序缓存.当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器.下面我说说ob的基 ...
- 转:php页面静态化之真静态
之前的缓存和现在所说的页面静态化都是为网站提速的,如果是访问量小的小型网站可能不需要但是如果网站规模或访问量很大,那么页面静态化和缓存就会体现出各自的价值了下面先来了解下页面静态化的分类 页面静态化的 ...
- php的ob函数实现页面静态化
首先介绍一下php中ob缓存常用到的几个常用函数ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清除ob缓存中的内容,但不关闭缓存ob_e ...
随机推荐
- Spring:AOP面向切面编程
AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...
- Bootstrap开发框架界面的调整处理
我在之前介绍了很多关于Boostrap的框架方面的文章,主要是介绍各种插件的使用居多,不过有时候觉得基于Metronic的Boostrap框架的界面效果不够紧凑,希望对它进行一定的调整,那么我们应该如 ...
- hdu 3037——Saving Beans
Saving Beans Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Lodop打印表格带页头页尾 高度是否包含页头页尾
通过设置TableHeightScope,可以实现对ADD_PRINT_TABLE,表格带页头页尾,查看本博客另一篇博文:Lodop打印表格带页头页尾 自动分页每页显示头尾 超文本超过打印项高度,会自 ...
- ibufds原语
低压差分传送技术是基于低压差分信号(Low Volt-agc Differential signaling)的传送技术,从一个电路板系统内的高速信号传送到不同电路系统之间的快速数据传送都可以应用低压差 ...
- webpack4 学习 --- webpack和webpack-dev-server
以前了解过webpack2, 所以对webpack 不是很陌生,就直接入主题吧.新建一个文件夹,就叫它webpack-tut吧.然后在文件中新建一个src 文件夹,存放我们的源文件,再在src 文件夹 ...
- 【数学建模】偏最小二乘回归分析(PLSR)
PLSR的基本原理与推导,我在这篇博客中有讲过. 0.偏最小二乘回归集成了多元线性回归.主成分分析和典型相关分析的优点,在建模中是一个更好的选择,并且MATLAB提供了完整的实现,应用时主要的问题是: ...
- python控制台输出带颜色的文字方法
#格式: 设置颜色开始 :\033[显示方式;前景色;背景色m 注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个:另外由于表示三个参数不同含义的数值都是唯一的没有 ...
- Zookeeper 启蒙
2018-12-14 关键词: Zookeeper入门介绍 . Zookeeper是什么.Zookeeper架构解析.Zookeeper应用场景.Zookeeper有什么用 本篇文章系笔者依据当前所掌 ...
- Django 路由系统
Django 路由系统 基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说 ...