客户端容器 | 青训营笔记

57 阅读3分钟

前言

本文主要着重介绍浏览器的架构以及运行原理,讲解在Chrome浏览器里,网页是如何加载并且渲染成我们所见的画面。还能了解到在浏览器里JS引擎和渲染引擎如何协同工作,如何从多个角度优化前端的性能体验。再以webview容器为扩展,带你认识一些常见的跨端方案。适合想深入了解原理和扩展知识面。本文分为四大模块:

  • 浏览器架构
  • 渲染进程
  • Chrome运行原理
  • 跨端容器

浏览器架构

浏览器架构的演进

1.单进程架构:所有模块运行在同一个进程里,包含网络、插件、JavaScript运行环境等 2.多进程架构:主进程、网络进程、渲染进程、GPU进程、插件进程分开各自做自己的事。相互隔离而不互相影响。 3.面向服务架构:将原来的Ul、数据库、文件、设备、网络等,作为一个独立的基础服务。是多进程架构升级版。

image.png 目前我们大多数浏览器都是多线程架构

说明 为什么我们会有单线程架构呢?早期计算机内存昂贵,多进程占用电脑资源多。

任务管理器

多进程分工

image.png

渲染进程

浏览器内核

image.png

多线程架构

渲染器内部是多线程实现,主要负责页面渲染,脚本执行,事件处理,网络请求等。以下是渲染时涉及到的主要线程:

image.png

对比

JS引擎vs渲染引擎

image.png 总的来说,JS引擎是负责解析执行JS代码的,而渲染引擎是对HTML和CSS进行解析的。 JS引擎具体工作过程为:js源码通过 JS解析器转换成AST抽象语法树,然后AST经过翻译又转化为字节码来给操作系统解析执行,或者再通过JIT转换成机器码(V8优化,JIT将高频函数转成机器码,下次遇到时即可直接执行,而不会经过字节码转换)最后给操作系统直接执行。 渲染引擎会通过xml解析器和css解析器将HTML和CSS分别转换成DOM树和CSSOM树,然后再合成为render树。最后通过显存显示出来。 JS引擎和渲染引擎是相互独立的,要想通过JS来操作DOM树或CSSOM树,需要通过中间Brige这种形式来实现。

多线程工作流程

  1. 网络线程负责加载网页资源
  2. JS引擎解析S脚本并且执行
  3. JS解析引擎空闲时,渲染线程立即工作
  4. 用户交互、定时器操作等产生回调函数放入任务队列中
  5. 事件线程进行事件循环,将队列里的任务取出交给JS引擎执行

image.png

Chrome运行原理

如何展示页面

image.png

阶段分析

输入处理

优化

跨端容器