摘自:《高性能网站建设进阶指南》
1、通过块编码,HTML文档可以被分成多个数据块返回,每个响应的数据块都以标识其大小的指示符为开头。这就允许浏览器在下载数据包后立马立马进行解析,使得页面的加载速度更快;(因为大多数浏览器都是在HTML文档加载完毕才开始渲染页面,并同时下载页面上的资源;在采用块编码时,PHP采用flush函数立即刷新缓冲区,这样浏览器在只加载完少量HTML文档后,就开始进行渲染和资源下载,所以提高了页面的展现速度);
2、如果不采用块编码,响应必须包含一个Content-Length的头信息。这就意味着服务器在将整个响应组合在一起,并计算出大小之前,是不会开始发送响应信息。通过块编码,服务器可以尽早发送响应,因为它只需要知道每个发送块的大小即可;
3、某些情况下,我们无法知道在创建HTML文档之前知道是否需要一个头,或者它的具体内容应该是什么。通常,这些头必须在响应的最开始发送,这就意味着服务器在这些耗时操作的数据库查询或web服务调用结束前,是无法发送响应的。然而,当使用块编码后,这些头就可以被延迟发送。最开始的块会被立即发生,在这个块中会通过Trailer头来列举出那些将会被延迟发送的头。
例如:
Trailer: Cookie
Trailer: ETag
4、Bigpipe中主要利用块编码来让浏览器与服务器进行并行处理,让浏览器在接收数据的同时可以同时并行的去渲染页面;
V4版微博中便是采用了Chunked编码与Bigpipe技术的结合,有效的加快了页面的TTI时间;