《图解 Google V8》学习笔记Day82

2023-05-16
阅读 3 分钟
258
JavaScript中,“1+‘2’等于多少?” '12'在Python中使用数字和字符串进行相加操作,那么Python虚拟机会直接返回一个执行错误,错误提示是这样的:

《图解 Google V8》学习笔记Day81

2023-05-15
阅读 2 分钟
245
每个函数在执行时都需要查找自己的作用域,我们称为函数作用域,在执行阶段,在执行一个函数时,当该函数需要使用某个变量或者调用了某个函数时,便会优先在该函数作用域中查找相关内容。参考一段代码:

《图解 Google V8》学习笔记Day80

2023-05-14
阅读 5 分钟
356
简单地理解,继承就是一个对象可以访问另外一个对象中的属性和方法,比如我有一个B对象,该对象继承了A对象,那么B对象便可以直接访问A对象中的属性和方法,你可以参考下图:不同的语言实现继承的方式是不同的,其中最典型的两种方式是基于类的设计和基于原型继承的设计。C++、Java、C#这些语言都是基于经典的类继承的设...

《图解 Google V8》学习笔记Day79

2023-05-14
阅读 3 分钟
636
在这段代码中,我定义了一个变量foo,然后将一个函数赋值给了变量foo,同样在源码中,我们也是在foo函数的前面调用foo,执行这段代码,我们发现报错了,提示的错误信息如下所示:

《图解 Google V8》学习笔记Day78

2023-05-12
阅读 3 分钟
173
从结果可以总结出:设置的数字属性被最先打印出来了,并且是按照数字大小的顺序打印的;设置的字符串属性依然是按照之前的设置顺序打印的,比如我们是按照B、A、C的顺序设置的,打印出来依然是这个顺序。之所以出现这样的结果,是因为在ECMAScript规范中定义了数字属性应该按照索引值大小升序排列,字符串属性根据创建时...

《图解 Google V8》学习笔记Day77

2023-05-11
阅读 3 分钟
215
V8是一个由Google开发的开源JavaScript引擎,目前用在Chrome浏览器和Node.js中,其核心功能是执行易于人类理解的JavaScript代码。那么V8又是怎么执行JavaScript代码的呢?其主要核心流程分为编译和执行两步。首先需要将JavaScript代码转换为低级中间代码或者机器能够理解的机器代码,然后再执行转换后的代码并输出执行结...

《浏览器原理》学习笔记Day76

2023-05-10
阅读 2 分钟
188
如何向一个 CA 机构申请数字证书?首先极客时间填写了一张含有自己身份信息的表单,身份信息包括了自己公钥、站点资料、公司资料等信息,然后将其提交给了 CA 机构;CA 机构会审核表单中内容的真实性;审核通过后,CA 机构会拿出自己的私钥,对表单的内容进行一连串操作,包括了对明文资料进行 Hash 计算得出信息摘要, ...

《浏览器原理》学习笔记Day75

2023-05-09
阅读 3 分钟
186
渲染进程中维护了消息队列,如果通过 SetTimeout 设置的回调函数,通过鼠标点击的消息事件,都会以任务的形式添加消息队列中,然后任务调度器会按照一定规则从消息队列中取出合适的任务,并让其在渲染主线程上执行。Main 指标就记录渲染主线上所执行的全部任务,以及每个任务的详细执行过程。

《浏览器原理》学习笔记Day74

2023-05-08
阅读 2 分钟
226
通常,使用Performance需要分三步走:第一步是配置Performance;第二步是生成报告⻚;第三步就是人工分析报告⻚,并找出⻚面的性能瓶颈。

《浏览器原理》学习笔记Day73

2023-05-07
阅读 3 分钟
187
⻚面交互阶段。性能检测工具:Performance vs AuditsChrome:Performance 和 Audits,检测之前准备工作首先准备 Chrome Canary 版的浏览器,Chrome Canary 是采用最新技术构建的,它的开发者工具和浏览器特性都是最新的,所以我推荐你使用 Chrome Canary 来做性能分析。当然你也可以使用稳定版的 Chrome。然后我们需要在...

