Vue.js 设计与实现 - 03 Vue.js 3 的设计思路

在第 1 章中,我们阐述了框架设计是权衡的艺术,这里面存在取舍,例如性能和可维护性之间的取舍、运行时和编译时之间的取舍。在第 2 章中,我们详细讨论了框架设计的几个核心要素,有些要素是框架设计者必须要考虑的,另一些要素则是从专业和提升开发体验的角度考虑的。框架的设计将就全局视角的把控,一个项目就算在大,也是存在一条核心思路的,并围绕核心展开。本章就从全局视角了解 Vue.js 3 的设计思路、工作机制及其重要的组成部分。可以把这些组成部分当作独立的功能模块,看看它们之间是如何相互配合的。后续的章节中,我们会深入各个功能模块了解它们的运作机制。

第一篇 框架设计概览 虚拟DOM 渲染器 组件 模板 编译器

Read More

Vue.js 设计与实现 - 05 非原始值的响应式方案

上一章中,着重讨论了响应系统的概念和实现,并简单介绍了响应式数据的基本原理。本章中我们把目光聚焦在响应式数据本身,深入探讨实现响应式数据需要考虑哪些内容,其中的难点是什么。除了拦截 get、set 操作外,还需要考虑其他问题,比如 追踪拦截for…in 循环?如何代理数组、对象、Set、Map 等类型的数据。想要实现完善的响应式数据,需要深入语言规范(ECMA-262)。

第二篇 响应系统 Proxy Reflect

Read More

Vue.js 设计与实现 - 06 原始值的响应式方案

原始值指的是 Boolean、Number、String、Symbol、BigInt、Null 和 Undefined 等类型的值。在 JS 中,原始值是按值传递的,这意味着,如果一个函数接受原始值作为参数,那么形参和实参之间没有引用关系,它们是两个完全独立的值,对形参的修改不会影响实参。另外,JS 中的 Proxy 无法提供对原始值的代理,必须对其进行包装,才能实现对原始值的代理。

原始值 按值传递 形参 实参 包装

第二篇 响应系统

Read More

Vue.js 设计与实现 - 02 框架设计的核心要素

框架设计要比想象得复杂,并不是说只把功能开发完成,能用就算大功告成了,这里还有很多问题:

  • 框架应该给用户提供哪些构建的产物?
  • 产物的模块格式如何?
  • 当用户没有以预期的方式使用框架时,是否应该答应合适的警告信息从而提供更好的开发体验,让用户快速定位问题?
  • 开发版本的构建和生产版本的构建有何区别?
  • 热更新(Hot Module Replacement,HMR)需要框架层面的支持,我们是否考虑?
  • 框架提供了多个功能,而用户只需要其中几个功能时,用户能都选择关闭其他功能从而减少最终资源的打包体积

第一篇 框架设计概览 webpack rollup.js Tree-Shaking 函数副作用 压缩工具 terser

Read More

Vue.js 设计与实现 - 01 权衡的艺术

“框架设计里到处都体现了权衡的艺术”

深入探讨 Vue.js 3 各个模块的实现思路和细节之前,我认为有必要先来讨论视图层框架设计方面的内容。为什么呢?因为当我们设计一个框架的时候,框架本身各个模块之间并不是相互独立的,而是相互关联、相互制约的。作为框架设计者,一定要对框架的定位和方向拥有全局的把控,这样才能做好后续的模块设计和拆分。同样,作为学习中,我们在学习框架时,也应该从全局的角度对框架的设计拥有清晰的认知,否则很容易被细节困住,看不清全貌。

第一篇 框架设计概览 命令式(性能) 声明式(维护) 虚拟DOM 运行时 编译时#行编译时

Read More