从php到浏览器的缓存机制,不得不看!

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

但是我们执行下面的代码的时候,并不是显示“1”之后5秒再显示“2”,而是等待5秒后直接显示“12”

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

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

通常情况下,我们的web应用由以下几个要素构成:

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

看了上面的图,我们终于知道上面为什么会同时显示“12”了,因为echo ‘1‘还没有装满php的缓存,所以“1”还在php的缓存里面,没有到浏览器,等到程序结束后“12”才一起到浏览器。

当然我们也可以手动刷新缓存

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缓存了。我们还是借助图片来理解:

时间: 2024-10-16 11:07:31

从php到浏览器的缓存机制,不得不看!的相关文章

简单了解到的浏览器的缓存机制

前段时间优化项目,设计到需要缓存静态文件的问题,静下心来了解了下浏览器的缓存机制. 首先,不知道大家注意到没有,HTTP请求的一下参数  此处,为第一次请求 response Headers  里面注意几个参数 Expries:是HTTP 1.0的东西,现在默认浏览器均默认使用HTTP 1.1,所以它的作用基本忽略. Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定).Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和

彻底理解浏览器的缓存机制(http缓存机制)

一.概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: 同步sau交流学习社区(首发):https://www.mwcxs.top/page/565.html 1.HTTP请求(Request)报文,报文格式为:请求行 – HTTP头(通用信息头,请求头,实体头) – 请求报文主体(只有POST才有报文主体),如下图 HTTP响应(Response)报文,报文

浅谈浏览器的缓存机制

浏览器的缓存可分为HTTP缓存和离线缓存,下面将分别介绍 HTTP缓存 只有GET请求能被缓存,POST不能被缓存.Modified Time/ETag/Expires/Cache都是HTTP协议的缓存策略 先来一个例子 当我们第二次访问百度首页,在Chrome的Network面板中打开一个静态文件时会发现响应的status是:200 OK (from disk cache),不是应该返回304 Not Modified吗?如果你知道答案,那就可以忽略本文了. Cache-Control 简介

从php到浏览器的缓存机制

所有的php程序员都知道在php脚本里面执行 echo "1";访客的浏览器里面就会显示"1". 但是我们执行下面的代码的时候,并不是显示"1"之后5秒再显示"2",而是等待5秒后直接显示"12" 这就涉及到几个缓存机制,为了更高的薪水,同学们非常有必要把这个缓存机制学习好. 通常情况下,我们的web应用由以下几个要素构成: php->apache->浏览器.这篇文章我们就以这个架构为例来讲解数

9大浏览器端缓存机制分析

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

九种浏览器端缓存机制知多少(转)

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

【Web缓存机制系列】2 – Web浏览器的缓存机制-(新鲜度 校验值)

Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0和1.1),有的则是由缓存的管理员设置(如DBA.浏览器的用户.代理服务器管理员或者应用开发者). 浏览器端的缓存规则 对于浏览器端的缓存来讲,这些规则是在HTTP协议头和HTML页面的Meta标签中定义的.他们分别从新鲜度和校验值两个维度来规定浏览器是否可以直接使用缓存中的副本,还是需要去源服务器

深度解析浏览器的缓存机制

一.前言 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷. 对于一个数据请求来说,可以分为发起网络请求.后端处理.浏览器响应三个步骤.浏览器缓存可以帮助我们在第一和第三步骤中优化性能.比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据. 接下来的内容中我们将通过缓存位置.缓存策略以及实际场景应用缓存策略来探

浏览器刷新缓存机制

缓存可以形象得理解为副本. 静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面. 动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了.(动态缓存和静态缓存相比更有优势) 一:地址栏按回车又分为两种情况. 1.请求的URI在浏览器缓存中未过期,此时,使用Firefox的firebug插件在浏览器里显