客户端容器
说白了就是浏览器。用客户端容器这个壳子把API装在里面,让调用方可以使用。
浏览器架构
浏览器架构的演进从单进程架构到多进程架构,再到面向服务架构。
- 单进程架构
单进程架构,顾名思义就是把所有的东西都在一个进程里运行。这种架构
-
- 扩展性低,所有模块都在一个进程里,数据没有进行隔离,新的模块可能会对原来的造成影响
-
- 安全性低,都在一起,可以直接一锅端。三方插件可以直接访问操作系统里任意资源
-
- 稳定性低,三方插件漏洞或脚本问题可能就让浏览器崩溃
-
- 页面还卡。一堆页面都在一个进程,赶不上一口热饭吃。
单进程架构之后就是多进程了。
- 多进程架构
分出了主进程、网络进程、渲染进程、GPU进程、插件进程
-
- 扩展性中等,因为有的进程包含的功能较大,耦合度高
-
- 安全性高,做了独立沙箱在里面运行中,不能访问敏感资源
-
- 稳定性高,进程相互隔离,有的进程出事了不影响别的进程
-
- 页面流畅,活在独立的渲染进程,充分利用系统资源
多进程架构的扩展性还是不够好,所以又演进出了面向服务架构。面向服务架构和多进程架构相比,他的扩展性提高了,为了解决耦合度高的问题,把模块分的更细、更内聚,降低耦合度。
渲染进程
在上面架构的对比中,为了让页面流畅以及提高扩展性,分出了渲染进程。渲染进程的内部采用多线程实现,有以下五个线程。
- js引擎线程。解析js脚本,运行js程序。每个进程下只有一个这个。和渲染线程互斥,所以如果js执行时间过长,页面会卡。
- GUI渲染线程。渲染浏览器界面,解析html、css,构建dom树,render树,布局、绘制。
- 定时器线程。定时到了就把里面的东西放到事件队列等待执行。
- 网络线程。
- 事件线程。
chrome运行原理
以用户在url框输入内容后,浏览器的运行着眼。
- 输入处理:判断输入的东西是url还是要搜索的,是搜的就发给搜索引擎开搜,不是就请求站点资源。
- 开始导航:发现是url,通知网络线程发起网络请求获取站点内容。
- 读取响应:网络线程接收到响应了,检查响应头的媒体类型写他是啥。是html就给渲染进程干活,是其他的什么jpg,zip就给下载管理器干活。
- 寻找渲染进程:网络进程完事之后通知主进程,然后主进程就去给请求来的网站找个选渲染进程,用IPC消息告知渲染进程处理,渲染进程开始干活会告知主进程,于是这么一波url输入回车就完事了。剩下的是把网站内容展示出来。
跨端容器
为了开发成本、效率,一致性体验和前端开发生态,需要跨端容器。通过跨端容器让开发者能把原生的应用程序在多个平台上运行。