Vue.js设计与实现(霍春阳)

Vue.js设计与实现 (霍春阳)

        电子版获取链接:Vue.js设计与实现(霍春阳)

read-normal-img

编辑推荐

适读人群 :1.对Vue.js 2/3具有上手经验,且希望进一步理解Vue.js框架设计原理的开发人员; 2.没有使用过Vue.js,但对Vue.js框架设计感兴趣的前端开发人员。

1.Vue.js 官方团队成员霍春阳倾力打造;

2.基于 Vue.js 3 深入解析 Vue.js 设计细节;

3.Vue.js 作者尤雨溪作序推荐;

4.本书提供源代码下载;

5.业界大咖联袂推荐。

内容简介

本书基于Vue.js 3,从规范出发,以源码为基础,并结合大量直观的配图,循序渐进地讲解Vue.js中各个功能模块的实现,细致剖析框架设计原理。全书共18章,分为六篇,主要内容包括:框架设计概览、响应系统、渲染器、组件化、编译器和服务端渲染等。通过阅读本书,对Vue.js 2/3具有上手经验的开发人员能够进一步理解Vue.js框架的实现细节,没有Vue.js使用经验但对框架设计感兴趣的前端开发人员,能够快速掌握Vue.js的设计原理。

作者简介

霍春阳(HcySunYang)

Vue.js官方团队成员,专注于Web研发领域,是Vue.js 3的核心贡献者之一,Vue.js文档生成工具Vuese的作者,技术社区活跃者,曾撰写大量颇受好评的技术博客。

精彩书评

这本书对Vue.js 3技术细节的分析非常可靠,对于需要深入理解Vue.js 3的用户会有很大的帮助。

--尤雨溪,Vue.js作者

听到春阳在筹备这本书时,我就期待不已。以他对Vue.js的贡献与理解程度,编写这本书真是再适合不过了!春阳从框架设计者的角度巧妙地切入,自底层由浅入深地阐述Vue.js的设计思想。身为Vue.js多年使用者的我,也被书中丰富的细节所震撼,读后受益匪浅。若想更好地理解与使用Vue.js,我极力推荐本书。

--Anthony Fu,Vue.js和Vite核心团队成员

春阳是Vue.js团队中对框架源码钻研最深的人之一。

这本《Vue.js设计与实现》并非简单的源码解析之作,反而深入浅出,既从设计理念的角度阐述了Vue.js的技术选择,也讲解了更为通用的算法知识和JavaScript语言规范细节。这本书不仅能帮助前端新手理解前端框架功能,而且为资深开发者阅读源码提供助力,还能对广大的前端技术爱好者有所启发,非常值得一读。

--蒋豪群,Vue.js和Vite核心团队成员

当前,在开发前端应用程序时,Vue.js已经是**技术之一了。使用Vue.js的开发者数量庞大,其中很多人尝试阅读源码,以期了解更多细节。

本书从核心团队开发者的角度,详细解析了从无到有开发Vue.js的技术细节,以及背后的工程权衡,其细节之丰富,远超第三方源码解读。想要深入框架细节的业务开发者以及各类组件、框架和平台开发者,都可以从本书中受益。此外,作者的技术实力和写作态度,也保证了本书的品质。

--(飞叔)徐飞

数据驱动的前端框架已成为现代前端研发的标准配置。Vue.js作为其中脱颖而出的主流选择之一,有许多值得前端开发者学习、借鉴的思想和实践。作为Vue.js 3的核心贡献者,春阳对Vue.js的各个方面都有很深入的理解。这本书为读者详细展示了Vue.js的设计原理与实践细节,以及框架设计背后的权衡艺术,是一本不容错过的好书。我相信所有对Vue.js、框架设计感兴趣的开发者读完这本书后,都能有更进一步的理解。

--顾轶灵,百度资深研发工程师,Vue.js官方团队成员

我特别喜欢《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-Shaking 15

