zoukankan      html  css  js  c++  java
  • PHP提升echo, printf, print, file_put_contents等输出方法的效率

    让ECHO变快, 让PHP的请求处理过程, 尽快结束, 之所以ECHO慢, 是在等待”写数据”成功返回, 那么一个比较简单的办法, 就是打开输出缓存,

    编辑php.ini

    output_buffering = 4096 //bytes

    也可以在脚本中, 显示的调用ob_start():

    ob_start();
    echo $huge_string;
    //其他的逻辑.
    ob_end_flush();

    要注意的地方, ob_start将会开辟一块4096大小的buffer, 所以, 如果huge_string大于4096, 将不会起到加速的作用.

    现在, 我们的ECHO就会”立即”执行成功, 返回. 因为数据暂时写到了我们的输出缓存当中. 如果buffer足够大, 那么内容会等到脚本的最后, 才一次性发送给客户端(严格来说, 是发送给WebServer). 但这样并不能解决我们今天遇到的这个问题, 因为这些数据到最后, 还是需要PHP去把它们发送给客户端(此时不考虑WebServer的Output buffer), 这个过程不结束, 请求不会关闭, PHP也不会执行DB的析构函数.

    我们的PHP要输出100K的数据, 那么, 我们Apache的的输出缓存就必须大于100K, 否则当Apache的输出缓存满了以后, 就会真正的发送给客户端, 而这个过程中, 当时执行的ECHO就会阻塞等待.

    那么, 如何修改Apache的输出缓存呢? 我们可以在apache的配置文件中, 使用SendBufferSize配置指令

    SendBufferSize 4096 //注意是byte

    具体的SendBufferSize的说明, 参看http://httpd.apache.org/docs/2.0/en/mod/mpm_common.html#sendbuffersize

    注: 其他的Webserver with php-cgi的模式, 请翻阅相关Webserver的手册, 寻找类似配置.

    现在, PHP的ECHO, 将直接把内容交给Apache, PHP在执行完成后, 不再等待内容发送给客户端完成, 而直接退出. 而内容会在PHP处理完成以后, 由Apache发送给客户端. 从而加速了ECHO的执行效率.

    printf, print, file_put_contents(“php://output”)…等等, 和ECHO都是一样的.

    最后要说明, 这样做, 只是把原来ECHO的等待时间, 转移给了Apache, 并没有真正的减少客户端获取到内容的时间. 它只是加速了PHP的处理过程, 提前了PHP的退出时机, 从而能减少PHP对资源的占用时间, 间接增加资源的占用率.

    转自 http://www.laruence.com/2011/02/13/1870.html

  • 相关阅读:
    [转]java 常用弹出框
    [转]ImageIcon icon 相对路径设置
    [转]『基本ASCII表和c语言运算表查询』
    [转]sqlmap技术手册
    [转]linux下怎么查看ssh的用户登录日志
    [转]Kali-linux安装之后的简单设置
    查看任意程序所连接的ip地址
    JS 闭包
    JS 中的 继承
    JS 原型的 理解
  • 原文地址:https://www.cnblogs.com/milton/p/4375570.html
Copyright © 2011-2022 走看看