- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在用 PHP 编写一个应用程序,我决定自己做一些测试以确定 PHP 处理缓冲区和缓冲的能力。具体来说,我想看看手动调用 ob_start()
和 ob_flush()
是否会对我的程序产生巨大影响。
我想出了 10KB 的 lorem ipsum 并开始工作。我在 PHP 中在 for 循环的开始和结束处放置了一个计时器,该循环写入 10KB 的 lipsum(在 display:none div block 中)100 次,总共 1MB 的数据,我认为这足以让随机 CPU 工作负载不会过多地丢弃我的数据。
除了 PHP 计时器,我还打开了 Chrome 的开发者工具 (F12) 并记录了“时间”和“延迟”字段。如果我的术语正确的话,“时间”是页面响应和呈现所花费的总时间,而“延迟”只是页面首次从服务器接收数据的时间。
所以这就是谜团:当我只写 10KB 的 lipsum 100x 时,我的平均值是:
PHP Time: 0.00630ms
Chrome Time: 565.6ms
Chrome Latency: 28.3ms
当我在最开始调用 ob_start()
并在最后调用 ob_flush()
时:
PHP Time: 0.00792ms
Chrome Time: 540ms
Chrome Latency: 33ms
然而,这就是谜团 - 当我在每个 10KB 文本 block 的开头和结尾调用 ob_start()
和 ob_flush()
时,我的Chrome 报告的延迟峰值增加了 4 倍。
PHP Time: 0.005814ms
Chrome Time: 624.7ms
Chrome Latency: 134.9ms ???
据我所知,chrome 延迟应该减少 100 倍,因为我正在通过 PHP 输出刷新缓冲区 1/100。我知道 ob_start()
和 ob_flush()
在较高的缓冲区上运行,它们实际上刷新到较低的缓冲区,我希望较低的缓冲区在相同的间隔,这意味着我会看到大致相同的延迟。
我的测试设备是一台非常普通的 Intel ATOM 上网本,带有 Nvidia ION 显卡、Windows 7 家庭高级版(32 位)和运行 Apache 2.2.22 的 WAMP 服务器,几乎都是默认设置。我使用的是 Chrome 24.0.1312.52 m。 CPU 负载适中,但在测试期间不是 100%,而且我的内存远未满。
测试代码: http://pastebin.com/zf62Y4yz
谢谢!
最佳答案
ob_flush
将内容发送到客户端。通过让 PHP 使用单个 ob_flush
确定何时执行或同时执行所有操作,它可以有效地批处理发送内部 http 消息。当您在任意点手动分解它时,在这种情况下,您每 10K 就会分解并强制执行至少一个手动包传输。这种传输到客户端的延迟可能比实际的 php 缓冲区刷新要长。
关于php - 为什么调用 ob_flush() 会大大降低我的延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465113/
我有一个需要几分钟才能完成处理的 PHP 脚本。当页面仍在加载时,我想在可用时显示部分 PHP 输出,这可以使用 ob_start() 和 ob_flush() 来完成。 在整个脚本执行完毕后,我想从
当我在本地主机(通过 MAMP)上调用 PHP 的 ob_flush() 函数时,出现以下错误: Notice: ob_flush() [ref.outcontrol]: failed to flus
在我的网站(使用 drupal 运行)中,ob_flush 函数需要很长时间(在 10 - 100 秒之间)才能执行。我如何找出原因?是什么导致了这么长时间? 最佳答案 试试这个: ob_start(
我正在使用 iframe 方法编写文件上传脚本。在后端,文件上传后,脚本还做了一些事情。因此,一旦文件上传,我就会将输出刷新到浏览器(进入 iframe),然后脚本继续。从 Chrome 控制台我可以
我正在用 PHP 编写一个应用程序,我决定自己做一些测试以确定 PHP 处理缓冲区和缓冲的能力。具体来说,我想看看手动调用 ob_start() 和 ob_flush() 是否会对我的程序产生巨大影响
我已经尝试了几次尝试让我的 flush 和 ob_flush 工作。我试过设置 ini 以允许缓冲,我试过使用我在网上找到的几个不同的函数来进行输出缓冲,但没有一个起作用。该脚本想要等到它完全完成,直
有关php的ob_flush()与flush()使用方法 注意:ob_flush()和flush()这两个函数一般要一起使用,顺序是先ob_flush(),然后flush(),它们的作用是刷新缓冲
flush()、ob_flush()、ob_end_flush()三者的区别: 首先,说下buffer,它是一个内存地址空间,为4096(1kb)【在php.ini配置文件中找到output_bu
我遇到了 PHP ob_flush(); 的问题 似乎它只在 IE10 中不起作用。 gzip 和缓存在服务器上被禁用,它在除 IE10 之外的任何地方都有效。 如果有人知道如何解开这个谜团,我将不胜
我有以下 PHP 脚本: "; ob_flush(); flush(); sleep(1); } ob_end_flush(); ?> 它在 WAMP 本地主机上工作正常并且每
我对 PHP 函数 ob_flush() 和 ob_end_flush() 感到困惑。关于函数 ob_flush manual说 The buffer contents are discarded a
如果我从 XAMPP 上的本地服务器在 chrome 中加载此脚本: header("Content-Type:text/plain"); set_time_limit(0); $max = 40;
我刚看完this post The loading time of webpages is improved by enabling gzip compression on server. Bette
ob_clean() 和 ob_flush() 有什么区别? 此外,ob_end_clean() 和 ob_end_flush() 之间有什么区别?我知道 ob_get_clean() 和 ob_ge
ob_flush() 和 flush() 有什么区别,为什么必须同时调用? ob_flush() reference说: This function will send the contents of
我的意思是...让我们只发出一个 AJAX 请求并将结果插入到 div#result 中.. 在后端,脚本使用ob_flush() 发送 header 但不会终止请求,直到它终止(使用exit 或ob
嗨请查看以下代码: \n"; for( $i = 0 ; $i \n"; ob_flush(); flush(); sleep(1); } echo "End ...\n";
我正在使用 ob_start()/ob_flush(),希望在长时间的导入操作中给我一些进展。 这是我正在做的事情的简单概述: "; $conn = ftp_connect($ftp_site) or
搜索了很多,但找不到太多关于这个的信息.. 我有一个通过循环处理很多事情的页面,我把它放在 php 页面的顶部: ob_implicit_flush(true); ob_end_flush(); 这很
像下面这样在 php 中进行错误处理是否可以接受?我对ob_start()/ob_clean()/ob_flush()不是很熟悉,所以我想知道使用它们有什么不好的影响吗?例如,它们会影响性能吗?
我是一名优秀的程序员,十分优秀!