2.4 框架应该输出怎样的构建产物 17

2.5 特性开关 19

2.6 错误处理 21

2.7 良好的TypeScript类型支持 23

2.8 总结 25

第3章 Vue.js 3的设计思路 27

3.1 声明式地描述UI 27

3.2 初识渲染器 29

3.3 组件的本质 32

3.4 模板的工作原理 34

3.5 Vue.js是各个模块组成的有机整体 36

3.6 总结 37

第4章 响应系统的作用与实现 40

4.1 响应式数据与副作用函数 40

4.2 响应式数据的基本实现 41

4.3 设计一个完善的响应系统 43

4.4 分支切换与cleanup 50

4.5 嵌套的effect与effect栈 55

4.6 避免无限递归循环 59

4.7 调度执行 60

4.8 计算属性computed与lazy 64

4.9 watch的实现原理 71

4.10 立即执行的watch与回调执行时机 75

4.11 过期的副作用 77

4.12 总结 82

第5章 非原始值的响应式方案 84

5.1 理解Proxy和Reflect 84

5.2 JavaScript对象及Proxy的工作原理 88

5.3 如何代理Object 92

5.4 合理地触发响应 102

5.5 浅响应与深响应 108

5.6 只读和浅只读 110

5.7 代理数组 113

5.7.1 数组的索引与 length 114

5.7.2 遍历数组 119

5.7.3 数组的查找方法 124

5.7.4 隐式修改数组长度的原型方法 129

5.8 代理Set和Map 132

5.8.1 如何代理Set和Map 133

5.8.2 建立响应联系 137

5.8.3 避免污染原始数据 140

5.8.4 处理forEach 143

5.8.5 迭代器方法 147

5.8.6 values与keys方法 152

5.9 总结 155

第6章 原始值的响应式方案 158

6.1 引入ref的概念 158

6.2 响应丢失问题 160

6.3 自动脱ref 164

6.4 总结 166

第7章 渲染器的设计 170

7.1 渲染器与响应系统的结合 170

7.2 渲染器的基本概念 172

7.3 自定义渲染器 175

7.4 总结 179

第8章 挂载与更新 180

8.1 挂载子节点和元素的属性 180

8.2 HTML Attributes与DOM Properties 182

8.3 正确地设置元素属性 184

8.4 class的处理 189

8.5 卸载操作 192

8.6 区分vnode的类型 195

8.7 事件的处理 196

8.8 事件冒泡与更新时机问题 201

8.9 更新子节点 204

8.10 文本节点和注释节点 209

8.11 Fragment 212

8.12 总结 215

第9章 简单Diff算法 218

9.1 减少DOM操作的性能开销 218

9.2 DOM复用与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.4 props与组件的被动更新 306

12.5 setup函数的作用与实现 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.1 KeepAlive组件的实现原理 337

14.1.1 组件的激活与失活 337

14.1.2 include和exclude 342

14.1.3 缓存管理 343

14.2 Teleport组件的实现原理 346

14.2.1 Teleport组件要解决的问题 346

14.2.2 实现Teleport组件 347

14.3 Transition组件的实现原理 350

14.3.1 原生DOM的过渡 351

14.3.2 实现Transition组件 356

14.4 总结 360

第 15章 编译器核心技术概览 364

15.1 模板DSL的编译器 364

15.2 parser的实现原理与状态机 368

15.3 构造AST 374

15.4 AST的转换与插件化架构 383

15.4.1 节点的访问 383

15.4.2 转换上下文与节点操作 387

15.4.3 进入与退出 392

15.5 将模板AST转为JavaScript AST 396

15.6 代码生成 402

15.7 总结 407

第 16章 解析器 409

16.1 文本模式及其对解析器的影响 409

16.2 递归下降算法构造模板AST 413

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.2 Block与PatchFlags 454

17.1.3 收集动态节点 457

17.1.4 渲染器的运行时支持 459

17.2 Block树 461

17.2.1 带有v-if指令的节点 462

