动态页面静态化的实现

首先,应该明确动态页面与静态页面之间的区别,为什么静态页面的加载要比动态的快。

PHP文件的执行阶段是:语法分析——>编译——>运行。

动态是执行这整个过程。

静态(只是一个纯静态的 html 文件),跳过了分析和编译的步骤,直接运行。

(优化页面响应时间的常见四种方法:动态页面静态化,优化数据库,使用负载均衡,使用缓存。。)

静态化用于那些不需要经常变动的页面,生成一个静态页面供用户访问,以减少服务器脚本的响应、计算时间。

PHP静态化-->伪静态:可以通过设置apache服务器得到,用户访问的网址是静态页面,实际上经过apache转换,实际上访问的是动态页面。

      -->纯静态:html文件

        -->局部纯静态:部分内容是动态的,通过ajax和JS技术辅助实现

       -->全部纯静态

我们创建了一个文件,在文件里写东西,并不是直接写入(缓冲区已经开启的情况下),而是先写入到buffer中,buffer满了,或者我们主动将buffer中数据冲刷才写入到磁盘中的文件。生成静态文件的原理就是,文件a.php的echo的同时,把要输出的内容全部存进buffer中,再将buffer中统一存入一个新的静态文件a.html中(a.html实际上一开始是空的),下次如果再次访问a.php,如果a.html存在且没有过期,就直接将用户的访问导向a.html,跳过了更多的语法分析和编译。

(1)a.php获取数据库内容

(2)a.php 中,require_once(‘a.tpl‘)。.tpl由于是html文件,也会输出到终端。

(3)将数据填充到a.tpl中

(4)file_put_contents()将缓冲填充到a.shtml静态文件中,终端输出生成静态文件成功的提示。

实际中,用户是不关心a.php的,他们只访问a.shtml

buffer在php.ini文件中应该是默认开启的。"output-buffering = On"。若没有开启,可以在a.php有输出之前,ob_start()开启buffer。

ob_start()//开启缓冲区,若原先已默认开启,则相当于开启新的

ob_get_contents()//得到缓冲区内容

file_put_contents()//将指定内容放入指定路径的文件

ob_clean()//清空缓冲区,这个方法之前echo的东西就不会输出到终端。

ob_get_clean()//得到并删除缓冲区内容

根据业务需求,触发系统生成静态文件的三种方式:

(1)页面添加缓存时间:

用户访问a.php,但在其开始加上判断,是否已经存在静态文件且未过期。是,则引入;否,则,生成新的内容,输出并生成静态文件,以供下回访问使用。

if(is_file(a.shtml) && (time() - filemtime(‘./a.shtml‘)) < 300){

  require_once(‘./a.shtml‘);

}else{

  //获取新的内容,输出,并生成新的静态文件

}

(2)手动触发方式:

比方说,工程师临时修改了页面中某一个东西。只要在后台制作一个集合了可以更新的文件的表单,想要更新哪个点哪个。

(3)crontab定时扫描程序。linux中定时执行文件。tail -f /var/log可以查看crontab日志。

时间: 2024-10-08 10:08:52

动态页面静态化的实现的相关文章

Asp.net动态页面静态化之初始NVelocity模板引擎

Asp.net动态页面静态化之初始NVelocity模板引擎 静态页面是网页的代码都在页面中,不须要运行asp,php,jsp,.net等程序生成client网页代码的网页,静态页面网址中一般不含"?"."="."&"等特殊符号. 静态页面不能自主管理公布更新的页面,假设想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件改动(通过fso等技术例外) 常见的静态页面举例:.html扩展名的..htm扩展名的. 注意:静态页面并

Asp.net动态页面静态化之include和parse区别

Asp.net动态页面静态化之include和parse区别    #include就是在模版中在将其他模版包括进来,就好比网站的头部,尾部,广告模版等等,这些内容都是相同的时候,就可以做成一个单独的模版供各处引用. #parse的用法跟#include相类似,如果将上面的代码改成#parse之后,效果是一样的,#parse的特殊功能在于,它可以解析Nvelocity元素,比如,body.html 模版使用Nvelocity变量 $body ,如果使用#parse引用head.html和foot

Asp.net动态页面静态化之输出对象属性(实体关联)

Asp.net动态页面静态化之输出对象属性(实体关联) 模板引擎不单单可以输出单一的数据,还能直接输出对象的属性 using System; using System.Collections.Generic; using System.Linq; using System.Web; using NVelocity.Runtime; using NVelocity; using NVelocity.App; namespace czbk { /// <summary> /// Handler2

Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则.强大的功能.高效的渲染效率.详尽的帮助说明与不断的更新与维护.常见的前端模板引擎有: 常用的java后台模板引擎:jsp.FreeMarker.Velocity等. 请不要迷恋速度,为了推广的测试可能是片面的,好的模板引擎经得起时间考验,建议大家选择成熟的.常用的模板引擎.另外不管前后端的模板引擎

Asp.net动态页面静态化之字典哈希表的输出已及遍历判断的实现

Asp.net动态页面静态化之字典哈希表的输出已经遍历判断的实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; using NVelocity.Runtime; using NVelocity; using NVelocity.App; using System.Collections; namespace czbk { /// <summary> /// diction

学习笔记 --- 缓存、动态页面静态化、网站优化

http://www.cnblogs.com/cs_net/archive/2011/03/17/1986620.html 一.缓存 缓存(Cache)技术在软件开发过程中有着广泛的用途, 它对提升软件性能和改善客户体验有很大帮助. 所谓缓存, 是指将那些经常重复的操作结果暂时存放起来, 在以后的执行过程中, 只要使用前面的暂存结果即可. 缓存技术在日常生活中随处可见, 就拿排队买票来说吧: 买票时需要先排队, 等轮到自己了, 再告诉售票员你需要买那里的票, 售票员查询完后告诉你有还是没有. 若

Nodejs基于Express4的动态页面静态化

上个星期在慕课网上提了个问:Express4开发的动态页面访问好慢的说?不幸的是并没有得到可行的回答,周末自己折腾了一番,一并将小站(花满楼)的几个页面全部静态化了:事后想了想,虽不是什么特别标准好的搞法,但纠结这么久了,这个问题终于有办法了,还是有些欣慰的: 一开始页面都是动态的,由jade模板render出来的,可不明白为什么不论页面内容多少,打开都至少要一秒多...:后来专门弄个站点作为静态资源站,缓存加gzip(Nodejs打造静态资源服务器与文件上传):OK,静态资源现在没啥大问题了:

php使用ob缓存来实现动态页面静态化

例子: <?phpinclude_once 'common/common.php';//数据库操作方法 $fileName = 'test.html';$expr = 10;//缓存时间$time_start = microtime();if( file_exists($fileName)){//判断文件是否存在 $fileCreateTime = filectime($fileName); if ($fileCreateTime+$expr > time()) {//判断缓存文件是否过期 /

动态页面静态化

curl http://bbs.51cto.com/post.php?action=newthread > 1.html 临时生成一个页面,不在去读数据库,但是有一个弊端,不会实时更新,可以写到计划任务,5分钟执行一次,重新生成一个静态页面