zoukankan      html  css  js  c++  java
  • 动态页面静态化的实现

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

    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日志。
  • 相关阅读:
    研究生第二学期总结
    Android应用开发EditText文本内容变化监听方法
    Android 自定义动画 Loading
    UML建模之活动图介绍(Activity Diagram)
    UML学习(二)-----类图
    UML系列图--用例图
    Lesson9 some interesting things in C#
    Lesson10 Fianl and fellings
    Lesson 7: C#多线程
    浅谈android Socket 通信及自建ServerSocket服务端常见问题
  • 原文地址:https://www.cnblogs.com/omigia/p/4622924.html
Copyright © 2011-2022 走看看