17.2.2 带有v-for指令的节点 464

17.2.3 Fragment的稳定性 465

17.3 静态提升 466

17.4 预字符串化 468

17.5 缓存内联事件处理函数 469

17.6 v-once 470

17.7 总结 471

第 18章 同构渲染 474

18.1 CSR、SSR以及同构渲染 474

18.2 将虚拟DOM渲染为HTML字符串 478

18.3 将组件渲染为HTML字符串 484

18.4 客户端激活的原理 489

18.5 编写同构的代码 494

18.5.1 组件的生命周期 494

18.5.2 使用跨平台的API 496

18.5.3 只在某一端引入模块 496

18.5.4 避免交叉请求引起的状态污染 497

18.5.5 组件 498

18.6 总结 499

本文禁止转载或摘编

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/253794.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习系列56:使用whisper进行语音转文字

1. openai-whisper 这应该是最快的使用方式了。安装pip install -U openai-whisper,接着安装ffmpeg,随后就可以使用了。模型清单如下: 第一种方式,使用命令行: whisper japanese.wav --language Japanese --model…

算法随想录第五十二天打卡|300.最长递增子序列 , 674. 最长连续递增序列 , 718. 最长重复子数组

300.最长递增子序列 今天开始正式子序列系列,本题是比较简单的,感受感受一下子序列题目的思路。 视频讲解:动态规划之子序列问题,元素不连续!| LeetCode:300.最长递增子序列_哔哩哔哩_bilibili 代码随想录…

SpringBoot3整合Mybatis-Plus,自定义动态数据源starter

文章目录 前言正文一、项目总览二、核心代码展示2.1 自定义AbstractRoutingDataSource2.2 动态数据源DynamicDataSource2.3 动态数据源自动配置2.4 动态数据源上下文DynamicDataSourceContextHolder2.5 动态数据源修改注解定义2.6 修改切面DynamicDataSourceAspect2.7 动态数据…

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有…

GEE数据集——全球保护价值的地区数据集

具有全球保护价值的地区 自然地图项目提供了一系列全球价值保护图层。这些地图是通过共同优化生物多样性和碳和/或水等国家保护目标绘制的。它们以连续的比例描述了对扩大保护工作具有最大潜在价值的土地面积。前言 – 人工智能教程 注释 此处的 "保护 "不应被理解为…

【Flink入门修炼】1-3 Flink WordCount 入门实现

本篇文章将带大家运行 Flink 最简单的程序 WordCount。先实践后理论,对其基本输入输出、编程代码有初步了解,后续篇章再对 Flink 的各种概念和架构进行介绍。 下面将从创建项目开始,介绍如何创建出一个 Flink 项目;然后从 DataStr…

春运也要“信号升格”:中兴通讯助运营商打造高铁精品网

一年一度的春运,承载了游子的思乡情。据官方预计,今年春运跨区域人员流动量将达到90亿人次,创下历史新高,铁路、公路、水路、民航等营业性客运量全面回升,其中铁路预计发送旅客4.8亿人次,日均1200万人次&am…

使用yolo训练自己的模型

YOLO(You Only Look Once)是一种用于目标检测的深度学习模型,旨在实时检测图像或视频中的多个对象。与传统的目标检测方法不同,YOLO一次性处理整个图像,而不是通过滑动窗口或区域提议进行多次检测。这种方法使得YOLO在…

使用虚拟主机部署多站点

网站目录权限的管理和虚拟主机的配置。 目录权限控制

基于hadoop+spark的大规模日志的一种处理方案

概述: CDN服务平台上有为客户提供访问日志下载的功能,主要是为了满足在给CDN客户提供服务的过程中,要对所有的记录访问日志,按照客户定制的格式化需求以小时为粒度(或者其他任意时间粒度)进行排序、压缩、打包,供客户进行下载,以便进行后续的核对和分析的诉求。而且CDN…