《浏览器原理》学习笔记Day72

2023-05-06
阅读 2 分钟
194
再基于单消息队列的架构下,如果用户发出了一个点击事件或是缩放页面的事件,而在此时,该任务前面可能还有很多不太重要的任务在排队等待着被执行,诸如V8 的垃圾回收、DOM 定时器等任务,如果执行这些任务需要花费的时间过久的话,那么就会让用户产生卡顿的感觉。你可以参看下图:

《浏览器原理》学习笔记Day71

2023-05-05
阅读 2 分钟
204
如果从一个标签⻚中打开了另一个新标签⻚,当新标签⻚和当前标签⻚属于同一站点的话,那么新标签⻚会复用当前标签⻚的渲染进程。 (相同协议、相同根域名)

《浏览器原理》学习笔记Day70

2023-05-03
阅读 3 分钟
404
起初HTTP协议只是为了超文本传输,没有太强的加密机制。一直是明文传输,意味着使用HTTP传输的内容很容易被“中间人”窃取、伪造和篡改。通常称为中间人攻击。

《浏览器原理》学习笔记Day69

2023-05-02
阅读 2 分钟
436
从稳定性视⻆来看,单进程架构的浏览器是不稳定的,因为只要浏览器进程中的任意一个功能出现异常都有可能影响到整个浏览器,如⻚面卡死、浏览器崩溃等。

《浏览器原理》学习笔记Day68

2023-05-02
阅读 2 分钟
443
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。通常黑客会通过三种方式去实施CSRF攻击:

《浏览器原理》学习笔记Day67

2023-05-01
阅读 2 分钟
297
XSS 全称是 Cross Site Scripting,为了与“CSS”区分开来,故简称 XSS,翻译过来就是“跨站脚本”。XSS 攻击是指黑客往 HTML 文件中或者 DOM 中注入恶意脚本,从而在用户浏览⻚面时利用注入的恶意脚本对用户实施攻击的一种手段。最开始的时候,这种攻击是通过跨域实现的,所以叫“跨域脚本”,发展至今,往HTML文件中注入恶意...

《浏览器原理》学习笔记Day66

2023-04-30
阅读 1 分钟
209
浏览器安全可以分为三大块:Web ⻚面安全、浏览器网络安全和浏览器系统安全在没有安全保障的 Web 世界中,我们是没有隐私的,因此需要安全策略来保障我们的隐私和数据的安全。

《浏览器原理》学习笔记Day65

2023-04-28
阅读 2 分钟
647
和 HTTP/1.1 一样,HTTP/2 依然是基于 TCP 协议的,而 TCP 最初就是为了单连接而设计的。两台计算机之间传输连接看成一个虚拟管道。传输过程中会将数据拆分为一个个按照顺序排列的数据包,这些数据包通过网络传输到接收端,接收端再按照顺序将这些数据包组合成原始数据。如果有一个数据包因为网络故障或其他原因而丢包了...

《浏览器原理》学习笔记Day64

2023-04-28
阅读 1 分钟
213
HTTP/2:如何提升网络速度?HTTP/1.1 为网络效率做了大量的优化,最核心的有如下三种方式:增加持久连接;浏览器为每个域名最多同时维护6个TCP持久连接;使用CDN的实现域名分片机制。HTTP/1.1 的主要问题HTTP/1.1对带宽的利用率却并不理想主要是由于以下三个原因导致的:第一个原因,TCP 的慢启动。第二个原因,同时开启...

《浏览器原理》学习笔记Day63

2023-04-27
阅读 2 分钟
236
HTTP 都是基于 TCP 协议的,所以客户端先要根据 IP 地址、端口和服务器建立TCP 连接,而建立连接的过程就是 TCP 协议三次握手的过程。

