用户
 找回密码
 入住 CI 中国社区
搜索
楼主: 方达
收起左侧

[Web] 关于CodeIgniter实现BigPipe的一些讨论

  [复制链接]
发表于 2012-7-6 16:06:51 | 显示全部楼层
楼主的学习精神值得我们学习啊!
发表于 2012-7-12 09:48:38 | 显示全部楼层
Bigpipe不是依赖客户端js来实现分块加载的么?

这个不能算bigpipe 这个只能叫flushOutput
而且flush有几个东西楼主貌似没注意到
1. 就算你flush了输出,浏览器还有一层缓冲,也就是说在没有收到这么多数据前依然不展现给客户端,ff是8k,ie是2k....就是说比如这段代码将无法有逐步显示的效果
PHP复制代码
<?php
ob_start();
ob_end_clean();
 
for ($i=0; $i<10; $i++) {
    echo $i;
    sleep(1);
    ob_flush();
    flush();
}
 
复制代码


需要增加缓冲头
PHP复制代码
<?php
ob_start();
ob_end_clean();
echo str_pad('', 4096);
 
for ($i=0; $i<10; $i++) {
    echo $i;
    sleep(1);
    ob_flush();
    flush();
}
 
复制代码

可以参见下
http://q.cnblogs.com/q/30267/
http://code.google.com/p/chromium/issues/detail?id=31410
 楼主| 发表于 2012-7-12 16:13:16 | 显示全部楼层
princehaku 发表于 2012-7-12 09:48
Bigpipe不是依赖客户端js来实现分块加载的么?

这个不能算bigpipe 这个只能叫flushOutput

对,你提方案,在原帖的最后的第二个方案里有提到

另外,bigpipe是依赖后续json的,提出这个问题主要是当初连flush都成问题了,不能chunked输出,没有了实现bigpipe的基础。
发表于 2012-7-17 19:07:46 | 显示全部楼层
{:soso_e179:} 长见识了
发表于 2012-7-18 23:53:53 | 显示全部楼层
我遇到个类似的问题,当A页面sleep 10s时,请求B页面,这时候B页面阻塞在controller的构造函数调用之前,等A页面返回后,B页面才一起返回。我没有用flush,为什么会这样呢?
发表于 2012-7-19 10:13:17 | 显示全部楼层
ysb 发表于 2012-7-18 23:53
我遇到个类似的问题,当A页面sleep 10s时,请求B页面,这时候B页面阻塞在controller的构造函数调用之前,等 ...

大部分浏览器有一个限制,同域名并发限制
所以很多cdn都有前缀
比如a1.taobaocdn.net  a2.taobaocdn.net
不知道你的和这个有关系部
发表于 2012-7-19 10:31:22 | 显示全部楼层
princehaku 发表于 2012-7-19 10:13
大部分浏览器有一个限制,同域名并发限制
所以很多cdn都有前缀
比如a1.taobaocdn.net  a2.taobaocdn.net

不是这个原因,请求数只有两个,而且请求是发出去了。
初步定为到问题是 session锁的原因。
发表于 2012-7-19 11:53:18 | 显示全部楼层
ysb 发表于 2012-7-19 10:31
不是这个原因,请求数只有两个,而且请求是发出去了。
初步定为到问题是 session锁的原因。 ...

噢噢..

本版积分规则