C++实现鼠标点击和获取鼠标位置(编译环境visual studio 2022)

1环境说明 2获取鼠标位置的接口 void GetMouseCurPoint() {POINT mypoint;for (int i 0; i < 100; i){GetCursorPos(&mypoint);//获取鼠标当前所在位置printf("% ld, % ld \n", mypoint.x, mypoint.y);Sleep(1000);} } 3操作鼠标左键和右键的接口 void Mo…

BVH动画绑骨蒙皮并在Unity上展示

文章目录 Blender绑定骨骼Blender蒙皮Blender中导入bvh文件将FBX导入Unity Blender绑定骨骼 先左上角红框进入model模式&#xff0c;选中要绑定的模型&#xff0c;然后进入Edit模式把骨骼和关节对齐。 &#xff08;选中骨骼&#xff0c;G移动&#xff0c;R旋转&#xff09; 为…

跟着pink老师前端入门教程-day21+22

5.4 常见flex布局思路 5.5 背景线性渐变 语法&#xff1a; background: linear-gradient( 起始方向 , 颜色 1, 颜色 2, ...); background: -webkit-linear-gradient(left, red , blue); background: -webkit-linear-gradient(left top, red , blue); 背景渐变必须添加浏览…

asp.net core 依赖注入 实例化对象实例

在面向对象编程中&#xff0c;推荐使用面向接口编程&#xff0c;这样我们的代码就依赖于服务接口&#xff0c;而不是依赖于实现类&#xff0c;可以实现代码解耦。 名称解释&#xff1a; 我们把负责提供对象的注册和 获取功能的框架叫作“容器”&#xff0c; 注册到容器中的对象…

【RT-DETR进阶实战】利用RT-DETR进行视频划定区域目标统计计数

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用RT-DETR现有的一些功能进行一些实战, 让我们不仅会改进RT-DETR,也能够利用RT-DETR去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是…

政安晨:示例演绎Python的函数与获取帮助的方法

调用函数和定义我们自己的函数&#xff0c;并使用Python内置的文档&#xff0c;是成为一位Pythoner的开始。 通过我的上篇文章&#xff0c;相信您已经看过并使用了print和abs等函数。但是Python还有许多其他函数&#xff0c;并且定义自己的函数是Python编程的重要部分。 在本…

由亚马逊云科技 Graviton4 驱动的全新内存优化型实例 Amazon EC2 实例(R8g),现已开放预览

下一代 Amazon Elastic Compute CloudAmazon EC2) 实例的预览版现已公开 提供。全新的 R8g 实例 搭载新式 Graviton4 处理器&#xff0c;其性价比远超任何现有的内存优化实例。对于要求较高的内存密集型工作负载&#xff0c;R8g 实例是不二之选&#xff1a;大数据分析、高性能数…

Linux操作系统基础(一):操作系统概述

文章目录 操作系统概述 一、计算机分类 二、计算机组成 三、操作系统概述 四、操作系统分类 操作系统概述 一、计算机分类 计算机一般分为个人计算机&#xff08;笔记、台式机&#xff09;与 企业级服务器&#xff08;1U、2U、机柜、塔式、刀片&#xff09;两种形式。 二…

PyTorch深度学习实战(23)——从零开始实现SSD目标检测

PyTorch深度学习实战&#xff08;23&#xff09;——从零开始实现SSD目标检测 0. 前言1. SSD 目标检测模型1.1 SSD 网络架构1.2 利用不同网络层执行边界框和类别预测1.3 不同网络层中默认框的尺寸和宽高比1.4 数据准备1.5 模型训练 2. 实现 SSD 目标检测2.1 SSD300 架构2.2 Mul…

前端JavaScript篇之对JSON的理解

目录 对JSON的理解JSON.stringify 和 JSON.parse 方法JSON.stringify 和 JSON.parse 区别JSON.stringify 和 JSON.parse 注意事项总结 对JSON的理解 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它以易读易写的文本形式表示…