大流量程序设计与实现--系列二

大流量程序设计与实现--系列二

五、页面静态化技术实现由两种方式

1. php自己的缓存机制

    1.1 ob缓存的机制

        ob1.php

        <?php

        //开启ob缓存

        ob_start();

        echo "hello100";

        header("content-type:text/html;charset=utf-8");

        echo "hello200";

        //ob_clean()清空ob中数据

        //ob_clean();

        //该函数是清空ob中数据,并关闭ob缓存

        //ob_clean();

        //ob缓存的数据,刷新到程序缓存,同时关闭ob

        //ob_end_flush();

        //ob缓存数据,刷新到程序,不关闭ob

        ob_flush();

        echo "hello300"

        //获取ob缓存的数据

        $str = ob_get_contents();

        //$str保存到文件中

        file_put_contents("a.log", $str);

        echo "hello500"

        echo "hello600"

        程序缓存

        content-type:text/html;charset=utf-8

        hello100

        hello200

        hello300

        hello500

        hello600

      ob2.php 浏览器缓存(浏览器缓存存在)

          <?php

          // flush()作用:把程序缓存的数据,强制刷新到浏览器缓存.

          //str_repeat(); 重复地输出多次字符

          echo str_repeat('', 1024);

          for($i=0;$i<5;$i++){

            echo $i;

            // 把程序缓存的数据,强制刷新到浏览器缓存.

            flush();

            //休眠1秒钟,在sleep这个过程中,http链接没有断

            sleep(1);

          }

          //如果不打开ob缓存,那么就只有程序缓存,

          //可是事实上是:隔5s就一下子,浏览器就输出01234

          //原因是:浏览器优化了,会接受255字字符后才开始输出

          //那怎么实现:每隔一秒,浏览器就输出一个字符呢,就用str_repead

    1.2//sns实时推数据到客户端,就是用这个sleep函数,保持长连接

    1.3 练习

1.3.0

<?php

ob_start();

echo "abc";

header("content-type:text/html;charset=utf-8");

echo "hello";

ob_clean();

echo "aa";

header("content-type:text/html;charset=utf-8");

//程序将输出aa,因为前面的被ob_clean();清理掉了

1.3.1

<?php

ob_start();

echo "abc";

header("content-type:text/html;charset=utf-8");

echo "hello";

ob_end_clean();

echo "aa";

header("content-type:text/html;charset=utf-8");

//仍然是aa

1.3.2

<?php

ob_start();

echo "abc";

header("content-type:text/html;charset=utf-8");

echo "hello";

ob_flush();

echo "aa";

echo ob_get_contents();

//结果:abchelloaaaa

//因为:abchelloob_flush()刷入了程序缓存,然后echo "aa"就会把aa放到ob缓存

//然后ob_get_contents()得到aa,echo,就是再次放入ob缓存,最终就有两个aa

1.3.3

<?php

    ob_start();

    echo "abc";

    header("content-type:text/html;charset=utf-8");

    echo "hello";

    ob_end_flush();

    echo "aa";

    echo ob_get_contents();

    //结果:abchelloaa

    //原因:ob_end_flush()关闭了ob,ob_get_flush()就为空了

    1.4.缓存原则

        1.4.1.如果ob缓存打开,则echo的数据首先放在ob缓存.

        1.4.2.如果是header信息,就直接放在程序缓存

        1.4.3. 当页面执行到最后,会把ob缓存的数据,放到程序缓存,然后一次返回给浏览器

    2. 使用模板替换技术实现(正则表达式)

    待发布......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值