客户端容器
web浏览器以及夸端方案。
用客户端容器这个壳子把API装在里面,让调用方可以使用。
浏览器架构
单进程架构:所有模块运行在同一个进程里,包含网络、插件、JavaScript运行环境等。
多进程架构:主进程、网络进程、渲染进程、GPU进程、插件进程。
面向服务架构:算是多进程架构的升级版。将原来的UI、数据库、文件、设备、网络等,作为一个独立的基础网络服务。、
为什么会有单进程架构?
早期受到硬件限制,为了节约资源。
面向服务架构是否会替代多进程架构?
有可能会被替代。
渲染进程
主要包含以下线程:
主线程(Main thread)
光栅线程(Raster thread)
合成线程(Compositor thread)
工作线程(Worker thread)
多进程架构的扩展性还是不够好,所以又演进出了面向服务架构。面向服务架构和多进程架构相比,他的扩展性提高了,为了解决耦合度高的问题,把模块分的更细、更内聚,降低耦合度。
渲染进程
在上面架构的对比中,为了让页面流畅以及提高扩展性,分出了渲染进程。渲染进程的内部采用多线程实现,有以下五个线程。
js引擎线程。解析js脚本,运行js程序。每个进程下只有一个这个。和渲染线程互斥,所以如果js执行时间过长,页面会卡。
GUI渲染线程。渲染浏览器界面,解析html、css,构建dom树,render树,布局、绘制。
定时器线程。定时到了就把里面的东西放到事件队列等待执行。
网络线程。
事件线程。
3.Chrome运行原理
1.输入处理
用户URL框输入内容后,UI线程会判断输入的是一个URL地址呢?还是一个query查询条件;如果是URL,直接请求站点资源;如果是query,将输入发送给搜索引擎。
2.开始导航
当用户按下回车,UI线程通知网络线程发起一个网络请求,来获取站点内容;请求过程中,TAB处于loading状态。
3.读取响应
网络线程接受到HTTP响应后,先检查响应头的媒体类型(MIME Type);如果响应主体是一个HTML文件,浏览器将内容交给渲染进程处理;如果拿到的是其他类型文件,比如Zip、exe等,则交给下载管理器处理。
4.渲染进程寻找
网络线程做完所有检查后,会告知主进程数据已准备完毕,主进程确认后为这个站点寻找一个渲染进程;主进程通过IPC消息告知渲染进程去处理本次导航;渲染进程开始接收数据并告知主进程自己已开始处理,导航结束,进入文档加载阶段。