Now vibe coding, so learning hammer FE ?
《嵌套Promise的实际用途》

标签:#JavaScript #Promise #并发控制 #RWLock #函数式编程

总结:

文章探讨了JavaScript中Promise自动扁平化设计的利弊。作者回顾了Promise/A+规范制定时关于是否引入Monad和Functor概念的争论,并通过实现读者-写者锁(RWLock)的实际案例,展示了嵌套Promise在并发控制中的独特价值——它能让一个异步函数调用另一个异步函数,却不阻塞等待内层函数完成,从而实现精细的并发管理。

文章要点:

- Promise的then()方法同时承担了Functor的map和Monad的flatMap功能,会自动扁平化任意层级的嵌套Promise
- 函数式编程社区曾希望Promise能区分map()flatMap(),但规范作者出于便利性考虑拒绝了这一提议
- 作者在开发EscoDB时遇到了一个真实场景:实现读者-写者锁(RWLock)需要协调多个读操作并发执行、写操作独占执行
- 通过显式返回{ promise: Promise<T> }结构来"绕过"Promise自动扁平化,实现了关键功能:保护"检查队列状态"和"放入任务"这两个动作的原子性,同时又不阻塞调度器等待任务实际执行完成
- 嵌套Promise代表"一个异步函数调用另一个异步函数,但不等待其完成"的语义,在主动管理并发控制时非常有用
- Promise扁平化本质上是"时间上的连接"(强制顺序执行),而嵌套Promise则保留了并行调度的可能性

文章URL:https://blog.jcoglan.com/2026/03/23/uses-for-nested-promises/
《理解 React Fiber 存在的意义》

标签:#前端 #React #React_Fiber #性能优化 #并发渲染 #Virtual_DOM

总结(一段话概括)
React Fiber 是 React 16 对核心协调算法的彻底重写,旨在解决 React 15 中 Stack Reconciler 同步递归更新导致的主线程阻塞问题。通过将组件树重构为链表结构的 Fiber 节点,React 实现了可中断的异步更新、任务优先级调度和时间切片机制,使高优先级任务(如用户输入)能插队执行,避免页面卡顿,并为 Concurrent Mode、Suspense 等现代特性奠定基础。

文章要点:
- React 15 的瓶颈:Stack Reconciler 采用递归遍历,更新一旦开始无法中断,复杂组件树会导致主线程长时间阻塞,造成掉帧和交互卡顿
- Fiber 的本质:将同步更新改为可中断的异步更新,每个 Fiber 节点是一个执行单元,通过 childsiblingreturn 指针形成链表树,取代递归调用栈
- 时间切片(Time Slicing):利用 requestIdleCallback polyfill(基于 MessageChannel),在浏览器每帧(16.6ms)中预留时间(默认 5ms)给 React,超时即让出主线程控制权
- 优先级调度:引入 Lanes 机制,区分 Immediate(最高)、UserBlocking、Normal、Low、Idle 五级优先级,确保紧急更新优先处理
- 双缓冲机制:维护 current FiberworkInProgress Fiber 两棵树,通过 alternate 指针关联,渲染完成后直接切换指针指向,避免重复创建对象
- Phase 分离:将更新分为 Render 阶段(可中断,构建 Fiber 树)和 Commit 阶段(不可中断,同步执行 DOM 操作),支持错误边界(Error Boundaries)捕获
- 架构演进:从 React 15 的两层(Reconciler + Renderer)增至 React 16+ 的三层(Scheduler + Reconciler + Renderer),调度器负责任务分配和中断控制

文章URL:https://inside-react.vercel.app/blog/understanding-why-react-fiber-exists Understanding Why React Fiber Exists
 
 
Back to Top