PHP静态化页面

1、优化页面响应时间的方法
(1)动态页面静态化
(2)优化数据库
(3)使用负载均衡
(4)使用缓存

2、静态化的原因
(1)PHP文件(动态文件)执行流程:语法分析->编译->运行->展示结果
(2)静态文件(如HTML文件)执行流程:运行->展示结果
(3)静态文件的请求响应时间比动态文件的请求响应时间短。

3、动态页面静态化的使用场景
页面中的一些内容不经常改动,如新闻资讯类系统站点,即CMS系统。

4、动态页面静态化的实质就是生成静态的HTML文件。

5、使用动态页面静态化的好处:
(1)减少服务器脚本的计算时间
(2)降低服务器的响应时间,减小服务器压力

6、PHP输出内容的流程
内容->PHP buffer (output buffering)-> tcp ->终端(如浏览器)

7、buffer概述
buffer是缓冲区,一个内存地址空间,主要用于存储数据。

8、开启output buffering的方式
(1)在PHP.ini中通过output_buffering = ‘非off’(on或指定大小默认为4096字节)
(2)在程序中使用ob_start()函数开启(如果配置中已开启,再使用ob_start()将开辟出一块新的内存用于存放ob_start()函数下方的输出内容)

9、output buffering常用的函数
ob_start():打开输出控制缓冲;
ob_get_contents():返回输出缓冲区内容;
ob_clean():清空输入出缓冲区;
ob_get_clean():得到当前缓冲区的内容并删除当前输出缓冲区。
使用案例:

ob_start();
echo "我是输出的内容";
file_put_contents('index.shtml',ob_get_contents());

上述代码的运行结果:浏览器上显示:我是输出的内容;并生成index.shtml文件,文件中的内容是:“我是输出的内容”。

ob_start();
echo "我是输出的内容1";
file_put_contents('index.shtml',ob_get_contents());
ob_clean();

上述代码运行的结果是:浏览器空白,没内容;生成index.shtml文件,其内容是:“我是输出的内容1”。
浏览器上没内容的原因是,使用了ob_clean()函数,将output buffering中的内容清除了,结合“6、PHP输出内容的流程”,可以终端(浏览器)上没有内容显示。

ob_start();
echo "输出的内容";
file_put_contents('index1.shtml',ob_get_clean());

上述代码的运行结果,浏览器上没内容输出,生成index1.shtml文件,其内容是:“输出的内容”。因为ob_get_clean()函数相当于ob_get_contents()和ob_clean()两个函数的使用。

10、触发系统生成纯静态化页面的方式
(1)页面添加缓存时间
在用户请求的动态文件中添加判断,判断静态文件是否存在并且最后修改时间与当前时间比较,如果静态文件存在并且当前时间减去文件修改时间的差值小于设置的时间差(如20分钟),则让用户直接读取静态文件;否则动态获取数据并生成静态文件,然后输出到终端(如浏览器)。

    //1、链接数据库,从数据库等获取数据
    //2、获取的数据填充到模板文件
    //3、模板文件生成静态文件

    //引入数据库文件,自行脑补吧
    require_once 'db.php'; 

    //判断是否需要动态获取数据, #假设index.shtml是静态文件,  #$cache_time是指定的缓存时间,可在配置文件中配置
    if(file_exists('index.shtml') && (time() - filemtime('index.shtml')) < $cache_time){
        require_once 'index.shtml';
    }else{
        //实例化数据库类 并连接数据库
        $connect = Db::getInstance()->connect();#getInstance()是使用单例模式实例化数据库类,connect()是连接函数(此处假设连接成功)

        //动态获取数据
        $sql = "select * from tblname where 字段1 = '{$值}' order by id  desc limit n";
        $result = mysql_query($sql, $connect);
        while($row = mysql_fetch_array($result)){
            $res[] = $row;
        }

        //生成静态文件
        ob_start();
        require_once '模板文件';#引入模板文件
        #在模板文件中将上述的$res数据遍历到模板文件的对应位置,即完成数据填充模板文件。如
        <?php foreach($res as $key=>$val){?>
            <li><a href="<?php echo $val['id']?>"><?php echo $val['title'];?></a></li>
        <?php }?>


        file_put_contents('index.shtml', ob_get_contents());#这里使用ob_get_contents是为了用户的终端上又显示
    }

(2)手动触发方式
在后台设置触发生成静态文件的按钮,由管理员根据网站内容的修改而手动点击按钮生成静态文件。
(3)crontab定时触发
使用Linux的crontab设置定时动态获取数据生成静态文件,用户访问只访问静态文件即可。

猜你喜欢

转载自blog.csdn.net/yixu0534/article/details/79301961