编辑点评:
非常适合web前端学习和阅读的一本电子书籍,深入浅出vue.js可以深入讲解Vue.js实现原理和思想,本站提供的是高清无水印的原版书籍,需要的可以免费下载。
内容提要
本书从源码层面分析了Viejs.首先,简要介绍了Viejs:接着详细讲解了其内部核心技术“变化侦测"
并带领大家从0到1实现一个简单的“变化侦测”系统:然后详细介绍了虚拟DOM技术,其中包括虚拟DOM的原理及其patching算法;再后详细讨论了模板编译技术,其中包括模板解析器的实现原理、优化器的原理以及代码生成器的原理;最后详细介绍了其整体架构以及提供给我们使用的各种API的内部原理,同时还介绍了生命周期、错误处理、指令系统与模板过滤器等功能的原理。
本书适合前端开发人员阅读。
深入浅出vuejs电子书图片预览
深入浅出vuejs目录
第1章Vue.js简介1
1.1什么是Vue.js1
1.2Vue.js简史2
第一篇变化侦测
第2章Object的变化侦测6
2.1什么是变化侦测6
2.2如何追踪变化7
2.3如何收集依赖7
2.4依赖收集在哪里8
2.5依赖是谁10
2.6什么是Watcher10
2.7递归侦测所有key12
2.8关于Object的问题13
2.9总结14
第3章Array的变化侦测16
3.1如何追踪变化16
3.2拦截器17
3.3使用拦截器覆盖Array原型18
3.4将拦截器方法挂载到数组的属性上19
3.5如何收集依赖21
3.6依赖列表存在哪儿22
3.7收集依赖23
3.8在拦截器中获取Observer实例24
3.9向数组的依赖发送通知25
3.10侦测数组中元素的变化26
3.11侦测新增元素的变化27
3.11.1获取新增元素27
3.11.2使用Observer侦测新增元素28
3.12关于Array的问题29
3.13总结29
第4章变化侦测相关的API实现原理31
4.1vm.$watch31
4.1.1用法31
4.1.2watch的内部原理32
4.1.3deep参数的实现原理36
4.2vm.$set38
4.2.1用法38
4.2.2Array的处理39
4.2.3key已经存在于target中40
4.2.4处理新增的属性40
4.3vm.$delete41
4.3.1用法42
4.3.2实现原理42
4.4总结45
第二篇虚拟DOM
第5章虚拟DOM简介48
5.1什么是虚拟DOM48
5.2为什么要引入虚拟DOM51
5.3Vue.js中的虚拟DOM51
5.4总结53
第6章VNode54
6.1什么是VNode54
6.2VNode的作用55
6.3VNode的类型56
6.3.1注释节点57
6.3.2文本节点57
6.3.3克隆节点57
6.3.4元素节点58
6.3.5组件节点59
6.3.6函数式组件59
6.4总结59
第7章patch60
7.1patch介绍60
7.1.1新增节点61
7.1.2删除节点62
7.1.3更新节点63
7.1.4小结63
7.2创建节点64
7.3删除节点67
7.4更新节点68
7.4.1静态节点68
7.4.2新虚拟节点有文本属性69
7.4.3新虚拟节点无文本属性69
7.4.4小结70
7.5更新子节点72
7.5.1更新策略72
7.5.2优化策略77
7.5.3哪些节点是未处理过的82
7.5.4小结83
7.6总结86
第三篇模板编译原理
第8章模板编译88
8.1概念88
8.2将模板编译成渲染函数89
8.2.1解析器90
8.2.2优化器91
8.2.3代码生成器91
8.3总结92
第9章解析器93
9.1解析器的作用93
9.2解析器内部运行原理94
9.3HTML解析器99
9.3.1运行原理100
9.3.2截取开始标签101
9.3.3截取结束标签107
9.3.4截取注释108
9.3.5截取条件注释108
9.3.6截取DOCTYPE109
9.3.7截取文本109
9.3.8纯文本内容元素的处理112
9.3.9使用栈维护DOM层级114
9.3.10整体逻辑114
9.4文本解析器117
9.5总结121
第10章优化器122
10.1找出所有静态节点并标记125
10.2找出所有静态根节点并标记127
10.3总结129
第11章代码生成器130
11.1通过AST生成代码字符串131
11.2代码生成器的原理134
11.2.1元素节点134
11.2.2文本节点136
11.2.3注释节点137
11.3总结137
第四篇整体流程
第12章架构设计与项目结构140
12.1目录结构140
12.2架构设计143
12.3总结145
第13章实例方法与全局API的
实现原理146
13.1数据相关的实例方法147
13.2事件相关的实例方法147
13.2.1vm.$on148
13.2.2vm.$off149
13.2.3vm.$once152
13.2.4vm.$emit153
13.3生命周期相关的实例方法154
13.3.1vm.$forceUpdate154
13.3.2vm.$destroy155
13.3.3vm.$nextTick159
13.3.4vm.$mount169
13.4全局API的实现原理178
13.4.1Vue.extend178
13.4.2Vue.nextTick182
13.4.3Vue.set183
13.4.4Vue.delete183
13.4.5Vue.directive184
13.4.6Vue.filter185
13.4.7Vue.component186
13.4.8Vue.use188
13.4.9Vue.mixin189
13.4.10Vue.compile190
13.4.11Vue.version190
13.5总结191
第14章生命周期192
14.1生命周期图示192
14.1.1初始化阶段193
14.1.2模板编译阶段194
14.1.3挂载阶段194
14.1.4卸载阶段194
14.1.5小结194
14.2从源码角度了解生命周期195
14.3errorCaptured与错误处理199
14.4初始化实例属性203
14.5初始化事件204
14.6初始化inject208
14.6.1provide/inject的使用方式208
14.6.2inject的内部原理210
14.7初始化状态215
14.7.1初始化props216
14.7.2初始化methods224
14.7.3初始化data225
14.7.4初始化computed228
14.7.5初始化watch238
14.8初始化provide241
14.9总结241
第15章指令的奥秘242
15.1指令原理概述242
15.1.1v-if指令的原理概述243
15.1.2v-for指令的原理概述243
15.1.3v-on指令244
15.2自定义指令的内部原理246
15.3虚拟DOM钩子函数250
15.4总结251
第16章过滤器的奥秘252
16.1过滤器原理概述253
16.1.1串联过滤器254
16.1.2滤器接收参数254
16.1.3resolveFilter的内部原理255
16.2解析过滤器256
16.3总结258
第17章最佳实践259
17.1为列表渲染设置属性key259
17.2在v-if/v-if-else/v-else中使用key259
17.3路由切换组件不变260
17.3.1路由导航守卫beforeRouteUpdate261
17.3.2观察$route对象的变化261
17.3.3为router-view组件添加属性key262
17.4为所有路由统一添加query262
17.4.1使用全局守卫beforeEach263
17.4.2使用函数劫持263
17.5区分Vuex与props的使用边界264
17.6避免v-if和v-for一起使用264
17.7为组件样式设置作用域266
17.8避免在scoped中使用元素选择器267
17.9避免隐性的父子组件通信268
17.10单文件组件如何命名268
17.10.1单文件组件的文件名的大小写268
17.10.2基础组件名269
17.10.3单例组件名270
17.10.4紧密耦合的组件名270
17.10.5组件名中的单词顺序271
17.10.6完整单词的组件名272
17.10.7组件名为多个单词273
17.10.8模板中的组件名大小写273
17.10.9JS/JSX中的组件名大小写274
17.11自闭合组件275
17.12prop名的大小写276
17.13多个特性的元素276
17.14模板中简单的表达式276
17.15简单的计算属性277
17.16指令缩写278
17.17良好的代码顺序278
17.17.1组件/实例的选项的顺序278
17.17.2元素特性的顺序280
17.17.3单文件组件顶级元素的顺序281
17.18总结282
作者介绍
刘博文,网名Berwin,95后,从事Web前端工作5年,2015年加入360奇舞团,现任360导航事业部前端工程师,负责360导航首页及二级页创新项目等亿级PV站点的设计与优化,推动Vue.js成为部门内广泛使用的核心技术栈,独立研发相关开发工具与技术解决方案并使之成功落地。
W3C性能工作组成员,在Web性能领域有深入研究。热爱开源,热爱技术,梦想是用技术改变世界。
Comments