客户端容器 |青训营笔记

63 阅读5分钟

浏览器架构变迁:

浏览器从最初的单进程架构演进到了多进程架构。单进程架构只有一个进程,负责浏览器中所有的任务,包括渲染页面、处理用户交互、承担网络请求等。多进程架构则把不同的任务分配到不同的进程中,包括浏览器进程、GPU进程、网络进程和渲染进程等。 浏览器各架构对比:

单进程架构:浏览器进程负责所有的任务,缺点是一旦进程死掉,整个浏览器就会崩溃。 多线程架构:由浏览器进程、渲染进程和插件进程组成。每个进程都是单独线程的。例如,渲染进程中有GUI线程、JavaScript引擎线程和页面渲染线程等。 多进程架构:由浏览器进程、网络进程、GPU进程和多个独立的渲染进程组成。每个渲染进程互不干扰,可以独立处理页面渲染和JavaScript执行等任务。

多进程架构介绍:

多进程架构是把不同的任务分配到不同的进程中,在架构上更加稳定和安全。浏览器会为每个标签页或窗口创建一个渲染进程,每个渲染进程负责渲染对应的页面,并应对用户的所有操作。此外,还有网络进程、GPU进程和浏览器进程等进程。

渲染进程:

渲染进程是浏览器中最复杂的进程之一,它处理与页面渲染、交互和JavaScript执行相关的任务。渲染进程通常是多线程的,可以同时处理页面渲染、JavaScript执行和用户输入等任务。 渲染进程多线程架构: 渲染进程通常由多个线程组成,包括:

GUI线程:负责渲染浏览器界面。 JavaScript引擎线程:负责JavaScript脚本的执行。 页面渲染线程:负责页面解析和布局等任务。 后台线程:处理一些不需要阻塞渲染过程的任务,例如图片解码等。

JS引擎VS渲染引擎:

JavaScript引擎和渲染引擎是渲染进程中的重要组成部分。JavaScript引擎负责JavaScript脚本的解释和执行,常见的JavaScript引擎有V8引擎。渲染引擎则负责解析HTML和CSS,并将网页内容渲染到浏览器窗口中,常见的渲染引擎有WebKit和Gecko等。 多线程工作流程: 在多线程架构中,不同的线程之间需要通信和协作,以完成不同的任务。通常的工作流程如下:

GUI线程接收用户输入,交给渲染引擎处理。 渲染引擎通过JavaScript引擎执行响应事件的JavaScript脚本。 JavaScript引擎线程执行脚本时,会更新页面渲染线程的数据。 页面渲染线程接收到更新数据,完成页面的渲染工作。 渲染好的页面呈现在GUI线程上。

chrome运行原理:

Chrome浏览器采用多进程架构,主要由以下几个进程组成:

浏览器进程:管理浏览器窗口,负责底层操作。 渲染进程:负责页面渲染任务。 GPU进程:负责GPU相关的任务,例如3D渲染等。 网络进程:处理所有网络请求任务。 插件进程:运行所有的插件。

主进程工作流程:

监听浏览器窗口的事件,例如打开新标签页、关闭窗口等。 管理浏览器进程、渲染进程、网络进程和GPU进程等进程。 提供一系列的API接口,例如窗口管理接口、书签管理接口等。 负责整个浏览器的插件管理工作。

渲染进程工作流程:

根据用户的输入渲染页面,例如点击链接、滚动页面等。 响应JavaScript脚本的执行。 接收其他进程发送的消息。 进行页面渲染工作,例如解析HTML和CSS等。 处理页面的布局和呈现。 处理其他负责渲染的线程发送的消息。

浏览器性能优化:

浏览器性能优化的主要目标是提高页面加载速度和交互响应速度。具体的优化策略包括:

减少HTTP请求次数,例如合并CSS和JavaScript文件、使用雪碧图等。 压缩和缓存静态资源,例如使用gzip压缩、使用浏览器缓存等。 使用CDN加速,将资源放在离用户更近的服务器上。 尽量避免重排和重绘,例如避免频繁操作DOM、使用CSS3动画代替JavaScript动画等。 使用异步加载,例如将JavaScript放在页面底部、使用defer和async等。

跨端容器:

跨端容器是指一种用来兼容多种端的工具,例如Web、桌面、移动端等。常见的跨端容器包括Electron、React Native和Flutter等。 跨端的由来: 随着智能设备的不断升级,出现了越来越多的用户端,例如Web、桌面、移动端等。不同的端具有不同的需求和限制,例如屏幕大小、硬件性能等,因此需要使用跨端的方案来适配不同的终端设备。 常见的跨端方案:

Electron:基于Chromium和Node.js实现,用于桌面应用开发。 React Native:由Facebook开发的开源框架,用于移动端应用开发。 Flutter:由Google开发的开源框架,用于移动端和Web应用开发。 Weex:由阿里巴巴开发的开源框架,用于移动端应用开发。