内存、JS

99 阅读3分钟

contents from jirengu.com fangyinghang Frontend class

  1. 一切都运行在内存里

开机

  • 开机,通电,读固件(存储开机程序),加载操作系统到内存
  1. 操作系统
  • 加载操作系统内核(所有最重要的功能:网络、文件管理、显示器)
  • 启动初始化进程,编号1,启动后面的进程
  • 启动系统服务:文件、安全、联网
  • 等待用户登陆界面,登陆后运行Shell,用户与操作系统交互
  1. 打开浏览器
  • 点击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. 存储

主进程·子进程-线程示意图 00.png

小结:JS在浏览器上80%都在做这两件事情:操作页面上的DOM和发送网络请求使用AJAX,实现的路径为用jQuery操作DOM,用axios操作AJAX。