《浏览器原理》学习笔记Day62

2023-04-25
阅读 2 分钟
223
渐进式网页应用(PWA):它究竟解决了Web应用的哪些问题?浏览器三大进化路线:第一个是应用程序 Web 化;第二个是 Web 应用移动化;第三个是 Web 操作系统化;PWA,全称是 Progressive Web App,翻译过来就是渐进式网页应用。根据字面意思,它就是“渐进式 +Web 应用”。对于 Web 应用很好理解了,就是目前我们普通的 Web...

《浏览器原理》学习笔记Day61

2023-04-24
阅读 2 分钟
191
通过JS调用API操作DOM,会影响到整个渲染流水线。所以对于DOM的不当操作可能引发强制同 步和布局抖动,大大降低渲染效率。 对于简单的页面来说,其 DOM 结构还是比较简单的,所以以上这些操作 DOM 的问题并不会对用户体验产生太多影响。但是对于页面非常多或是单页面来说,其DOM结构是很复杂的,执行一次重排或是重绘是...

《浏览器原理》学习笔记Day60

2023-04-22
阅读 2 分钟
556
核心因素:第一个是关键资源个数。第二个是关键资源大小。第三个是请求关键资源需要多少个 RTT(Round Trip Time)。总的优化原则就是减少关键资源个数,降低关键资源大小,降低关键资源的 RTT 次数。

《浏览器原理》学习笔记Day59

2023-04-22
阅读 1 分钟
174
大多数设备屏幕的更新频率是 60 次 / 秒,渲染引擎60次/s更新到显卡后缓存区,显卡的后缓存区每60/s更新到前缓存区,显示器60次/s读取前缓存区

《浏览器原理》学习笔记Day58

2023-04-20
阅读 3 分钟
494
这两段代码分别由 CSS 文件和 HTML 文件构成,我们来分析下打开这段 HTML 文件时的渲染流水线,你可以先参考下面这张渲染流水线示意图:

《浏览器原理》学习笔记Day57

2023-04-20
阅读 3 分钟
187
从 JavaScript 脚本视角来看,DOM 提供给 JavaScript 脚本操作的接口,通过这套接口,JavaScript 可以对 DOM 结构进行访问,从而改变文档的结构、样式和内容。

《浏览器原理》学习笔记Day56

2023-04-19
阅读 3 分钟
174
Chrome 开发者工具有很多重要的面板,比如与性能相关的有网络面板、Performance 面板、内存面板等,与调试页面相关的有 Elements 面板、Sources 面板、Console 面板等。

《浏览器原理》学习笔记Day55

2023-04-18
阅读 4 分钟
194
从这段 Promise 代码可以看出来,使用 promise.then 也是相当复杂,虽然整个请求流程已经线性化了,但是代码里面包含了大量的 then 函数,使得代码依然不是太容易阅读。基于这个原因,ES7 引入了 async/await,这是 JavaScript 异步编程的一个重大改进,提供了在不阻塞主线程的情况下使用同步代码实现异步访问资源的能力...

《浏览器原理》学习笔记Day54

2023-04-17
阅读 5 分钟
185
Promise:使用Promise,告别回调函数Promise 到底解决了什么问题呢?异步编程的问题:代码逻辑不连续事件循环系统页面中任务都是执行在主线程之上耗时任务放到页面主线程之外的进程或者线程中去执行这些页面的最大特点:异步回调。Web 页面的单线程架构决定了异步回调,而异步回调影响到了我们的编码方式,到底是如何影...

《浏览器原理》学习笔记Day53

2023-04-16
阅读 1 分钟
172
为了协调页面大部分任务有条不絮的在主线程上执行,页面引入了消息队列和事件循环机制,渲染流程会维护多个消息队列,比如延迟消息队列和普通的消息队列。然后主线程采用一个for循环,不断地从这些任务队列中取出任务并执行任务。我们把这些消息队列中的任务成为宏任务。