一起源码网

  • www.171739.xyz
  • 全球最大的互联网技术和资源下载平台
搜索
猜你喜欢
查看: 8600|回复: 1
打印 上一主题 下一主题

必须要了解的php缓存机制

[复制链接]

0

主题

0

帖子

1万

积分

钻石会员

Rank: 8Rank: 8

积分
17424
QQ
跳转到指定楼层
楼主
发表于 2020-4-25 12:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
所有的php程序员都知道在php脚本里面执行 echo “1”;访客的浏览器里面就会显示“1”。
但是我们执行下面的代码的时候,并不是显示“1”之后5秒再显示“2”,而是等待5秒后直接显示“12”

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

这就涉及到几个缓存机制,为了更高的薪水,同学们非常有必要把这个缓存机制学习好。
通常情况下,我们的web应用由以下几个要素构成:
php->apache->浏览器。这篇文章我们就以这个架构为例来讲解数据是如何在整个“链条”上流通的。

这就涉及到几个缓存机制,为了更高的薪水,同学们非常有必要把这个缓存机制学习好。
通常情况下,我们的web应用由以下几个要素构成:
php->apache->浏览器。这篇文章我们就以这个架构为例来讲解数据是如何在整个“链条”上流通的。

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

我们把代码改成如上之后,浏览器还是要等5秒才同时显示“12”,这是因为“1”虽然已经发送给浏览器,但是浏览器缓存还没有装满,并没有渲染,一直到等到程序结束后才渲染出“12”。
我们以谷歌浏览器为例(缓存1000bytes),通过下面的代码,我们就可以实现先显示“1”,隔5秒再显示“2”

echo str_repeat(' ' ,1000); //这里会把浏览器缓存装满echo '1';
ob_flush(); //把php缓存写入apahce缓存flush(); //把apahce缓存写入浏览器缓存
sleep(5);
echo '2';

讲到这里,我们不得不提一下“ob_start()”这个函数,这个函数的作用就是开启一个新的php缓存,但是这个缓存远远不止4096,php文档中描述的是这个缓存足够大。我们还是通过代码来说明

ob_start();echo str_repeat(' ' ,1000); //这里会把浏览器缓存装满echo '1';
ob_flush(); 
flush(); //把apahce缓存写入浏览器缓存
sleep(5);
echo '2';

在原有的基础上我们仅仅加了个ob_start(),结果又变成了等5秒后同时显示”12”了。这是因为每一个ob_start()都在原来的缓存空间上开辟一个子缓存空间,ob_flush()是把当前缓存空间输出到上级缓存空间,php只有一个缓存空间的时候,上级缓存空间就是apache的缓存,当php有多个缓存空间的时候,ob_flush()的就不能把php缓存写入apache缓存了。我们还是借助图片来理解:

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

0

主题

20

帖子

62

积分

注册会员

Rank: 2

积分
62
沙发
发表于 2022-9-29 11:05 | 只看该作者
编辑音乐软件
回复

使用道具 举报

一起源码让程序更轻更快

www.171739.xyz

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表