Bigpipe :bigpipe的了解之2

这周是工作的空窗期,对前段时间看的bigpipe又重新翻阅了一遍,发现不知道是不是因为时间的推迟,自己理解的上次深入多了,记一下。

1.bigpipe适合较为大的页面,页面的各个模块之间相对比较独立。

2.bigpipe模式里,服务器端是分段输出的。一个请求,多次输出,边处理边输出

  这个是我之前疑惑的地方之一。按传统的加载方式,请求一个url,服务器返回给客户端也就是浏览器,一个html文档,随机,请求结束。但是在bigpipe模式里,请求一个url,先是 返还给浏览器一个框架的html文档。然后再对每一个pagelet进行组装。组装完成就输出给页面。然后再组装再输出。这些都是一个请求完成的。

3.bigpipe针对每一个pagelet,组装输出的是js。

额 我只能说,这个我最初想多了。我原先的想法,既然一个接口能边处理边返回信息。那么作为浏览器 怎么知道这个时候输出信息了呢,又不像Ajax,还有个状态码的提示。事实是,组装好了一个pagelet后,就以js的方式直接输出页面。而再这之前,再加载框架html后,服务器以极高加载了一个用于处理这些bigpipe js的js文档。

bigpipe模式的缺点:

由于bigpipe模式是js加载页面,内容都为动态添加,因此对少量的不支持js的浏览器就会造成障碍,对搜索引擎也有较高难度的辨识。我在网上看到的解决方案是:在服务器端首先要根据user-agent 判断客户端是否是搜索引擎的爬虫,如果是的话,则转化为原有的模式,而不是动态添加。这样就解决了对搜索引擎的不友好。这种方法应该不是很好吧。

了解了几本的原理,下一阶段的任务:前端的bigpipe的js的编写(感觉这个应该不是很麻烦),php端处理模式的了解。

原文地址:https://www.cnblogs.com/lxin/p/2726443.html