本帖最后由 seai 于 2011-08-07 19:51:44 编辑

解决方案 »

  1.   

    gz压缩输出一般用apache的模块来压
      

  2.   

    你的思路是另辟蹊径,但在这个问题上,显然毫无用处。我的目的:以间隔的方式立即输出所要的内容。且是gzip压缩格式的。当我启用apache压缩不能达到此目的时,才转而人工压缩的。
      

  3.   

    apache压缩的问题,同上面第2种情形。一旦启用,则不能间隔立即输出。一旦关闭又无压缩。这是一个矛盾,不论你信不信,它就是发生了,反正我是信了。
      

  4.   

    为什么要一段一段输出?如果header定义了gz,就不可能再输出非压缩数据
      

  5.   

    apache 里面,好像有直接压缩模块,不需要php设置的
      

  6.   

    等你理解这个需求的时候,你就是facebook那里面的大牛了(这是facebook的pipe技术原理)继续研究
      

  7.   

    你的需求可以理解,不过翻了半天internet,没找到实现办法,
    虽然没有在ref文档里找到原话, 但是网上的例子,在
    在transfer-coding:chunked和Content-Encoding: gzip共存的情况下,
    似乎都是先gzip整个页面再chunk的你要的先chunk再gzip一个个chunk的方式,也许http1.1里还不支持。
      

  8.   

    不清楚你说的“facebook的pipe技术”,有网址可以参考吗?
      

  9.   

    经测试,你的第三段代码依然是整体一并显示的
    只有去掉 ob_start('my_no_ob_gzhandler'); 才逐次显示即便是能逐次显示,也只在有限的环境中才能实现。比如在我的三台服务器中,只用一台上能逐次显示对于你能看到逐次显示,可能就是特例了
    至于 gzip 是不能逐次显示的原因,我想也是很简单的:既然打包了,当然要等解包完成才能构造输出结果
    毕竟 gzip 不是流协议,你的服务器也不是流服务器
      

  10.   

    继续寻apache、php源码高手一起分析原因,期待能解决问题。
      

  11.   

    你明白什么bigpipe么?如果不明白的话,仔细看下下面的内容使用Big pipe提升浏览速度
    讓 Facebook 速度飆升的秘密武器:Big Pipe 網頁流水線技術这不是web server和php的配合,而是javascript和php的配合,也就是串行变并发----------------------引用原文的一段话-------------------------------
    雖然大多數階段BigPipe只能操作一次Pagelet,但有時多個Pagelets的CSS和JavaScript下載卻可以同時運作,這類似於超標量微處理器。BigPipe另一個重要區別是,我們實現了從並行編程引入的"障礙"概念,所有的Pagelets要完成一個特定階段,如多個Pagelet顯示區,它們都可以進行進一步JavaScript下載和執行。
      

  12.   

    你理解的还很浅显,他的东西已经大部分实现。目前只遇到gzip与chunked同时应用的冲突。
      

  13.   

    给大家预报个喜:所有原理都得到验证。现在万事俱备,只欠东风。写一个自己所需的gzip实现函数。一切都搞定。有兴趣的可继续关注,我会在完成gzip实现后,来个总结交流什么的。