一、入门三部曲

1、什么是页面静态化

百度百科介绍

    静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页,静态页面网址中一般不含“?”、“=”、“&”等特殊符号。静态页面不能自主管理发布更新的页面,如果想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件修改(通过fso等技术例外) 常见的静态页面举例:.html扩展名的、.htm扩展名的。
注意:静态页面并非网站上没有动画的就是静态页面。

简而言之:页面静态化是将html页面中需要动态获取的数据以具体形式存在于html页面,访问页面时不需要再动态获取(查询数据库)相关数据。

2、为什么要用页面静态化

  • URL美观 --- 静态页面不再需要使用?、&、=之类的符号
  • 便于搜索引擎收录 --- 搜索引擎对动态页面的收录率很低,而对静态页面收录较好
  • 提高程序性能 --- 对于频繁访问且数据没有更新的页面,使用静态化可一定程度上降低计算机程序的访问负荷,提高性能

3、怎么实现页面静态化?

使用OB缓冲技术(Output Buffering)

实现原理

php向客户端回应数据的时候,如果开启了缓冲,先将回应的数据输出到缓冲中

  • 回应数据包括: echo ''' var_dump(); require ''

二、页面静态化在PHP中的应用

1、必备函数:

(1)ob_start() --- 开启ob缓冲

(2)ob_get_contents() --- 读取缓冲内容

(3)ob_get_length() --- 获得缓冲中内容的长度

(4)ob_flush() --- 冲刷出(送出)输出缓冲区中的内容

(5)ob_get_flush() --- 刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。

(6)ob_clean() --- 清空(擦掉)输出缓冲区

(7)ob_get_clean() --- 得到当前缓冲区的内容并删除当前输出缓。

(8)ob_end_clean() --- 清空(擦除)缓冲区并关闭输出缓冲

(9)ob_gzhandler() --- 压缩输出缓冲区中内容

2、OB缓冲相关介绍

(1)OB多缓冲

每次调用ob_start()都会开启一个缓冲区域,形成多缓冲,但每次操作的都是就近的缓冲

(2)OB缓冲处理器

就是一个函数,当缓冲区域的内容被刷出的时候自定调用的函数

如:

ob_start(ob_gzhandler);
echo str_repeat('Hello World!<br>',1000);

此时将ob_gzhandler()作为回调函数,对缓冲区域进行压缩,一定程度上节省存储空间。

(3)ob缓冲和php程序缓冲的区别

  • php程序缓冲flush():自动使用,内置的,访问视频等资源时会自动使用。
  • ob缓冲:可以进行设置开启或关闭。

3、实现页面静态化

(1)何时生成静态页面?

  • 提交表单,获取到表单提交的数据后。

(2)怎么生成静态页面?

  • 首先将需要的动态数据获取到,并分配到模板中
  • 然后通过模板引擎(Smarty)获取到html内容
  • 再读取缓冲内容
  • 最后将缓冲内容保存为静态html文件。
// 1.首先将需要的动态数据获取到,并分配到模板中
$this->smarty->assign('user', $user);
$this->smarty->assign('list',$list); // 2.然后通过模板引擎(Smarty)获取到html内容
$content = $this->smarty->fetch('index/index.html'); // 3.再读取缓冲内容
$res = ob_get_contents(); // 4. 最后将缓冲内容保存为静态html文件
file_put_contents('./newIndex.html', $res);

(上述代码只是模拟过程)

【注】:

(1)需要将静态文件的url路径保存到数据库,并作为下次访问时的请求地址。

(2)生成静态文件后注意资源(css,js,img等)引入路径的变化

PHP扩展功能 ---- 页面静态化(OB缓冲)的更多相关文章

  1. 利用php的ob缓存机制实现页面静态化

    利用php的ob缓存机制实现页面静态化 首先介绍一下php中ob缓存常用到的几个常用函数ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清 ...

  2. 使用ob缓存简单实现页面静态化

    <?php //接收新闻id,传统的方法查询数据库并显示数据 $id=intval($_GET['id']); //先判断该新闻对于的静态页面是否存在,如果有,则直接返回,如果 //没有,则查询 ...

  3. php的ob实现页面静态化

    php页面静态化的原理,用最少的代码解释页面静态化 如何应用:在插入或更新数据到数据库时,就执行一下代码是一种比较好的方法.比如:php执行add()方法时(就是插入数据时) //开启缓存 Ob_st ...

  4. php页面静态化

    如何优化页面响应时间: 动态页面静态化 优化数据库 使用负载均衡 使用缓存 如果页面中的一些内容不经常改动,可以使用动态页面静态化.好处是:减少服务器脚本的计算时间:降低服务器的响应时间. 1.动态U ...

  5. PHP 实现页面静态化

    PHP文件执行阶段:语法分析->编译->运行 静态html文件执行顺序:运行 动态程序: 连接数据库服务器或者缓存服务器->获取数据->填充到模板->呈现给用户 关于优化 ...

  6. 大型网站提速关键技术(页面静态化,memcached,MySql优化)(三)

    页面静态化的技术实现有两种方式 使用PHP自己的缓存机制 先说明一下OB缓存的机制. ob1.php 代码:说明的ob的各个用法->项目中 ☞ 如何打开ob缓存 ①     配置php.ini ...

  7. 基于 ThinkPHP 3.2.3 的页面静态化功能的实现

    PHP 的页面静态化有多种实现方式,比如使用输出缓冲(output buffering),该种方式是把数据缓存在 PHP 的缓冲区(内存)中,下一次取数据时直接从缓冲区中读取数据,从而避免了脚本的编译 ...

  8. 页面静态化3 --- 使用PHP页面缓存机制来完成页面静态化(下)操作一个案例(新闻管理系统)

    案例需求: 使用PHP缓存机制完成新闻管理系统的页面静态化数据库表 ecs_article (新闻表)因为新闻这些信息,并不是对实时性要求高,本身这个新闻比较稳定,内容也比较固定,所以我们考虑: 当第 ...

  9. 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)

    我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...

随机推荐

  1. JS 监听键盘按键

    1. 实现Ctrl+ Enter 组合键触发事件 document.onkeydown=function(event){ var keyNum = window.event ? event.keyCo ...

  2. varchar(n)跟varchar(max)的区别

    本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...

  3. java二叉搜索树原理与实现

    计算机里面的数据结构 树 在计算机存储领域应用作用非常大,我之前也多次强调多磁盘的存取速度是目前计算机飞速发展的一大障碍,计算机革命性的的下一次飞跃就是看硬盘有没有质的飞跃,为什么这么说?因为磁盘是永 ...

  4. SpringMVC拦截器的实现单方登陆

    过滤器跟拦截器的区别 ①拦截器是基于java的反射机制的,而过滤器是基于函数回调.②拦截器不依赖与servlet容器,过滤器依赖与servlet容器.③拦截器只能对action请求起作用,而过滤器则可 ...

  5. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  6. 006Spring面向切面

    01.基本术语---->POM中配置spring-aspects 1.通知(Advice)---->要做的事 前置通知(@Before) 后置通知(@After) 返回通知(@AfterR ...

  7. CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案

    CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...

  8. _tcsrchr

    原文:http://www.cnblogs.com/diyunpeng/archive/2012/01/18/2325289.html _tcsrchr #include <afx.h> ...

  9. YII+DWZ三级城市联动挂件

    挂件PHP文件 class CountryCityCombox extends RXWidget { public $provinceId = 2; public $cityId = 3687; pu ...

  10. java笔记--增加虚拟机内存

    --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877243.html "谢谢-- 为避免大型应用程序因虚拟机内存不足而无法 ...