页面静态化3 --- 使用PHP页面缓存机制来完成页面静态化(下)操作一个案例(新闻管理系统)
案例需求:
使用PHP缓存机制完成新闻管理系统的页面静态化
数据库表 ecs_article (新闻表)
因为新闻这些信息,并不是对实时性要求高,本身这个新闻比较稳定,内容也比较固定,所以我们考虑:
当第一个用户访问某条新闻后,我们使用PHP缓存机制把页面显示内容缓存到一个静态页面(.html)中,当下次访问时,直接访问html页面即可。
一个新闻列表页,一个新闻详细页,要求点击一篇title的时候,生成一个静态页面,当第二次再打开这个title的链接的时候,有静态页面则取静态页面来显示。
新闻列表页:
新闻详细页:
我们要缓存的就是这个页面!
思路:
1、显示列表页。
2、给列表title添加链接
3、
①第一次点击:
点击title链接触发php程序,生成静态页面。
②第二次点击:
//触发PHP程序,首先去找第一次生成的静态文件是否存在: //filemtime($filepath) => 返回该文件最后一次修改的时间
if (file_exists($html_path) && (filemtime($html_path)+30>time()) {
//存在直接显示这个文件
echo file_get_contents($html_path);
exit;
} else {
//不存在,读取数据库,生成静态文件
//根据新闻id读取对应的新闻内容
}
以上是单纯使用PHP缓存机制完成页面静态化,但如何解决新闻更新,静态页面也更新呢,和将动态网址变为静态网址
解决思路:
当数据库中新闻内容变更(增加一篇新文章,或者一篇文章的内容被修改)的时候,就让这个新闻对应的静态页面也跟着生成和变更!--通过网站的设计模板创建爱你静态页面。
真静态:
案例:在编辑人员增加一篇新闻的同时,创建一个这篇新闻页面的静态页面
$post = $_POST;
// $id = M('article')->add($post);
$title = $post['title'];
$content = $post['content'];
$id = M('article')->add($post);//框架,添加到数据库
if ($id) {
//生成静态文件
//新闻详细页模板文件路径
$tpl = HTML_PATH.'/news_detail.html';//定义的新闻详细页的模板路径
//要创建的新闻页面
$newfile = HTML_PATH.CONTROLLER_NAME.'/news_detail_id'.$id.'.html';//定义的创建的真静态页面的路径
$tpl = fopen($tpl, 'r');//以只读方式打开模板页面-----关键
$newfile = fopen($newfile, 'w');//以写入方式打开新建文件-------关键
//添加这个”头“到新文件,防止乱码,防止浏览器缓存页面
$head = "<head><meta http-equiv='Content-Type' content='text/html;Charset=utf-8' /><meta http-equiv='Cache-Control' content='no-cache' /><meta http-equiv='Expires' content='-1' /><meta http-equiv='Pragma' content='no-cache' /></head>";
fwrite($handle, $head);
while (!feof($tpl)) {
$con = fgets($tpl);//读取一行
//替换
$con = str_replace(array('<%title%>','<%content%>'), array($title, $content),$con);
//把替换后的文件写入到新文件中
fwrite($newfile, $con);
}
//关闭文件句柄
fclose($tpl);
fclose($newfile);
echo '添加成功,并创建其对应的静态页面';
jump('新闻列表页面路径');
} else {
echo '新闻添加失败,请重试...';
}
在新闻列表页,当点击链接跳转到详细页面时,直接读取静态页面!
说明:当更新的时候,注意删除原来的静态文件,修改后重新生成新的静态文件取代原来的静态文件。此操作略...
总结:
①为什么静态化
②静态化的方法(使用ob缓存来实现静态化 问题1 实时性不好,有延时;问题2 请求某个查询页面时使用 PHP 动态网站)
③真静态(在添加和修改的时候,可以实时的处理静态页面,问题:如果真静态的数据是海量的就会造成真静态的HTML页面很多,占用磁盘空间大,导致系统性能大幅下降:要查询某个真静态文件会遍历这个磁盘空间。)---如果生成的真静态是海量的,那么不适合使用这个真静态技术。
③要解决真静态的问题,就要用到伪静态技术。
页面静态化3 --- 使用PHP页面缓存机制来完成页面静态化(下)操作一个案例(新闻管理系统)的更多相关文章
- 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)
我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...
- H5 缓存机制浅析 移动端 Web 加载性能优化
腾讯Bugly特约作者:贺辉超 1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5 引入的离线存储, ...
- PHP缓存机制详解
一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output ...
- 二,PHP缓存机制详解
一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output ...
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
atitit.浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结 1. 缓存的一些机制 1 1.1. http 304 1 1.2. 浏览器刷新的处理机制 1 1.3. Expir ...
- h5的离线缓存机制
什么是Manifest: 其实Manifest是一个简单的 文本文件,它的扩展名是任意的,定义需要缓存的文件.资源,当第一次打开时,浏览器会自动缓存相应的资源. Manifest 的特点: 离线浏览: ...
- H5离线缓存机制-manifest
简介:Manifest 其实就是web应用的一种缓存机制,主要用于现在webapp应用中,它是浏览器自己的一种机制,随着移动互联网时代的到来,网络可靠性降低,如果我们已经将需要的文件缓存下下来,一旦网 ...
- 【Web缓存机制系列】2 – Web浏览器的缓存机制
Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...
- 【Web缓存机制系列】2 – Web浏览器的缓存机制-(新鲜度 校验值)
Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...
随机推荐
- active mq 配置延时
修改activemq.xml 在<broker>里添加属性schedulerSupport="true" 参考:http://blog.csdn.net/kimmkin ...
- ML 04、模型评估与模型选择
机器学习算法 原理.实现与实践——模型评估与模型选择 1. 训练误差与测试误差 机器学习的目的是使学习到的模型不仅对已知数据而且对未知数据都能有很好的预测能力. 假设学习到的模型是$Y = \hat{ ...
- JAVA定时执行任务,每天定时几点钟执行任务
JAVA定时执行任务,每天定时几点钟执行任务的示例如下: 1.建立TimerManage类,设置时间点,时间点设置的管理类,代码如下: package com.pcitc.time; import j ...
- 简单几何(凸包) POJ 1113 Wall
题目传送门 题意:求最短路线,使得线上任意一点离城堡至少L距离 分析:先求凸包,答案 = 凸包的长度 + 以L为半径的圆的周长 /*********************************** ...
- BZOJ2837 : 小强的形状
离散化后通过树状数组求出: b[i]为i之前比它小的. c[i]为i之前比它大的=i-1-i之前小于等于它的. d[i]为i之后比它小的. e[i]为i之后比它大的=n-i-f[i]. f[i]为i之 ...
- Vijos 1100 (区间DP)
题目链接: https://vijos.org/p/1100 题目大意:NOIP著名的加分二叉树.给出一棵树的中序遍历,加分规则左子树*右子树+根.空子树分数为1.问最大加分的树结构,输出树结构的先序 ...
- android 常用第三方包的代码混淆
首先在:project.properties 文件下,启动代码混淆 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:pro ...
- 【BZOJ】3669: [Noi2014]魔法森林(lct+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=3669 首先看到题目应该可以得到我们要最小化 min{ max{a(u, v)} + max{b(u, ...
- HDU 4666 Hyperspace(曼哈顿距离)
题目链接 这是HDU第400个题. #include <cstdio> #include <cstring> #include <set> #include < ...
- [BZOJ 3759]Hungergame
Nim游戏获胜的条件是所有石子的异或和为0 如果先手要获胜,那么一定是打开了一个异或和为0的极大子集 什么是极大子集呢? 就是无论后手打开任何子集的箱子,都不能再使此时打开的箱子异或和为0. 容易证明 ...