[b]问题:[/b]
(1)建立一个永不崩溃或挂起的渲染引擎几乎是不可能的。
(2)建立一个完全安全的渲染引擎也几乎是不可能的。
在某些方面,现在的浏览器类似过去的单用户、多任务的老式操作系统。再这样的系统中,一个有问题的应用会引起整个操作系统崩溃,在现在的某些浏览器中一个有问题的页面也会引起整个浏览器的崩溃,不管是在某一个页面或者一个插件中的bug。
现在的操作系统已经非常稳健,因为它把应用分别放在不同的进程中。一个应用崩溃不会引起其它应用或操作系统崩溃。一个进程也不允许访问其它进程的数据。
[b]浏览器的架构[/b]
chromium浏览器将每一个浏览器tab的渲染引擎放在不同的进程中,以便保护整个浏览器受到其中某一个tab中ug或故障的影响。chromium浏览器也显示每一个渲染引擎访问其它引擎或操作系统的能力。在某些方面,这种机制使整个浏览器更适合于现在操作系统的内存保护和访问控制。
主进程负责运行UI、管理tab和插件进程,被称作“浏览器进程”或者“浏览器”。
tab进程被称为“渲染进程”或“渲染器”。渲染器使用Webkit开源布局引擎解释和布局HTML。
渲染进程管理
每个渲染进程拥有一个全局的RenderProcess对象负责管理与父进程的通讯和保存全局状态。浏览器进程对每个渲染进程有一个对应的RenderProcessHost对象,负责管理浏览器状态和与渲染器通讯。浏览器与渲染器之间采用Chromium's IPC system通讯。
视图管理
每个渲染器进程拥有一个或多个RenderView对象,由RenderProcess负责管理。每一个视图对应一个一个tab的内容。在浏览器中,每个渲染器对应的RenderProcessHost都有相应的RenderViewHost对应一个渲染器中的视图。每个视图拥有一个视图ID用来区别同一个渲染器中的多个视图。这些ID在同一个渲染器中是惟一的,但是在浏览器中不是唯一。所以要标识一个视图渲染一个RenderProcessHost和一个视图ID。浏览器与tab内容之间的通讯通过RenderViewHost对象,它指导如何发送一个消息通过RenderProcessHost到RenderProcess,直至RenderView.
组件和接口
在渲染器进程中:
- RenderProcess和浏览器中对应的RenderProcessHost维持IPC。每个渲染器进程只能有一个RenderProcess对象。这样才能保证浏览器和一个渲染器进程能正常通讯。
- RenderView对象能与浏览器进程中对应的RenderViewHost通讯(通过RenderProcess),而WebKit只负责布局。RenderView对象描述了tab中的一个页面或一个弹出窗口内容。
在浏览器进程中:
- Browser对象代表顶层窗口。
- RenderProcessHost对象在浏览器中代表一个渲染器,并负责与渲染器的IPC通讯。在浏览器中每个渲染器有一个对应的RenderProcessHost对象。
共享渲染器进程
通常每一个窗口或tab都会打开一个新的进程。浏览器将建立一个新的进程并通知它建立一个单独的RenderView.
有时候在tab或窗口中共享一个渲染进程是有必要的或可取的。一个web应用打开一个新的窗口并同步通讯,例如使用JavaScript语言的window.open打开一个窗口。在这里,当我们创建一个新的窗口或tab时,我们需要复用打开窗口的那个进程。如果打开的进程数量太多,或者一个进程已经处理了同一个域的窗口或tab,我们也需要一些策略将一些新的tab赋给已经打开的进程。这些策略在Process Models里详细描述。
检测崩溃的或错误行为的渲染器
浏览器进程中每一个IPC连接会检测那些渲染器进程句柄。如果这些句柄被发出信号,渲染过程就崩溃了,并通知了标签的崩溃。现在,我们显示一个“sad tab"屏幕去通知用户渲染器已经崩溃。页面可以通过按重载键或打开新的导航去重新加载。当这一切发生的时候,我们要注意没有一个新的进程被创建。
渲染器中的沙箱
既然WebKit运行在一个独立的进程中,我们可以限制它去访问系统资源。例如,我们可以确认渲染器只能通过父进程(浏览器进程)访问网络。同样的,我们可以利用主机操作系统那个内建的权限机制限制它访问文件系统。
附加的,既然能限制渲染器访问文件系统和玩过,同样我们也能限制访问用户显示和相关的对象。我们在一个单独的窗口“桌面”上运行每个渲染程序,这对用户是不可见的。这样可以防止渲染器打开一个新的窗口或截获键盘敲击而带来的危害。
释放内存
渲染器运行在独立的进程中,这就使隐藏低优先级的tab变成很简单。在Windows中最小化的进程会自动把他们的内存放入一个池中“availabel memory"。在一个少内存的环境中,Windows将把这部分内存交换到硬盘上直到变成高优先级内存再给交换出来。这样就会使用户可见的程序响应更快。我们可以
把这个策略应用到隐藏tab中。当一个渲染器进程不在是顶层tab时,我们可以通过提示系统将这部分内存交换到硬盘上来释放这个进程所占的物理内存。因为我们发现减少woking set的大小能降低tab交换的性能,当用户切换两个tab时候,会逐渐释放内存。这意味着,如果用户切换回一个最近使用的标签,该标签的内存更会被页面化相对于最近很少用到的tab。有足够的内存用户运行所有的程序将不会注意到这个过程:Windows只在有需要的时候回收内存,如果有足够的内存就不会有性能损失。
这有助于我们获得低内存情况下更优化的内存占用。与很少使用的背景选项卡相关联的内存可以得到完全换出,而前台tab“的数据可以完全加载到内存中。与此相反,一个单一的进程浏览器将具有所有tab数据随机分布在其存储器,并且它不可能将使用和未使用的数据完全分开出来,浪费内存和性能。
相关推荐
chromium multi-process architecure
4. **多进程架构**:Chromium 采用多进程架构,每个标签页、插件、扩展等都运行在独立的进程中,以实现更好的安全性和稳定性。这种架构也被称为“沙箱”模型。 5. **网络堆栈**:Chromium 自带了一套完整的网络堆栈...
3. **chromium-codecs-ffmpeg-extra_56.0.2924.76-0ubuntu0.16.10.1335_armhf.deb**:这是一个包含额外视频和音频编解码器的包,确保Chromium浏览器能够播放更多的多媒体内容。FFmpeg是一个强大的多媒体框架,它的...
在C#中实现这样的多进程架构,首先需要理解.NET Framework或.NET Core提供的进程管理API,如System.Diagnostics命名空间下的Process类。开发者需要创建并管理多个进程,每个进程可能包含一个渲染引擎、JavaScript...
要获取Chrome,请从以下位置获取最近的位置:[position-100,position + 100]在Ubuntu上安装的命令这是在Ubuntu上安装Chromium的参考命令CHROMIUM_VERSION=77.0.3865.120wget --no-check-certificate ...
Chromium浏览器官方版是一个由Google主导开发的网页浏览器,Chromium浏览器官方版是Google为发展Google Chrome而开启的计划,所以Chromium浏览器相当于Chrome的工程版或称实验版,新功能会率先在Chromium上实现,待...
在安装"Proxy-SwitchyOmega-Chromium-2.5.15.zip"这个压缩包时,你需要确保你正在使用的浏览器是Chromium或兼容的浏览器。首先,下载并解压文件,然后在浏览器的扩展程序管理页面启用开发者模式,加载已解压的扩展...
CHROMIUM_FLAGS="--ppapi-flash-path=/usr/lib/chromium-browser/plugins/libpepflashplayer.so --ppapi-flash-version=12.0.0.77 -password-store=detect -user-data-dir" ``` 删除树莓派自带浏览器 -------------...
总结,ChromiumOS_4.4_Kernel-master 提供了研究 ChromiumOS 内核的宝贵资料,涵盖从基础的系统架构到高级的定制优化。通过深入学习这个源代码,开发者和研究人员可以增强对操作系统底层工作原理的理解,为改进或...
Chromium浏览器官方版是一个由Google主导开发的网页浏览器,Chromium浏览器官方版是Google为发展Google Chrome而开启的计划,所以Chromium浏览器相当于Chrome的工程版或称实验版,新功能会率先在Chromium上实现,待...
chromium-main_2.7z.001(分卷压缩包1-请搜索001-002解压) -2022.11.06最新更新
绿色浏览器Chromium-71.0.3573.0谷歌开源浏览器,部分win7可能会出现白板。
chromium-main_2.7z.002(分卷压缩包2-请搜索001-002解压) -2022.11.06最新更新
Chromium Embedded Framework (CEF)2062源码下载地址。
该文件属于Chromium 58版本的编译配置文档,其中,包含每一项参数的说明。 请注意,该文档是通过gn args --list out/debug生成的,如果你已下载Chromium源码,可以手动生成,不必下载。
ungoogled-chromium是Google Chromium,不依赖于Google Web服务。 ungoogled-chromium尽可能保留默认的Chromium体验。与其他具有Web浏览器愿景的其他Chromium分支不同,ungoogled-chromium本质上是Chromium的直接...
SwitchyOmega是一款强大的浏览器代理管理插件,专为Chromium内核的浏览器设计,如Google Chrome、Microsoft Edge等。这款插件的主要功能是帮助用户轻松管理和切换不同的网络代理设置,适用于需要频繁更改代理配置的...
Chromium浏览器官方版是一个由Google主导开发的网页浏览器,Chromium浏览器官方版是Google为发展Google Chrome而开启的计划,所以Chromium浏览器相当于Chrome的工程版或称实验版,新功能会率先在Chromium上实现,待...
Chromium浏览器官方版是一个由Google主导开发的网页浏览器,Chromium浏览器官方版是Google为发展Google Chrome而开启的计划,所以Chromium浏览器相当于Chrome的工程版或称实验版,新功能会率先在Chromium上实现,待...
ungoogled-chromium通过以下方式解决了这些问题: 在构建和运行浏览器时,删除对任何Web服务的所有剩余后台请求 删除所有特定于Google Web服务的代码 从源代码中删除对预制二进制文件的所有使用,并在可能的情况下...