
浏览器教程
文章平均质量分 92
优价实习
开发工程师,各种求职技巧分享与你!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
选择Object 还是Map
对于多数Web 开发任务来说,选择Object 还是Map 只是个人偏好问题,影响不大。不过,对于在乎内存和性能的开发者来说,对象和映射之间确实存在显著的差别。原创 2023-01-31 10:58:46 · 614 阅读 · 0 评论 -
浏览器中的页面循环系统(三)async await使用同步方式写异步代码
好了,今天就介绍到这里,下面我来总结下今天的主要内容。Promsie 的编程模型依然充斥着大量的 then 方法,虽然解决了回调地狱的问题,但是在语义方面依然存在缺陷,代码中充斥着大量的 then 函数,这就是 async / await 出现的原因。使用 async / await 可以实现同步代码的风格来编写异步代码,这是因为 async / await 的基础技术使用了生成器和 Promise,生成器是协程的实现,利用生成器能实现生成器函数的暂停和恢复。原创 2022-08-23 15:15:40 · 391 阅读 · 0 评论 -
浏览器中的页面循环系统(二)Webapi:setTimeout是怎么实现的
首先,为了支持定时器的实现,浏览器增加了延时队列。其次,由于消息队列排队和一些系统级别的限制,通过 setTimeout 设置的回调任务并非总是可以实时地被执行,这样就不能满足一些实时性要求较高的需求了。最后,在定时器使用过程中,还存在一些陷阱,需要你多加注意。通过分析和讲解,你会发现函数 setTimeout 在时效性上面有很多先天的不足,所以对于一些时间精度要求比较高的需求,应该有针对性地采取一些其他的方案。原创 2022-08-23 15:11:08 · 572 阅读 · 0 评论 -
浏览器中的页面循环系统(一)消息队列和事件循环:页面是怎么活起来的
如果有一些确定好的任务,可以使用一个单线程来按照顺序处理这些任务,这是第一版线程模型。要在线程执行过程中接收并处理新的任务,就需要引入循环语句和事件系统,这是第二版线程模型。如果要接收其他线程发送过来的任务,就需要引入消息队列,这是第三版线程模型。如果其他进程想要发送任务给页面主线程,那么先通过 IPC 把任务发送给渲染进程的 IO 线程,IO 线程再把任务发送给页面主线程。消息队列机制并不是太灵活,为了适应效率和实时性,引入了微任务。原创 2022-08-23 15:06:45 · 360 阅读 · 0 评论 -
V8工作原理(二):垃圾回收:垃圾数据如何自动回收
垃圾回收:垃圾数据如何自动回收有些数据被使用之后,可能就不再需要了,我们把这种数据称为垃圾数据。如果这些垃圾数据一直保存在内存中,那么内存会越用越多,所以我们需要对这些垃圾数据进行回收,以释放有限的内存空间原创 2022-03-19 13:17:20 · 559 阅读 · 0 评论 -
V8工作原理(一):栈空间和堆空间:数据是如何存储的
对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视。特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaScript 的内存机制是什么原创 2022-03-16 14:45:39 · 645 阅读 · 0 评论 -
浏览器中的JavaScript执行机制(五)this:从JavaScript执行上下文视角讲this
当函数作为对象的方法调用时,函数中的 this 就是该对象; 当函数被正常调用时,在严格模式下,this 值是 undefined,非严格模式下 this 指向的是全局对象 window; 嵌套函数中的 this 不会继承外层函数的 this 值。 最后,我们还提了一下箭头函数,因为箭头函数没有自己的执行上下文,所以箭头函数的 this 就是它外层函数的 this。这是我们“JavaScript 执行机制”模块的最后一节了,五节下来,你应该已经发现我们将近一半的时间都是在谈 JavaScript 的各种原创 2022-03-16 14:31:07 · 243 阅读 · 0 评论 -
浏览器中的JavaScript执行机制(四):作用域链和闭包:代码中出现相同的变量,JavaScript引擎如何选择
作用域链和闭包:代码中出现相同的变量,JavaScript引擎如何选择理解作用域链是理解闭包的基础,而闭包在 JavaScript 中几乎无处不在,同时作用域和作用域链还是所有编程语言的基础。所以,如果你想学透一门语言,作用域和作用域链一定是绕不开的那今天我们就来聊聊什么是作用域链,并通过作用域链再来讲讲什么是闭包。首先我们来看下面这段代码:function bar() { console.log(myName)}function foo() { var myName原创 2022-03-11 23:44:03 · 169 阅读 · 0 评论 -
浏览器中的JavaScript执行机制(三):块级作用域:var缺陷以及为什么要引入let和const
块级作用域:var缺陷以及为什么要引入let和const在前面《07 | 变量提升:JavaScript代码是按顺序执行的吗?》这篇文章中,我们已经讲解了JavaScript中变量提升的相关内容,正是由于JavaScript存在变量提升这种特性,从而导致了很多与直觉不符的代码,这也是JavaScript的一个重要设计缺陷虽然ECMAScript6(以下简称ES6)已经通过引入块级作用域并配合let、const关键字,来避开了这种设计缺陷,但是由于JavaScript需要保持向下兼容,所以变量提升在相原创 2022-03-11 23:42:02 · 746 阅读 · 0 评论 -
浏览器中的JavaScript执行机制(二):调用栈:为什么JavaScript代码会出现栈溢出
调用栈:为什么JavaScript代码会出现栈溢出在上篇文章中,我们讲到了,当一段代码被执行时,JavaScript引擎先会对其进行编译,并创建执行上下文。但是并没有明确说明到底什么样的代码才算符合规范那么接下来我们就来明确下,哪些情况下代码才算是“一段”代码,才会在执行之前就进行编译并创建执行上下文。一般说来,有这么三种情况当JavaScript执行全局代码的时候,会编译全局代码并创建全局执行上下文,而且在整个页面的生存周期内,全局执行上下文只有一份。 当调用一个函数的时候,函数体内的代码会原创 2022-03-11 23:40:27 · 782 阅读 · 0 评论 -
浏览器中的JavaScript执行机制(一):变量提升:JavaScript代码是按顺序执行的吗?
讲解完宏观视角下的浏览器后,从这篇文章开始,我们就进入下一个新的模块了,这里我会对JavaScript执行原理做深入介绍。今天在该模块的第一篇文章,我们主要讲解执行上下文相关的内容。那为什么先讲执行上下文呢?它这么重要吗?可以这么说,只有理解了JavaScrip的执行上下文,你才能更好地理解JavaScript语言本身,比如变量提升、作用域和闭包等。不仅如此,理解执行上下文和调用栈的概念还能助你成为一名更合格的前端开发者。原创 2022-03-11 23:37:05 · 308 阅读 · 0 评论 -
浏览器第六节:渲染流程(下):HTML、CSS和JavaScript是如何变成页面的
在上篇文章中,我们介绍了渲染流水线中的DOM生成、样式计算和布局三个阶段,那今天我们接着讲解渲染流水线后面的阶段。这里还是先简单回顾下上节前三个阶段的主要内容:在HTML页面内容被提交给渲染引擎之后,渲染引擎首先将HTML解析为浏览器可以理解的DOM;然后根据CSS样式表,计算出DOM树所有节点的样式;接着又计算每个元素的几何坐标位置,并将这些信息保存在布局树中原创 2022-03-07 19:29:24 · 626 阅读 · 0 评论 -
浏览器第五节:渲染流程(上):HTML、CSS和JavaScript是如何变成页面的
在上一篇文章中我们介绍了导航相关的流程,那导航被提交后又会怎么样呢?就进入了渲染阶段。这个阶段很重要,了解其相关流程能让你“看透”页面是如何工作的,有了这些知识,你可以解决一系列相关的问题,比如能熟练使用开发者工具,因为能够理解开发者工具里面大部分项目的含义,能优化页面卡顿问题,使用JavaScript优化动画流程,通过优化样式表来防止强制同步布局,等等。原创 2022-03-07 19:27:26 · 285 阅读 · 0 评论 -
浏览器第四节:导航流程:从输入URL到页面展示这中间发生了什么
导航流程:从输入URL到页面展示这中间发生了什么“在浏览器里,从输入URL到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络、操作系统、Web等一系列的知识。所以我在面试应聘者时也必问这道题,但遗憾的是大多数人只能回答其中部分零散的知识点,并不能将这些知识点串联成线,无法系统而又全面地回答这个问题。那么今天我们就一起来探索下这个流程,下图是我梳理出的“从输入URL到页面展示完整流程示意图”:从图中可以看出,整个过程需要各个进程之间的原创 2022-03-03 20:53:54 · 778 阅读 · 0 评论 -
浏览器第三节:HTTP请求流程:为什么很多站点第二次打开速度会很快
HTTP请求流程:为什么很多站点第二次打开速度会很快一个TCP连接过程包括了建立连接、传输数据和断开连接三个阶段。而HTTP协议,正是建立在TCP连接基础之上的。HTTP是一种允许浏览器向服务器获取资源的协议,是Web的基础,通常由浏览器发起请求,用来获取不同类型的文件,例如HTML文件、CSS文件、JavaScript文件、图片、视频等。此外,HTTP也是浏览器使用最广的协议,所以要想学好浏览器,就要先深入了解HTTP。不知道你是否有过下面这些疑问:为什么通常在第一次访问一个站点时,打开速原创 2022-03-03 19:22:12 · 1027 阅读 · 0 评论 -
浏览器第二节:TCP协议:如何保证页面文件能被完整送达浏览器
TCP协议:如何保证页面文件能被完整送达浏览器在衡量Web页面性能的时候有一个重要的指标叫“FP(First Paint)”,是指从页面加载到首次开始绘制的时长。这个指标直接影响了用户的跳出率,更快的页面响应意味着更多的PV、更高的参与度,以及更高的转化率。那什么影响FP指标呢?其中一个重要的因素是网络加载速度要想优化Web页面的加载速度,你需要对网络有充分的了解。而理解网络的关键是要对网络协议有深刻的认识,不管你是使用HTTP,还是使用WebSocket,它们都是基于TCP/IP的,如果你对这些原原创 2022-03-02 19:18:00 · 2317 阅读 · 0 评论 -
浏览器第一节:Chrome架构:仅仅打开了1个页面,为什么有4个进程
Chrome架构:仅仅打开了1个页面,为什么有4个进程在开始之前,我们一起看下,Chrome打开一个页面需要启动多少进程?你可以点击Chrome浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”,这将打开Chrome的任务管理器的窗口,如下图和Windows任务管理器一样,Chrome任务管理器也是用来展示运行中Chrome使用的进程信息的。从图中可以看到,Chrome启动了4个进程,你也许会好奇,只是打开了1个页面,为什么要启动这么多进程呢?在解答这个问题之前,我们需要原创 2022-03-02 17:54:36 · 1181 阅读 · 0 评论