小白学Browser
文章平均质量分 55
本专栏是学习《浏览器工作原理与实践》过程中的一些笔记和总结
Mme.Y
这个作者很懒,什么都没留下…
展开
-
05_浏览器页面循环系统
一. 线程模型 第一版——单线程 通过单线程处理安排好的任务 任务代码已经按照顺序写进线程里,线程按顺序执行这些任务 第二版——事件循环机制 线程处理过程中,接收并执行新任务 循环机制:线程语句后添加for 循环语句。线程循环执行 事件:执行过程中可以暂停等待用户输入 第三版——消息队列 线程处理其他线程发送过来的任务 消息队列:数据结构,存放要执行的任务,先进先出 任务类型:输入事件、微任务、文件读写、WebSocket、JS定时器等;JS执行、解析DOM、样式计算、布局计算、CS原创 2021-10-22 17:49:15 · 228 阅读 · 0 评论 -
06_V8执行JS代码
一. 编译器 vs 解释器 编译型语言: 在程序执行之前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件。 每次运行程序时,直接运行该二进制文件,而不需要再次重新编译。 如 C/C++、GO 等语言 解释型语言: 在每次运行时都需要通过解释器对程序进行动态解释和执行。 如 Python、JavaScript 等语言。 编译器 运用于编译型语言 依次对源代码进行词法分析、语法分析,生成抽象语法树(AST),然后是优化代码,最后再生成处理器能够理解的机器码。 如果编译成功,原创 2021-10-18 17:57:25 · 183 阅读 · 0 评论 -
05_内存机制
一. JS的数据类型 JavaScript是一种弱类型的、动态的语言 弱类型:支持隐式类型转换的语言,与强类型对应 动态语言:在运行过程中需要检查数据类型的语言,与静态语言对应 原始类型 Boolean Null Undefined Number String Symbol BigInt 引用类型 Object 二. 内存空间 代码空间 栈空间 调用栈 原始类型的数据值直接保存在栈中 原始类型的赋值会完整复制变量值 堆空间 引用类型的值存放在堆中 引用类型的赋值是复制引用地址 // 原始原创 2021-10-17 17:11:34 · 95 阅读 · 0 评论 -
04_this
this this 和执行上下文绑定 全局执行上下文中的this 指向 wihdow 对象 函数执行上下文中的this 默认情况调用函数,其执行上下文的this也是指向window对象 设置this指向 函数 call 方法 let bar = { myName : " 极客邦 ", test1 : 1 } function foo(){ this.myName = " 极客时间 " } foo.call(bar) console.log(bar) // {myName: ' 极原创 2021-10-17 17:09:02 · 118 阅读 · 0 评论 -
03_作用域链和闭包
作用域链 通过outer去执行上下文中查找外部变量的链条 outer:外部引用,存在于每个执行上下文的变量环境中,指向外部的执行上下文 词法作用域链 作用域是由代码中函数声明的位置来决定的,所以词法作用域是静态的作用域,通过它就能够预测代码在执行过程中如何查找标识符 词法作用域是代码阶段决定的,和函数调用没有关系 let count = 1 function main(){ let count = 2 function bar(){ let count = 3原创 2021-10-17 17:08:17 · 61 阅读 · 0 评论 -
02_JS栈溢出
函数调用 运行一个函数,函数名+() 过程 为整段代码创建全局执行上下文 执行代码 遇见函数调用,取出函数代码并进行编译,创建函数执行上下文和可执行代码 执行代码 注意:在执行过程中会出现多个执行上下文 调用栈 管理执行上下文的数据结构,也称执行上下文栈,先进后出 追踪函数执行的机制 不断的将执行上下文压栈,代码执行完毕后就出栈 栈溢出 调用栈是有大小的,入栈的执行上下文超出一定数目就会报错,即栈溢出 学习资料 李兵:《08丨调用栈:为什么JavaScript代码会出现栈溢出?》原创 2021-10-17 17:06:30 · 276 阅读 · 0 评论 -
01_JS执行顺序
声明和赋值 变量的声明和赋值 var name = 'xy'; // 等价于 var name; // 变量声明 name = 'xy'; // 变量赋值 函数的声明和赋值 // 完整函数变量声明 function foo = function(){ console.log('foo'); } var foo; // 先声明变量 // 后赋值 foo = function(){ console.log('foo'); } 变量提升 JS代码执行过程中,把变量的声明部分和函数原创 2021-10-17 17:05:26 · 105 阅读 · 0 评论 -
04_浏览器页面渲染
一. 导航 用户发出URL请求到页面开始解析的过程 1. 用户输入 2. URL请求过程 通过IPC把URL请求发送到网络进程 网络进程发送网络请求,并接收响应数据(响应行、响应头、响应体) 网络进程解析响应头 3. 准备渲染进程 默认:一个页面一个渲染进程 4. 提交文档 文档:URL请求的响应体数据 二. 渲染流程 1. 构建DOM树 解析HTML成为浏览器可以理解的DOM HTML解析器解析HTML,输出树状结构的DOM 标签和内容均成为DOM树的结点 2. 样式计算 计算出原创 2021-10-17 17:01:13 · 69 阅读 · 0 评论 -
03_HTTP协议
HTTP 允许浏览器向服务器获取资源的协议,Web的基础 建立在TCP连接基础上,HTTP 的内容是通过 TCP 的传输数据阶段来实现的 HTTP工作开始前,浏览器需要TCP与服务器建立连接 HTTP请求流程 1. 构建请求 构建请求行信息,准备发起网络请求 2. 查找缓存 发生于真正发起网络请求之前 如果请求的资源已经在浏览器缓存中存有副本,就拦截请求,返回资源副本,结束请求 如果没有副本,则发送网络请求 浏览器缓存:在本地保存资源副本,以供下次请求时直接使用 缓存资源未过期,直接返回该资原创 2021-10-17 16:58:07 · 242 阅读 · 0 评论 -
02_TCP协议
互联网:理念和协议组成的架构 数据包:互联网中如果发送数据很大,数据就会被拆分为很多小数据包 IP 网络协议,底层协议 计算机地址为IP地址,IP头确保数据包送达正确主机 UDP 用户数据包协议 UDP通过端头号把数据包发给正确程序,传输速度快 问题: 数据包容易丢失 不能保证数据可靠性 TCP 传输控制协议,UDP升级版 可以解决UDP存在的两个问题 三个阶段: 建立连接:三次握手(发送三个数据包以确立连接的建立) 传输数据:数据包校验机制 断开连接:四次挥手(保证断开连接) .原创 2021-10-17 16:54:35 · 349 阅读 · 0 评论 -
01_浏览器(Chrome)架构
线程和进程 并行处理:计算机同一时刻处理多个任务,简化任务执行步骤,提升性能 进程 一个进程就是一个程序的运行实例 程序启动时,操作系统创建内存,存放代码、数据、文件和执行任务的线程。 整一个运行环境为进程。 线程 进程中的任务执行过程 线程 vs 进程 线程依赖于进程,进程使用多线程可以提升性能 一个线程的出错,会导致整个进程的奔溃 线程共享进程的数据 进程关闭,申请的内存全部被回收 进程与进程间相互不影响 浏览器进化史 单进程浏览器时代 浏览器所有功能模块都在同一个进程里运行 模块原创 2021-10-17 16:45:38 · 96 阅读 · 0 评论