contents from jirengu.com fangyinghang Frontend class
- 一切都运行在内存里
开机
- 开机,通电,读固件(存储开机程序),加载操作系统到内存
- 操作系统
- 加载操作系统内核(所有最重要的功能:网络、文件管理、显示器)
- 启动初始化进程,编号1,启动后面的进程
- 启动系统服务:文件、安全、联网
- 等待用户登陆界面,登陆后运行Shell,用户与操作系统交互
- 打开浏览器
- 点击Chrome图标,运行Chrome.exe文件
- 开启Chrome进程,作为主进程
- 主进程开启辅助进程,如网络进程,GPU进程(负责浏览器界面渲染)
- 新建一个网页,开启一个子进程
进程Process 是操作系统进行资源分配和调度的基本单元,可以申请和拥有计算机资源,进程是程序的基本执行实体;
线程thread 是操作系统能够进行运算调度的最小单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
4. 浏览器功能
- 发起请求,下载HTML,解析HTML,下载CSS,解析CSS,
- 渲染界面:把HTML和CSS合起来,显示在页面上
HTML提供节点,CSS提供节点样式
- 下载JS(代码放在内存里),解析JS,执行JS
解析是理解它的意思,执行是让其产生效果
5. 浏览器主要功能模块
以下功能模块分别处于不同的线程,线程往下不再划分
1. 用户界面模块
用于展示除标签页窗口之外的其他用户界面内容
2. 浏览器引擎
用于在用户界面与渲染引擎之间传递数据,包含数据持久层,帮助浏览器存储数据(cookie)
3. 渲染引擎(渲染代码)
渲染引擎负责渲染用户请求的页面内容
渲染引擎包含小的功能模块:网络模块(负责网络请求)、JS解析器(用于解析和执行JS) 4. JS引擎(JS代码)
主要功能:编译、优化、执行、垃圾回收
打开知乎页面子进程,会开启渲染线程和JS线程
JS子线程,不能单独渲染,需要提供跨线程通信(Chrome提供此功能)通知渲染引擎,所以说DOM操作慢,因为需要跨线程
Chrome和Node.js用的是V8引擎,由C++编写(速度快,性能王者)
执行JS代码之前的准备工作:浏览器提供运行环境(API、window挂以下东西:console/document/对象/数组/函数)
JS代码放在内存的什么位置呢? 答案是内存图,里面存放着操作系统OS、主进程、辅助进程、子进程
子进程里面含有用户界面线程、渲染线程、JS引擎线程
JS引擎线程里面含有代码区、环境变量区、stack栈区(存数据,按顺序存放)、Heap堆区(存数据,随机存放)、调用栈、任务队列
4. 存储
主进程·子进程-线程示意图
小结:JS在浏览器上80%都在做这两件事情:操作页面上的DOM和发送网络请求使用AJAX,实现的路径为用jQuery操作DOM,用axios操作AJAX。