用php语言从服务器返回数据超过80k后速度就非常非常慢!测试后发现好像是输出缓存问题,请问怎么解决! 55
刚刚尝试在echo语句前加上ob_start();后加上echoob_get_length();ob_end_flush();后发现速度就非常快。但是把echoob_ge...
刚刚尝试在echo语句前加上ob_start();后加上echo ob_get_length();ob_end_flush();后发现速度就非常快。但是把echo ob_get_length();去掉后速度又很慢,晕,到底怎么回事呢?
这个问题在网上查了很久,只有一些简单的描述,没有详细地解析。是这个问题根本就不是问题,还是这个问题本来就是一个公认的没有办法解决的问题呢? 展开
这个问题在网上查了很久,只有一些简单的描述,没有详细地解析。是这个问题根本就不是问题,还是这个问题本来就是一个公认的没有办法解决的问题呢? 展开
3个回答
展开全部
对于php的输出,貌似apache采取的策略是小段输出直接传输,大段输出就切割成chunked分段。在chunked分段没有传输完成之前,apache和php一直保持连接状态。也就是说,如果php的输出字符串比较小,那么apache会把这些数据暂存,等到php执行完了之后再发给浏览器。而当php输出大段字符的时候,apache就不会缓存输出,直接把输出丢给浏览器,而且在此过程中会暂时停止php的执行!
所以使用缓存是解决此类问题的根本办法。ob_start()就是启用php的缓冲区。php还可以通过安装xcache等缓存模块实现。apache中开启gzip压缩也可以。
所以使用缓存是解决此类问题的根本办法。ob_start()就是启用php的缓冲区。php还可以通过安装xcache等缓存模块实现。apache中开启gzip压缩也可以。
更多追问追答
追问
我的程序结构:
A数据表
A总计
B数据表
B总计
A、B合计
然后通过ajax从数据库先取出A数据添进A块,然后A总计;再取出B数据添进B块,然后B总计;最后A、B合计。这样修改后虽然每次从数据库取出来的数据很小,但是速度仍然很慢!经过简单分析 发现速度快慢跟A或B数据表的行数有关系。
我设计的是逐行添加数据的,添加第一行的数据非常快,第二行的数据慢一倍,第三行的数据比添加第二行的数据又慢一倍。。。 怎么回事呢?
追答
不是很明白你的意思。
可能是代码的写法有问题。
展开全部
你看ob的缓存大小是不是小于80k,echo ob_get_length(); 和你输出的数据没什么必然的联系,不输出的话应该更快的,是不是你设置的问题啊,80k就非常非常慢,上线后能运作吗?
追问
我的电脑是苹果系统的,怎么改ob的缓存呢?
追答
ob缓冲区,楼下答得很好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道哦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询