BigPipe

BigPipe为什么可以节省时间?

旧城冷巷雨未停 提交于 2019-12-10 15:24:53
关于什么是BigPipe,请移步 http://baike.baidu.com/view/4601904.htm 去查阅一下。 在实现BigPipe的过程中,就对BigPipe到底能省多少时间比较奇怪。 普通的web页面,一般来说是页面生成,网络传输,前面页面渲染,这三部分的时间加起来就是操作人员从点击鼠标到最后看到页面的时间。 比如,一个页面有主页面框架,有4个部分的内容显示,为了便于分析,简化一下模型,假设主页面框架生成需要0.2S,4个部分的内容内容生成各自需要0.2S,网络传输与浏览器渲染也各计成0.2秒,这样,在传统的方式下,需要的时间就是 0.2*5+0.2*5+0.2*5=3秒。 那么换成BigPipe方式,时间的执行分布大概是: 所以换成BigPipe方式,时间大概就是1.4秒的样子。节省的时间大概是50%强一点的样子。 当然,这个时间是在各自三段时间都是0.2秒的情况,实际运行过程中,网络传输的时间在局域网中的时间会更快,后台页面的处理,也可以采用多线程处理的方式来进行,这样,后面页面处理时间可以缩短到0.4S,网络传输时间有0.2S也可以了。由于采用了BigPipe方式,在0.6S的时候,就可以看到最页面框架,后面的时间就是一块块出来,当后面出来的时间比较快的时候,给使用的感受就是在0.6S+界面就可以出来。这个与最初的3S,用户体验上明显是有天壤之别的。 来源

BigPipe(FaceBook使用的页面加载技术) JAVA实现代码示例

微笑、不失礼 提交于 2019-12-10 15:10:57
代码如下:在使用队列方面没有仔细斟酌,随便找一个过来,就用了。 注意一点,就是不要把 PrintWriter 的实例对象拿到多线程里去用,否则会出莫名其妙的异常。 import java.io.IOException; import java.io.PrintWriter; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class BigPipeServlet extends HttpServlet { private static ExecutorService executor = Executors.newFixedThreadPool(50); public void service(HttpServletRequest request, HttpServletResponse