内存图与JS世界

153 阅读4分钟

电脑的进程科普

开机

  •  • 主板通电
  •  • 读取固件
  •  • 开机程序找操作系统
  •  • 将操作的系统加载到内存中

操作系统

  •  • 启动操作系统内核
  •  • 启动一个进程编号为1
  •  • 编号为1的进程再启动系统服务
  •  • 等待用户输入密码登录
  •  • 用户双击Chrome便会启动Chrome的进程

打开Chrome

  •  • 双击Chrome图标,运行Chrome.exe文件
  •  • 开启Chrome进程作为主进程
  •  • 主进程会开启一些辅助进程
  •  • 每开启一个网页就可能会开启一个子进程

浏览器的功能

  •  • 发起请求,下载HTML,解析HTML,下载CSS,解析CSS,渲染界面,下载JS,解析JS,执行JS等
  •  • 功能模块: 用户界面,渲染引擎,JS引擎,储存等,每个模块一个线程
  •  • 上面功能模块一般各处于不同的线程

举例 : 互联网创业公司分为各个行业可以称为进程,而每个公司里面的每个小组可以称为线程。 DOM操作慢是因为跨线程通信

图解

1.png

JS引擎

Js引擎举例

  •  • Chrome用的是V8引擎,c++编写
  •  • 网景用的SpiderMonkey,后来被Firefox使用,C++编写
  •  • Safari用的是JavaScriptCore
  •  • Node Js用的是V8引擎 平时默认的就是V8引擎

主要功能

1. 编译 : 把js代码翻译为机器能执行的字节码或机器码

2. 优化 : 改写代码,使其更高效

3. 执行 : 执行上面的字节码和机器码

执行js代码准备工作

  •  • 提供API : Window/Document/setTimeout

  •  • 上面这些东西不是JS自身具备的,是浏览器为我们提供的东西

  •  • 我们将这些功能称为运行环境runtime env

  •  • 一旦把js放进页面,就开始执行js

    关于一些问题:

  • Js代码在哪里运行?

:内存

  • Js代码加载到哪里的内存?

: 内存被所有系统的瓜分 首先是操作系统 其次有Chrome(Crown里面有辅助进程和各种页面) 每个页面又分三个线程(分别是 渲染线程,用户界面线程,js引擎线程) 主要是js引擎线程(一部分为代码区,一部分为环境区,一部分为数据区Stack和heap)

2.png

红色区域介绍

作用

  •  • 红色专门用来存放数据,我们目前只研究该区域
  •  • 红色区域并不存变量名
  •  • 每种浏览器的分配规则并不一样
  •  • 上图的区域并不完整

Stack和heap

  •  • 红色区域分为stack栈和Heap堆
  •  • Stack区特点 : 每数据顺序存放(后续补充效率很低)
  •  • Heap区特点 : 每个数据随机存放(便于后期补充)

3.png

Stack和heap举例

  •  • 代码

var a = 1

var b = a

var person = {name:'tang',child:{name:'Jack'}}

var person2 = person

4.png 当a=1时,b=a=1

当P name=tang 地址108 时,则p2=p= tang=108

P2 修改name='x'后,则P1 name='x'

  •  • 规律 数据分两种 : 非对象和对象 非对象都存在Stack 对象都存在Heap(数组和函数都是对象) = 号总是会把右边的东西复制到左边(不存在什么传值和传址)

4. 垃圾回收 : 把JS用完的内存回收,方便之后再次使用

浏览器为我们提供了运行环境Window

同时还要有以下这些: 1.png

因为方便,挂在window上的东西可以在任何地方直接用 2.png

Window在内存里面的实际存放方式如图 3.png

抽象一点的Windows里的面内存图 4.png 细节 5.png

JS的三座大山

1. this

2. 原型链

3. AJAX

关于原型链的问题

1.png

2.png

3.png

JS在创立时已经在内存里存了Object.prototgpe对应的对象和Arrag.prototgpe对应的对象,这两个放在内存里就是给你创建一个对象时来引用的,当我们创建一个对象就引用#409,创建一个数组就引用9527

#409存的是所有普通对象所共有的属性

在篡改时,一层可以,两层不行

4.png

每一个对象都有一个隐藏属性

我们只关心首字母小写对象的隐藏属性

隐藏属性叫

__proto__

区别: 5.png

总结图

6.png

注:资料内容来自饥人谷