php缓存机制

开始以前先看下php自带缓存指令:php

ob_start()  //开启缓存 php.ini中通常是4096nginx

ob_clean()  //清空缓存程序员

ob_end_clean()  //清空缓存,关闭缓存web

ob_flush() //刷新缓存(将缓存现有内容输出)  把php缓存写入apahce/nginx缓存apache

flush() //把apahce/nginx缓存写入浏览器缓存浏览器

ob_end_flush()  //刷新缓存,并关闭缓存缓存

$contents = ob_get_contents() //得到缓存内容架构

全部的php程序员都知道在php脚本里面执行 echo “1”;访客的浏览器里面就会显示“1”。函数

可是咱们执行下面的代码的时候,并非显示“1”以后1秒再显示“2”,而是等待5秒后直接显示“12”学习

echo '1';
sleep(1);
echo '2';

这就涉及到几个缓存机制,为了更高的薪水,同窗们很是有必要把这个缓存机制学习好。

一般状况下,咱们的web应用由如下几个要素构成:

php->apache->浏览器。这篇文章咱们就以这个架构为例来说解数据是如何在整个“链条”上流通的。

 

 

看了上面的图,咱们终于知道上面为何会同时显示“12”了,由于echo '1'尚未装满php的缓存,因此“1”还在php的缓存里面,没有到浏览器,等到程序结束后“12”才一块儿到浏览器。

固然咱们也能够手动刷新缓存

echo '1';
ob_flush(); //把php缓存写入apahce缓存
flush(); //把apahce缓存写入浏览器缓存
sleep(1);
echo '2';

咱们把代码改为如上以后,浏览器仍是要等1秒才同时显示“12”,这是由于“1”虽然已经发送给浏览器,可是浏览器缓存尚未装满,并无渲染,一直到等到程序结束后才渲染出“12”。

咱们以谷歌浏览器为例(缓存1000bytes),经过下面的代码,咱们就能够实现先显示“1”,隔1秒再显示“2”

for($i=1;$i<11;$i++){
    echo str_repeat(' ' ,1000); //这里会把浏览器缓存装满
    ob_flush(); //把php缓存写入apahce缓存
    flush(); //把apahce缓存写入浏览器缓存
    sleep(1);
    echo $i;
}

讲到这里,咱们不得不提一下“ob_start()”这个函数,这个函数的做用就是开启一个新的php缓存。咱们仍是经过代码来讲明

ob_start();
for($i=1;$i<11;$i++){
    echo str_repeat(' ' ,1000); //这里会把浏览器缓存装满
    ob_flush(); //把php缓存写入apahce缓存
    flush(); //把apahce缓存写入浏览器缓存
    sleep(1);
    echo $i;
}

在原有的基础上咱们仅仅加了个ob_start(),结果又变成了等1秒后同时显示"1234"了,(须要将1000改成4096才会1秒显示I个)。这是由于每个ob_start()都在原来的缓存空间上开辟一个子缓存空间,ob_flush()是把当前缓存空间输出到上级缓存空间,php只有一个缓存空间的时候,上级缓存空间就是apache的缓存,当php有多个缓存空间的时候,ob_flush()的就不能把php缓存写入apache缓存了

相关文章
相关标签/搜索