按下开机键

操作系统在C盘中,当你按下开机键的那一刻,主板通电,开始读取固件。固件就是固定在主板上的存储设备,里面有开机程序。开机程序会将文件里的操作系统加载到内存中运行。

操作系统被加载到内存后(以Linux为例)

  1. 加载操作系统内核
  2. 启动初始化进程,编号为1,每个进程都有编号。
  3. 启动系统服务:文件、安全、联网
  4. 等待用户登录:输入密码登录/ssh登录
  5. 登录后,运行shell,用户就可以和操作系统对话了。
  6. bash是一种shell,图形化界面也可认为是一种shell。

打开浏览器

你双击Chrome图标,就会运行chrome.exe文件。开启Chrome进程作为主进程,主进程会开启一些辅助进程,如网络服务、GPU加速,每新建一个网页,都可能会开启一个子进程。

浏览器的功能

  • 发起请求,下载HTML,解析HTML,下载CSS,解析CSS,渲染界面——解析完HTML和CSS后把他们合起来显示在屏幕上。
  • 下载JS,解析JS,执行JS等。
  • 浏览器的功能模块有用户界面、渲染引擎(渲染HTML和CSS)、JS引擎、存储等。
  • 上面功能模块一般处于不同的线程。JS是单线程的。
  • 如果JS引擎要修改HTML或CSS,它不能直接修改,要通过线程之间的通信来通知渲染引擎。这个过程叫跨线程通信。DOM操作慢就是因为它需要跨线程。

二.JS引擎

JS引擎举例

  • Chrome——V8引擎,C++编写。
  • 网景——SpiderMonkey,后被Firefox使用,C++编写。
  • Safari——JavaScriptCore
  • IE——Chakra(JScript9)
  • Edge——之前Chakra(JavaScript),现在也用V8
  • Node.js——V8引擎

主要功能

  1. 编译:把JS代码翻译为机器能执行的字节码或机器码。
  2. 优化:改写代码,使其更高效。
  3. 执行:执行上面的字节码或者机器码。
  4. 垃圾回收:把JS用完的内存回收,方便之后再次使用。

执行JS代码时的准备工作

  • 提供API:window/document/setTimeout
  • 上述的功能被称为运行环境runtime env,都不是JS自身具备的功能。
  • 一旦把JS放进页面,就开始执行JS。

内存图——JS引擎如何分配内存

瓜分内存.PNG 不知什么区作用

  • 存放你的变量,具体地说,它会存下环境。

红色区域作用

  • 红色区域专门用来存放数据,我们目前只研究该区域。
  • 红色区域并不存变量名,变量名在不知什么区。
  • 每种浏览器的分配规则并不一样。上图的区域也并不完成。没有调用栈和任务队列等区域。

Stack和Heap

  • 红色区域分为stack栈和heap堆
  • Stack区的每个数据顺序存放,存放非对象。
  • Heap区的每个数据随机存放,存放对象。

内存图可以帮助我们区分值和地址。