注册 登录 进入教材巡展
#
  • #

出版时间:2022-01

出版社:人民邮电出版社

以下为《Vue.js设计与实现》的配套数字资源,这些资源在您购买图书后将免费附送给您:
  • 人民邮电出版社
  • 9787115583864
  • 430868
  • 2022-01
作者简介
霍春阳(HcySunYang)
Vue.js官方团队成员,专注于Web研发领域,是Vue.js 3的核心贡献者之一,Vue.js文档生成工具Vuese的作者,技术社区活跃者,曾撰写大量颇受好评的技术博客。
查看全部
内容简介
本书基于Vue.js 3,从规范出发,以源码为基础,并结合大量直观的配图,循序渐进地讲解Vue.js中各个功能模块的实现,细致剖析框架设计原理。全书共18章,分为六篇,主要内容包括:框架设计概览、响应系统、渲染器、组件化、编译器和服务端渲染等。通过阅读本书,对Vue.js 2/3具有上手经验的开发人员能够进一步理解Vue.js框架的实现细节,没有Vue.js使用经验但对框架设计感兴趣的前端开发人员,能够快速掌握Vue.js的设计原理。
目录

前言
第1章 权衡的艺术2
1.1命令式和声明式2
1.2性能与可维护性的权衡3
1.3虚拟DOM的性能到底如何4
1.4运行时和编译时8
1.5总结11
第2章 框架设计的核心要素12
2.1提升用户的开发体验12
2.2控制框架代码的体积14
2.3框架要做到良好的Tree-Shaking15
2.4框架应该输出怎样的构建产物17
2.5特性开关19
2.6错误处理21
2.7良好的TypeScript类型支持23
2.8总结25
第3章Vue.js 3的设计思路27
3.1声明式地描述UI27
3.2初识渲染器29
3.3组件的本质32
3.4模板的工作原理34
3.5Vue.js是各个模块组成的有机整体36
3.6总结37
第4章响应系统的作用与实现40
4.1响应式数据与副作用函数40
4.2响应式数据的基本实现41
4.3设计一个完善的响应系统43
4.4分支切换与cleanup50
4.5嵌套的effect与effect栈55
4.6避免无限递归循环59
4.7调度执行60
4.8计算属性computed与lazy64
4.9watch的实现原理71
4.10立即执行的watch与回调执行时机75
4.11过期的副作用77
4.12总结82
第5章非原始值的响应式方案84
5.1理解Proxy和Reflect84
5.2JavaScript对象及Proxy的工作原理88
5.3如何代理Object92
5.4合理地触发响应102
5.5浅响应与深响应108
5.6只读和浅只读110
5.7代理数组113
5.7.1数组的索引与 length114
5.7.2遍历数组119
5.7.3数组的查找方法124
5.7.4隐式修改数组长度的原型方法129
5.8代理Set和Map132
5.8.1如何代理Set和Map133
5.8.2建立响应联系137
5.8.3避免污染原始数据140
5.8.4处理forEach143
5.8.5迭代器方法147
5.8.6values与keys方法152
5.9总结155
第6章原始值的响应式方案158
6.1引入ref的概念158
6.2响应丢失问题160
6.3自动脱ref164
6.4总结166
第7章渲染器的设计170
7.1渲染器与响应系统的结合170
7.2渲染器的基本概念172
7.3自定义渲染器175
7.4总结179
第8章挂载与更新180
8.1挂载子节点和元素的属性180
8.2HTML Attributes与DOM Properties182
8.3正确地设置元素属性184
8.4class的处理189
8.5卸载操作192
8.6区分vnode的类型195
8.7事件的处理196
8.8事件冒泡与更新时机问题201
8.9更新子节点204
8.10文本节点和注释节点209
8.11Fragment212
8.12总结215
第9章简单Diff算法218
9.1减少DOM操作的性能开销218
9.2DOM复用与key的作用221
9.3找到需要移动的元素225
9.4如何移动元素228
9.5添加新元素233
9.6移除不存在的元素238
9.7总结241
第10章 双端Diff算法242
10.1双端比较的原理242
10.2双端比较的优势252
10.3非理想状况的处理方式255
10.4添加新元素263
10.5移除不存在的元素268
10.6总结270
第11章 快速Diff算法271
11.1相同的前置元素和后置元素271
11.2判断是否需要进行DOM移动操作279
11.3如何移动元素288
11.4总结296
第12章 组件的实现原理298
12.1渲染组件298
12.2组件状态与自更新301
12.3组件实例与组件的生命周期304
12.4props与组件的被动更新306
12.5setup函数的作用与实现311
12.6组件事件与emit的实现314
12.7插槽的工作原理与实现316
12.8注册生命周期318
12.9总结320
第13章 异步组件与函数式组件322
13.1异步组件要解决的问题322
13.2异步组件的实现原理324
13.2.1封装defineAsyncComponent函数324
13.2.2超时与Error组件325
13.2.3延迟与Loading组件328
13.2.4重试机制331
13.3函数式组件333
13.4总结335
第14章 内建组件和模块337
14.1KeepAlive组件的实现原理337
14.1.1组件的激活与失活337
14.1.2include和exclude342
14.1.3缓存管理343
14.2Teleport组件的实现原理346
14.2.1Teleport组件要解决的问题346
14.2.2实现Teleport组件347
14.3Transition组件的实现原理350
14.3.1原生DOM的过渡351
14.3.2实现Transition组件356
14.4总结360
第15章 编译器核心技术概览364
15.1模板DSL的编译器364
15.2parser的实现原理与状态机368
15.3构造AST374
15.4AST的转换与插件化架构383
15.4.1节点的访问383
15.4.2转换上下文与节点操作387
15.4.3进入与退出392
15.5将模板AST转为JavaScript AST396
15.6代码生成402
15.7总结407
第16章 解析器409
16.1文本模式及其对解析器的影响409
16.2递归下降算法构造模板AST413
16.3状态机的开启与停止419
16.4解析标签节点426
16.5解析属性430
16.6解析文本与解码HTML实体436
16.6.1解析文本436
16.6.2解码命名字符引用438
16.6.3解码数字字符引用445
16.7解析插值与注释449
16.8总结451
第17章 编译优化453
17.1动态节点收集与补丁标志453
17.1.1传统Diff算法的问题453
17.1.2Block与PatchFlags454
17.1.3收集动态节点457
17.1.4渲染器的运行时支持459
17.2Block树461
17.2.1带有v-if指令的节点462
17.2.2带有v-for指令的节点464
17.2.3Fragment的稳定性465
17.3静态提升466
17.4预字符串化468
17.5缓存内联事件处理函数469
17.6v-once470
17.7总结471
第18章 同构渲染474
18.1CSR、SSR以及同构渲染474
18.2将虚拟DOM渲染为HTML字符串478
18.3将组件渲染为HTML字符串484
18.4客户端激活的原理489
18.5编写同构的代码494
18.5.1组件的生命周期494
18.5.2使用跨平台的API496
18.5.3只在某一端引入模块496
18.5.4避免交叉请求引起的状态污染497
18.5.5组件498
18.6总结499