【Chromium中文文档】多进程资源加载
多进程资源加载(需要更新)
全书地址
Chromium中文文档 for https://www.chromium.org/developers/design-documents
持续更新ing,欢迎star
gitbook地址:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//
github地址: https://github.com/ahangchen/Chromium_doc_zh
背景知识
所有网络交流都是在主浏览器进程处理的。这样浏览器进程不仅可以控制每个渲染器的网络访问,还可以在进程间维持session状态一致性,像cookie和缓存数据。另一个重要的原因是,作为一个HTTP/1.1的用户代理,浏览器整体上在每个host上不能打开太多连接。
概述
我们的多进程应用程序可以从三个层面来看。在最底层是WebKit库,用来渲染页面。在它上面是渲染器进程(简单地,每个标签页对应一个进程),每个进程包含一个WebKit实例。管理所有渲染器的是浏览器进程,控制所有的网络访问。

Blink(刷新器)
Blink有一个ResourceLoader对象,负责获取数据。每个加载器有一个WebURLLoader以展现真实的请求。这个实例的头文件在Blink仓库中。
ResourceLoader实现了WebURLLoaderClient接口。这是渲染器使用的回调接口,用以获取数据和其他刷新用的事件。
测试shell使用一个不同的资源加载器,提供了不同的实现,即,一个非IPC版本的ResourceLoaderBridge,位于webkit/tools/test_shell/simple_resource_loader_bridge。
渲染器
渲染器对WebURLLoader的实现,成为WebURLLoaderImplementation,位于content/child。它使用全局的ResourceDispatcher单例对象(每个渲染器内部单例),来创建一个唯一的request ID,通过IPC转发这个request给浏览器。浏览器的响应会引用这个request ID,将其转换后,通过资源分发起返回给RequestPeer对象(WebURLRequestImpl)。
浏览器
浏览器中的RenderProcessHost对象从每个渲染器接收IPC请求。使用指向渲染进程host的指针(尤其是,ResourceDispatcherHost::Receiver),转发这些请求给全局的ResourceDispatcherHost,并且用渲染器生成的request ID唯一标识这些请求。
然后,每个请求会被转换成一个URLRequest对象,反过来将其转发给它内部的URLRequestJob(它实现了需要的特殊协议).当URLRequest生成通知时,它的ResourceDispatcherHost::Receiver和request ID会被用于将通知发送给正确的RenderProcessHost,以将其发回给渲染器。因为渲染器生成的ID被保留,将所有的响应与一个特定的一开始由WebKit生成的请求关联起来成为可能。
Cookies
所有的cookies由我们的CookieMonster对象处理,位于/net/base中。我们不会与WinInet共享cookie。这个浏览进程中的CookieMonster处理所有的网络请求,因为所有标签页之间的cookie必须相同。
页面可以通过document.cookie为一个document请求cookie。这种情况下,我们从渲染器向李兰器发送一个同步消息来请求cookie。当浏览器在处理cookie时,WebKit的工作线程会挂起。当渲染器的I/O线程接受到浏览器的响应时,它会解除这个线程挂起,然后把结果传回给JavaScript引擎。
【Chromium中文文档】多进程资源加载的更多相关文章
- Chrome设计文档-多进程资源加载
		
原文:Multi-process Resource Loading 背景 浏览器主进程及browser process处理所有的网络通信.原因有三点: Browser process可以控制每一个re ...
 - 理解WebKit和Chromium: Chromium的多进程资源加载机制
		
转载请注明原文地址:http://blog.csdn.net/milado_nju ##概述 前面介绍了WebKit中的资源加载机制,其实它只是一个框架性的东西,实际的资源加载依赖于各个WebKit移 ...
 - 【Chromium中文文档】线程
		
线程 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Threading. ...
 - 【Chromium中文文档】跨进程通信 (IPC)
		
跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/I ...
 - 【Chromium中文文档】OS X 沙箱设计
		
OS X 沙箱设计 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/OSX ...
 - 【Chromium中文文档】沙箱FAQ
		
沙箱FAQ 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox ...
 - 【Chromium中文文档】Chrome/Chromium沙箱 - 安全架构设计
		
沙箱 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox.ht ...
 - 【Chromium中文文档】安全浏览 -- Chrome中的警告都是怎么来的?
		
安全浏览 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/SafeBrow ...
 - 【Chromium中文文档】进程模型
		
进程模型 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Process_ ...
 
随机推荐
- J2EE监听器和过滤器基础
			
Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文. 监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会 ...
 - C# 过滤特殊字符
			
. /// <summary> /// 过滤不安全的字符串 /// </summary> /// <param name="Str"></ ...
 - UIALertView与UIAlertViewDelegate的基本用法
			
首先,视图控制器必须得实现协议UIAlertViewDelegate中的方法,并指定delegate为self,才能使弹出的Alert窗口响应点击事件. 具体代码如下: ViewController. ...
 - php中__autoload()方法详解
			
[导读] PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个类文件,或者你把这100个类定义 ...
 - [Python]从豆瓣电影批量获取看过这部电影的用户列表
			
前言 由于之后要做一个实验,需要用到大量豆瓣用户的电影数据,因此想到了从豆瓣电影的“看过这部电影 的豆瓣成员”页面上来获取较为活跃的豆瓣电影用户. 链接分析 这是看过"模仿游戏"的 ...
 - debian install & configure(2)-drivers-ati
			
依赖apt-get install build-essential cdbs fakeroot dh-make debhelper debconf libstdc++6 dkms libqtgui4 ...
 - Zabbix监控Linux主机设置
			
说明: Zabbix监控服务端已经配置完成,现在要使用Zabbix对Linux主机进行监控. 具体操作: 以下操作在被监控的Linux主机进行,这里以CentOS 6.x系统为例. 一.配 ...
 - node.js介绍
			
官网说明: Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable ...
 - java web基础环境搭建
			
java web基础环境包括:(1)servlet容器也即tomcat(2)jre即java程序运行环境 环境变量配置:分别下载jdk和tomcat安装包. jdk环境变量配置: 第一步:系统环境变量 ...
 - CSS滤镜让图片模糊(毛玻璃效果)实例页面
			
<pre name="code" class="css">CSS代码: .blur { filter: url(blur.svg#blur); /* ...