当前位置:首页 > 技术教程 > 正文内容

为什么 PHP 中的 echo 很慢以及如何让它变得非常快

卡卷网1年前 (2024-09-09)技术教程398

您可能已经注意到,回显大量内容的 PHP 脚本似乎运行性能不佳......

为什么 PHP 中的 echo 很慢以及如何让它变得非常快  第1张


嗯,这里的关键词是 “appear”。一个常见的误解是 “echo 是最慢的 PHP 命令”!:p

问题实际上只是带宽问题!当您尝试通过 Internet 推送大量内容时,在某些时候您会体验到“加载时间”......在某些时候,PHP 实际上会经历 “发送时间”!

您可以测量脚本开始和结束之间的执行时间,在连接速度较慢的情况下,它可能会显示执行时间为 500 毫秒。您甚至可以将其缩小到需要 480 毫秒才能执行的单个 echo 语句。但这个时间实际上包括 PHP 无法将更多数据发送回 apache 的等待时间!

有一个常见的技巧,包括在回声之前开始 output befering,如下所示:

ob_start();
echo $a_lot_of_content;


这将允许 PHP 继续前进并看起来快速终止。但事实是,所有内容现在都在 PHP 的输出缓冲区中,尽管您的脚本已完成,但 PHP 仍在后台工作,将所有数据发送到您的 Web 服务器(例如 apache)。

要验证使用此技巧的处理时间是否没有变化,您可以在 apache 中记录实际请求处理时间。

现在,如果你想让 PHP 真正终止,你需要给 Apache 一个更大的缓冲区,以便从 PHP 吸收内容。我相信默认的 Apache 缓冲区是 4096 或 8192 字节(有人知道如何验证这一点吗?

如果您的 PHP 脚本尝试输出 24 KB 的数据,但 apache 只能缓冲 8 KB,那么是的,PHP 将等待。但是,如果您将 Apache 的 cahce 设为 32 KB,那么 PHP 会将其所有数据发送到 Apache 并轻松退出!

以下是在 apache2.conf 中更改 Apache 缓冲区大小的方法:

<IfModule mpm_prefork_module>
StartServers          5
MinSpareServers       5 
MaxSpareServers      15 
MaxClients           40 
MaxRequestsPerChild  20 
SendBufferSize    32768 
</IfModule>

SendBufferSize 行中唯一重要的行。其他行是出于上下文目的,因此您可以在 apache2.conf 中找到正确的位置来添加 SendBufferSize 行(如果它尚不存在)。目前我对其他方面没有特别的建议。

重新启动 apache 后,再次查看您的日志和执行时间。在上面的示例中,您将看到它们从 500 毫秒下降到 30 毫秒。当然,只要你在 PHP 中发送的数据不超过 Apache 缓冲区可以吸收的数据。

现在,当然,这*不会*增加页面从 PHP 到浏览器的端到端传输时间。但是,它将允许 PHP 更快地退出,这可能会也可能不会释放服务器上的资源......可能取决于配置。

我很确定如果您使用 CGI,它确实可以释放资源。但如果你用mod_php,我不知道......任何人?

然后,我猜,下一步将是更快地将数据从 Apache 中推出......但我不确定在 Apache 和管理传输速度的实际 Nagle 算法之间是否有另一个缓冲区可以增强。


扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/jiaocheng/2024/09/197.html

分享给朋友:

相关文章

如何检查 Linux 的安装时间?

如何检查 Linux 的安装时间?

如果您像我一样需要维护多个服务器,那么在某些时候,您会想知道自上次擦除以来,Debian(或其他风格的 Linux)安装到底有多老了......那么如何检查安装日期呢?我发现最简单的方法是简单地检查 lost+found 文件夹的日期。此文...

DedeCMS织梦网站模板源码图文安装教程:新手必备指南

DedeCMS织梦网站模板源码图文安装教程:新手必备指南

dedecms织梦网站模板源码图文安装教程。在网上下载一些网友分享的dedecms织梦带数据模板源码,有的没有安装说明,对于不太熟悉dedecms程序的新手无从下手。以下是dedecms织梦内容管理系统的安装方法教程说明:服务器空间须支持p...

帝国网站管理系统帝国cms主要特性

一、超强系统模型扩展功能EmpireCMS卓越之处在于:不仅提供了网站管理功能,而且还提供了系统扩展框架,您可以直接在后台通过新建表、自定义字段,然后组成新的系统模型,以实现各种适合用户自己的系统。如下载系统、音乐系统、商城系统、产品库、分...

帝国网站管理系统(EmpireCMS)帝国cms标签TAGS管理教程

帝国网站管理系统(EmpireCMS)帝国cms标签TAGS管理教程

一、TAGS功能介绍帝国CMS的tags功能不仅是作为tags信息列表使用,而且是将tags作为自定义分类来使用,可按TAGS调用信息,可以实现碎片同样的功能,只是tags随时都能分类,更加灵活。比如:某一专题的信息,现在可以不用专题了,直...

帝国网站管理系统(EmpireCMS)帝国cms会员宣传系统教程

会员宣传插件会员宣传插件:会员通过推荐点击链接获得点数。推荐赠送点数语法说明:》链接地址为:“http://网站地址/e/tool/gfen/?id=会员帐号ID”或“http://网站地址/e/tool/gfen/?n=会员用户名”》信息...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。