BigPipe是一个重新设计的基础动态网页服务体系。大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理 他们在不同阶段的运行。这是类似于大多数现代微处理器的流水线执行过程:多重指令管线通过不同的处理器执行单元,以达到性能的最佳。虽然BigPipe是 对现有的服务网络基础过程的重新设计,但它却不需要改变现有的网络浏览器或服务器,它完全使用PHP和JavaScript来实现。
BigPipe如何工作
要利用该Web服务器和浏览器之间的并行性,BigPipe首先分解网页成多个可调用的Pagelets。正如流水线微处理器划分一个指令的生命周期为(如“取指令”,“指令解码”,“执行”,“写回寄存器”等)多个阶段,BigPipe的页面生成过程分为以下几个阶段:
请求解析:Web服务器解析和完整性检查的HTTP请求。
数据获取:Web服务器从存储层获取数据。
标记生成:Web服务器生成的响应的HTML标记。
网络传输:响应从Web服务器传送到浏览器。
CSS的下载:浏览器下载网页的CSS的要求。
DOM树结构和CSS样式:浏览器构造的DOM文档树,然后应用它的CSS规则。
JavaScript中下载:浏览器下载网页中JavaScript引用的资源。
JavaScript执行:浏览器的网页执行JavaScript代码。
BigPipe(FaceBook使用的页面加载技术) 理论部分:用户输入域名发送请求到服务端,服务端组合出需要的业务数据返回给客户端,这一过程是现在网页请求最基本传统的方式了。 好处:只做了一次http请求,节省了http连接资源 坏处:如果一次请求数据量过大,会比较慢,并且如果整个业务逻辑部分有一处出问题,很可能导致请求错误返回,整个页面拿不到数据甚至瘫痪。 之后局部刷新技术ajax出现了:
点击打开链接http://www.infoq.com/cn/news/2010/08/bigpipe-facebook-optimize 点击打开链接http://www.cnblogs.com/BearsTaR/archive/2010/06/18/facebook_html_chunk.html 点击打开链接http://huoding.com/2011/06/26/88
所谓BigPipe,指的是Facebook开发的用来改善客户端响应速度的技术。本质上讲,其实它并不是新事物,原理上等同于Yahoo在Best Practices for Speeding Up Your Web Site里提出的Flush the Buffer Early,不过BigPipe的实现更灵活,所以有必要了解一二。 我们平常浏览网页时的体验通常是串行的:浏览器发起请求,服务器收到后渲染页
参考文档: 英文版: http://www.cubrid.org/blog/dev-platform/faster-web-page-loading-with-facebook-bigpipe/ 搜索技术博客-淘宝 http://www.searchtb.com/2011/04/an-introduction-to-bigpipe.html bigpipe:先有占位,通过js请求将数据扔到占位符处
代码如下:在使用队列方面没有仔细斟酌,随便找一个过来,就用了。 注意一点,就是不要把 PrintWriter 的实例对象拿到多线程里去用,否则会出莫名其妙的异常。 import java.io.IOException; import java.io.PrintWriter; import java.util.concurrent.ArrayBlockingQueue; import java.ut
前一章中,我们解释了如何建立一个 Django 项目并启动 Django 开发服务器。当然,那个网站实际并没有干什么有用的事情,它所做的只是显示 It worked! 消息。让我们来做些改变。本章将介绍如何使用 Django 创建动态网页。 第一份视图:动态内容 我们的第一个目标是创建一个显示当前日期和时间的网页。这是一个不错的 动态 网页范例,因为该页面的内容不是静态的。相反,其内容是随着计算(
Config配置类 StaticCache静态缓存类 Route路由类 Controller控制器类 View视图类 Request请求类 Response响应类 Event事件类 Listener监听类 Subscriber多事件监听 EventDispatcher事件调度
StaticCache 静态变量形式的缓存(是存放于当前进程的内存中)。注册中心的服务地址也存放于静态缓存中。 StaticCache::set($key, $value, $canUnset = true) use StaticCache; StaticCache::set('foo', 'bar'); //默认该变量可以被释放,也可设置不释放。使用情况:在使用Async
主要内容:静态网页,动态网页本节我们了解一下静态网页和动态网页的相关概念。如果您熟悉前端语言的话,那么您可以快速地了解本节知识。 当我们在编写一个爬虫程序前,首先要明确待爬取的页面是静态的,还是动态的,只有确定了页面类型,才方便后续对网页进行分析和程序编写。对于不同的网页类型,编写爬虫程序时所使用的方法也不尽相同。 静态网页 静态网页是标准的 HTML 文件,通过 GET 请求方法可以直接获取,文件的扩展名是 、 等,网面中
Groovy 不仅仅被用来定义一个任务可以做什么. 举个例子, 你可以使用它来动态的创建任务. 例子 6.8. 动态的创建一个任务 build.gradle 4.times { counter -> task "task$counter" << { println "I'm task number $counter" } } 这里动态的创建了 task0, task
Listener 原型 <?php namespace Group\Listeners; abstract class Listener { abstract function setMethod(); public function getMethod() { return $this->setMethod(); } } 实现一个监听类 <?php
Event事件 自定义事件 事件对象Event,自定义Event {#事件对象event与如何定义一个event,例如:} <?php namespace Group\Events; class Event { protected $property; public function __construct($property = null) { $th
Response 参照symfony2的Response服务 常规 {#常规} public function testAction(Request $request, $id) { yield new \Response('这是文本'); } json格式 {#json格式} public function testAction(Request $