
php中的数据输出:echo语句->user缓冲区->sapi缓冲区->服务器缓冲区->TCP缓冲区->浏览器
ob_flush():刷新用户输出缓冲flush():刷新sapi缓冲。因此想要立即输出内容时,应该先调用ob_flush(),再调用flush() ,因此flush()和ob_flush()刷新的缓冲区层次不同。ob_gzhandler():可以在ob_start()中指定为回调函数,根据浏览器支持的内容编码返回相应的编码数据,不能和output_handler和zlib.output_compression同时使用。
注意点:1. 默认配置下,PHP会创建一个顶层缓冲区。每当调用一次ob_start()会创建一个新缓冲区,新建的缓冲区层次在上一个缓冲区之上,此后输出的内容都会先放到最上面的缓冲区,当此缓冲区满了或单次输出量超过缓冲区大小时,就刷新一次缓冲区,把此缓冲区内容推向上一个缓冲区,ob_end_flush()会将当前缓冲区的内容放到上个缓冲区中并关闭该缓冲区,ob_end_clean()擦除当前缓冲区并关闭该缓冲区。
php输出相关配置output_buffering 默认4096字节,设置为0表示不使用缓冲区。implicit_flush 默认关闭,开启时,每有一次输出就会调用一次flush(),有损性能,推荐关闭。output_handler 默认为空
这几个配置不能在运行时设置,因为在运行脚本解释前,输出缓冲区已经建立了,你只能通过编辑php.ini文件或者是在执行PHP程序的时候使用-d选项才能改变它们的值。
zlib.output_compression 开启压缩页面。若请求头中带有Accept-Encoding: gzip或deflate时,响应中会添加Content-Encoding:gzip 或deflate和Vary:Accept-Encoding,可以有效减少传输量。另外,output_handler必须设置为空。开启前:

开启后:

可见,传输量已经减少了,传输量大时,可以减少部分传输时间。
另外也可以在服务器层面开启gzip压缩例如nginx配置: gzip on;gzip_types text/plain text/css application/javascript;gzip_min_length 1k;文本文件压缩率比较可观,图片压缩率比较低,不推荐开启。
另外还可以通过nginx配置fastcgi_cache将动态页面的输出缓存起来参考学习:https://www.cnblogs.com/raobenjun/p/8086051.html 文章来源: 学习笔记拾遗(二)PHP输出缓冲一些注意点
人吐槽 | 人点赞 |
发表评论