一.进程与线程
打开浏览器
- .chrome.exe
- 双击chrome图标,运行chrome.exe文件
- 开启chrome进程,作为主进程
- 主进程会开启一些辅助进程,如网络服务,GPU加速
- 每新建一个网页,就有可能会开启一个子进程
浏览器的功能(面试)
- 发起请求,下载HTML,解析HTML,下载CSS,解析CSS,渲染界面,下载JS,解析JS,执行JS等
- 功能模块:用户界面,渲染界面,JS引擎,存储等
- 上面功能模块一般处于不同的线程
二.JS引擎
1.JS引擎举例
Chrome用的是V8引擎,C++编写
2.主要功能
- 编译:把JS代码翻译为机器能执行党的字节码或者机器码
- 优化:改写代码,使其更高效
- 执行:执行上面的字节码或者机器码
- 垃圾回收:把JS用完的内存回收,方便之后再次使用
三.内存图
内存会被瓜分为,操作系统占用的系统内存,chrome浏览器以及辅助进程瓜分,每个tab是一个打开的页面,
而每个tab会分为:渲染线程,用户界面,Js引擎占用的内存,此外,每个tab还有代码区,以及一些系统方面的未知的内存,还有stack和heap
堆区和栈区,和stack和heap:
stack顺序存放
heap随机存放
规律:
数据分为两种:对象和非对象
对象都放在heap 堆区,对象有:数组,函数,
非对象都放在stack栈,非对象的有三个:数字,字符串,布尔
四.JS入门之原型
在写代码之前至少有以下五个:
- console
- document
- 对象object
- 数组
- 函数
都挂在window上
用console.dir(window.Object)打出结构
一张图来表示:
window有三个属性:console,Object,Array
细节:
- 关于window
- window变量和window对象是两个东西
- window变量是一个容器,存放window对象的地址
- window对象是heap里面的一堆数据
- 同理
- console和console对象不是同一个东西
- Object和Object函数对象不是同一个东西
- 前者是内存地址,后者是一堆内存
五.原型,也叫共有属性
三座大山:原型,this,ajax
所有的对象都有隐藏属性
只关心小写开头对象的隐藏属性,暂时不研究大写开头对象的隐藏属性
prototype和proto区别是:
都放着原型的地址,
但是prototype挂在函数上,大写
而proto挂在每个新生成的对象上