Yihui’s Blog

The Journal

Notes on frontend development, engineering, and everyday ideas. Find a subject and start reading.

783 articles

Node.js 进程通信

由面试题引出的 黄金时代:事件驱动 为了解决高并发问题,基于事件驱动的服务模型出现了,像Node与Nginx均是基于事件驱动 的方式实现的,采用单线程避免了不必要的内存开销和上下文切换开销。 多进程架构 面对单进程单线程对多核使用不足的问题,前人的经验是启动多进程即可。理想状态下每个 进程各自利用一个CPU,以此…

Read article

消息队列和事件循环:页面是怎么活起来的

前面我们讲到了每个渲染进程都有一个主线程,并且主线程非常繁忙,既要处理 DOM,又要计算样式,还要处理布局,同时还需要处理 JavaScript 任务以及各种输入事件。要让这么多不同类型的任务在主线程中有条不紊地执行,这就需要一个系统来统筹调度这些任务,这个统筹调度系统就是我们今天要讲的消息队列和事件循环系统。 …

Read article

L10 作用域链和闭包:代码中出现相同的变量,JavaScript引擎如何选择

理解作用域链是理解闭包的基础,而闭包在 JavaScript 中几乎无处不在,同时作用域和作用域链还是所有编程语言的基础。所以,如果你想学透一门语言,作用域和作用域链一定是绕不开的 那今天我们就来聊聊什么是作用域链,并通过作用域链再来讲讲什么是闭包。 首先我们来看下面这段代码: 你觉得这段代码中的 bar 函数和…

Read article

L11 this:从JavaScript执行上下文视角讲this

在上篇文章中,我们讲了词法作用域、作用域链以及闭包,并在最后思考题中留了下面这样一段代码 相信你已经知道了,在 printName 函数里面使用的变量 myName 是属于全局作用域下面的,所以最终打印出来的值都是“极客邦”。这是因为 JavaScript 语言的作用域链是由词法作用域决定的,而词法作用域是由代码…

Read article

L12 栈空间和堆空间:数据是如何存储的

对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视。特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaScript 的内存机制是什么 但是如果你想成为行业专家,并打造高性能前端应用,那么你就必须要搞清楚JavaScrip…

Read article

L13 垃圾回收:垃圾数据如何自动回收

有些数据被使用之后,可能就不再需要了,我们把这种数据称为垃圾数据。如果这些垃圾数据一直保存在内存中,那么内存会越用越多,所以我们需要对这些垃圾数据进行回收,以释放有限的内存空间 不同语言的垃圾回收策略 通常情况下,垃圾数据回收分为手动回收和自动回收两种策略。 如 C/C++ 就是使用手动回收策略,何时分配内存、何…

Read article

L8 调用栈:为什么JavaScript代码会出现栈溢出

在上篇文章中,我们讲到了,当一段代码被执行时,JavaScript引擎先会对其进行编译,并创建执行上下文。但是并没有明确说明到底什么样的代码才算符合规范 那么接下来我们就来明确下,哪些情况下代码才算是“一段”代码,才会在执行之前就进行编译并创建执行上下文。一般说来,有这么三种情况 当JavaScript执行全局代…

Read article