摘要: 不管是 React 和 Vue,在开发组件这块,都讲究利用组合来复用组件。但是如何将组件分解成多个子组件,有时候却是一件非常棘手的问题。拆分的不合理,非但不能提高组件的复用性,还会带来额外的维护成本。 在这篇设计易于扩展和收缩的软件论文中,作者介绍了一种软件设计思路,我们整理了下,发现不失为一种解决 阅读全文
posted @ 2021-08-25 21:36 西风D碧树 阅读(532) 评论(1) 推荐(1) 编辑
摘要: 事件循环是 NodeJS 处理非阻塞 I/O 操作的和核心机制。NodeJS 的事件循环脱胎于 libuv 的事件循环,因此,要搞清楚 NodeJS 的事件循环,还需要先了解 libuv 的事件循环是如何工作的。 libuv 的事件循环 我们先来了解两个基本概念:句柄(handle)和请求(requ 阅读全文
posted @ 2021-08-16 12:02 西风D碧树 阅读(2028) 评论(0) 推荐(0) 编辑
摘要: 假设我们现在要盖一座房子,我们买了一些砖块,厂家正在送货。现在我们有两个选择,一是等所有砖块都到了以后再开始动工;二是到一批砖块就开始动工,砖块到多少我们就用多少。 这两种方式哪种效率更高呢?显然是第二种。这就是流(stream)的理念。在计算机科学中,流是随时间可用的一系列数据元素。就像传送带运输 阅读全文
posted @ 2021-08-07 10:38 西风D碧树 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 在浏览器中,JavaScript 的执行是单线程的。如何在单线程中实现异步操作呢?答案就是事件循环。 事件循环(Event Loop) 浏览器通过事件循环来处理事件、用户交互、JS 代码执行、渲染、网络请求等。通常又两种事件循环,一种是 Window 事件循环,一种是 Worker 事件循环。由于它 阅读全文
posted @ 2021-08-02 09:01 西风D碧树 阅读(581) 评论(0) 推荐(1) 编辑
摘要: 缓存是一个老生常谈的问题,重要性不言而喻,HTTP 协议中规定了很多请求头和响应头来控制缓存。也因为如此,很多人无法分清某个头部的作用和优先级。本文尝试做一下梳理和总结。 经典 GET 请求过程 先看一个经典的 GET 请求的处理过程,如下图: 当一个请求达到时,浏览器(为方便叙述,已浏览器为例)先 阅读全文
posted @ 2021-07-18 22:32 西风D碧树 阅读(1012) 评论(0) 推荐(1) 编辑
摘要: 有几种因素可以导致 NodeJS 进程退出。在这些因素中,有些是可预防的,比如代码抛出了一个异常;有些是不可预防的,比如内存耗尽。process 这个全局变量是一个 Event Emitter 实例,如果进程优雅退出,process 会派发一个 exit 事件。应用代码可以监听这个事件,来做最后的清 阅读全文
posted @ 2021-07-13 20:50 西风D碧树 阅读(1846) 评论(0) 推荐(0) 编辑
摘要: 虚拟 DOM 是目前主流前端框架的技术核心之一,本文阐述如何实现一个简单的虚拟 DOM 系统。 为什么需要虚拟 DOM? 虚拟 DOM 就是一棵由虚拟节点组成的树,这棵树展现了真实 DOM 的结构。这些虚拟节点是轻量的、无状态的,一般是字符串或者仅仅包含必要字段的 JavaScript 对象。虚拟节 阅读全文
posted @ 2021-07-13 08:06 西风D碧树 阅读(657) 评论(2) 推荐(0) 编辑
摘要: export default A 和 export { A as default } 乍一看是一样的,但是里面有一些细微的区别比较容易留坑。本文介绍两种写法的不同之处。 import 语句导入的是引用,不是值 有导出就必然有导入,我们先明确下 import 语句的工作原理。 import { A } 阅读全文
posted @ 2021-07-12 22:53 西风D碧树 阅读(6474) 评论(3) 推荐(1) 编辑