首页
导航
博客
电子书
算法
众创
代码
随贴
关于我们
您好,欢迎来到码863代码分享网! 请
[登录]
/
[注册]
搜 索
标题:
*
140
字
TAG标签:
(用空格隔开)
30
字
恢复历史版本:
请选择分类
html
python
javascript
php
sql
c
c++
c#
java
plain
所有人可见
仅自己可见
编辑器:UEditor
编辑器:TinyMCE
编辑器:Editor.md
HTML转MD
HTML转MD2
<p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"><a href="http://www.cnblogs.com/godok/p/6341300.html" _src="http://www.cnblogs.com/godok/p/6341300.html">http://www.cnblogs.com/godok/p/6341300.html</a> </p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"><br/></p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">所有的php程序员都知道在php脚本里面执行 echo “1”;访客的浏览器里面就会显示“1”。</p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">但是我们执行下面的代码的时候,并不是显示“1”之后5秒再显示“2”,而是等待5秒后直接显示“12”</p><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: " courier="">echo '1';sleep(5);echo '2';</pre><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"><br style="margin: 0px; padding: 0px;"/>这就涉及到几个缓存机制,为了更高的薪水,同学们非常有必要把这个缓存机制学习好。</p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">通常情况下,我们的web应用由以下几个要素构成:</p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">php->apache->浏览器。这篇文章我们就以这个架构为例来讲解数据是如何在整个“链条”上流通的。</p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"><img src="/ueditor/php/upload/image/20170913/1505290768874090.png" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px; width: 690px;"/></p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"> </p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"> </p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">看了上面的图,我们终于知道上面为什么会同时显示“12”了,因为echo '1'还没有装满php的缓存,所以“1”还在php的缓存里面,没有到浏览器,等到程序结束后“12”才一起到浏览器。</p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">当然我们也可以手动刷新缓存</p><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: " courier="">echo '1';ob_flush(); //把php缓存写入apahce缓存flush(); //把apahce缓存写入浏览器缓存sleep(5);echo '2';</pre><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">我们把代码改成如上之后,浏览器还是要等5秒才同时显示“12”,这是因为“1”虽然已经发送给浏览器,但是浏览器缓存还没有装满,并没有渲染,一直到等到程序结束后才渲染出“12”。</p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">我们以谷歌浏览器为例(缓存1000bytes),通过下面的代码,我们就可以实现先显示“1”,隔5秒再显示“2”</p><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: " courier="">echo str_repeat(' ' ,1000); //这里会把浏览器缓存装满echo '1';ob_flush(); //把php缓存写入apahce缓存flush(); //把apahce缓存写入浏览器缓存sleep(5);echo '2';</pre><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"> 讲到这里,我们不得不提一下“ob_start()”这个函数,这个函数的作用就是开启一个新的php缓存,但是这个缓存远远不止4096,php文档中描述的是这个缓存足够大。我们还是通过代码来说明</p><p><span class="cnblogs_code_copy" style="margin: 0px; padding: 0px 5px 0px 0px; line-height: 1.5 !important;"><a title="复制代码" style="margin: 0px; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; text-decoration-line: underline; line-height: normal; border: none !important;"><img src="/ueditor/php/upload/image/20170913/1505290769223160.gif" alt="复制代码" style="margin: 0px; padding: 0px; max-width: 900px; border: none !important;"/></a></span></p><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: " courier=""> (' ' ,1000); '1'; (); (5 '2';</pre><p><span class="cnblogs_code_copy" style="margin: 0px; padding: 0px 5px 0px 0px; line-height: 1.5 !important;"><a title="复制代码" style="margin: 0px; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; text-decoration-line: underline; line-height: normal; border: none !important;"><img src="/ueditor/php/upload/image/20170913/1505290769223160.gif" alt="复制代码" style="margin: 0px; padding: 0px; max-width: 900px; border: none !important;"/></a></span></p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;">在原有的基础上我们仅仅加了个ob_start(),结果又变成了等5秒后同时显示"12"了。这是因为每一个ob_start()都在原来的缓存空间上开辟一个子缓存空间,<span style="margin: 0px; padding: 0px; color: rgb(0, 128, 128);">ob_flush()</span>是把当前缓存空间输出到上级缓存空间,php只有一个缓存空间的时候,上级缓存空间就是apache的缓存,当php有多个缓存空间的时候,<span style="margin: 0px; padding: 0px; color: rgb(0, 128, 128);">ob_flush()</span>的就不能把php缓存写入apache缓存了。我们还是借助图片来理解:</p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"><img src="/ueditor/php/upload/image/20170913/1505290770311788.png" alt="" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px; width: 690px;"/></p><p style="margin: 10px auto; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; white-space: normal;"> </p><p><br/></p>
CopyRight 2002~2023 精通2100网 联系邮箱:qqtxt@163.com
版权所有:精通2100网
湘ICP备2023018646号-1
MYSQl共执行 4 个查询,用时 0.0018649101257324 秒,PHP脚本用时 0.004021 秒,占用内存 0.535 MB,Gzip 已启用