Vue.js設(shè)計(jì)與實(shí)現(xiàn)
定 價(jià):119.8 元
- 作者:霍春陽(HcySunYang)
- 出版時(shí)間:2022/1/1
- ISBN:9787115583864
- 出 版 社:人民郵電出版社
- 中圖法分類:TP392.092.2
- 頁碼:501
- 紙張:
- 版次:01
- 開本:16開
本書基于Vue.js 3,從規(guī)范出發(fā),以源碼為基礎(chǔ),并結(jié)合大量直觀的配圖,循序漸進(jìn)地講解Vue.js中各個(gè)功能模塊的實(shí)現(xiàn),細(xì)致剖析框架設(shè)計(jì)原理。全書共18章,分為六篇,主要內(nèi)容包括:框架設(shè)計(jì)概覽、響應(yīng)系統(tǒng)、渲染器、組件化、編譯器和服務(wù)端渲染等。通過閱讀本書,對(duì)Vue.js 2/3具有上手經(jīng)驗(yàn)的開發(fā)人員能夠進(jìn)一步理解Vue.js框架的實(shí)現(xiàn)細(xì)節(jié),沒有Vue.js使用經(jīng)驗(yàn)但對(duì)框架設(shè)計(jì)感興趣的前端開發(fā)人員,能夠快速掌握Vue.js的設(shè)計(jì)原理。
1.Vue.js 官方團(tuán)隊(duì)成員霍春陽傾力打造;
2.基于 Vue.js 3 深入解析 Vue.js 設(shè)計(jì)細(xì)節(jié);
3.Vue.js 作者尤雨溪作序推薦;
4.本書提供源代碼下載;
5.業(yè)界大咖聯(lián)袂推薦。
霍春陽(HcySunYang)
Vue.js官方團(tuán)隊(duì)成員,專注于Web研發(fā)領(lǐng)域,是Vue.js 3的核心貢獻(xiàn)者之一,Vue.js文檔生成工具Vuese的作者,技術(shù)社區(qū)活躍者,曾撰寫大量頗受好評(píng)的技術(shù)博客。
序
前言
第 1章 權(quán)衡的藝術(shù) 2
1.1 命令式和聲明式 2
1.2 性能與可維護(hù)性的權(quán)衡 3
1.3 虛擬DOM的性能到底如何 4
1.4 運(yùn)行時(shí)和編譯時(shí) 8
1.5 總結(jié) 11
第 2章 框架設(shè)計(jì)的核心要素 12
2.1 提升用戶的開發(fā)體驗(yàn) 12
2.2 控制框架代碼的體積 14
2.3 框架要做到良好的Tree-Shaking 15
2.4 框架應(yīng)該輸出怎樣的構(gòu)建產(chǎn)物 17
2.5 特性開關(guān) 19
2.6 錯(cuò)誤處理 21
2.7 良好的TypeScript類型支持 23
2.8 總結(jié) 25
第3章 Vue.js 3的設(shè)計(jì)思路 27
3.1 聲明式地描述UI 27
3.2 初識(shí)渲染器 29
3.3 組件的本質(zhì) 32
3.4 模板的工作原理 34
3.5 Vue.js是各個(gè)模塊組成的有機(jī)整體 36
3.6 總結(jié) 37
第4章 響應(yīng)系統(tǒng)的作用與實(shí)現(xiàn) 40
4.1 響應(yīng)式數(shù)據(jù)與副作用函數(shù) 40
4.2 響應(yīng)式數(shù)據(jù)的基本實(shí)現(xiàn) 41
4.3 設(shè)計(jì)一個(gè)完善的響應(yīng)系統(tǒng) 43
4.4 分支切換與cleanup 50
4.5 嵌套的effect與effect!55
4.6 避免無限遞歸循環(huán) 59
4.7 調(diào)度執(zhí)行 60
4.8 計(jì)算屬性computed與lazy 64
4.9 watch的實(shí)現(xiàn)原理 71
4.10 立即執(zhí)行的watch與回調(diào)執(zhí)行時(shí)機(jī) 75
4.11 過期的副作用 77
4.12 總結(jié) 82
第5章 非原始值的響應(yīng)式方案 84
5.1 理解Proxy和Reflect 84
5.2 JavaScript對(duì)象及Proxy的工作原理 88
5.3 如何代理Object 92
5.4 合理地觸發(fā)響應(yīng) 102
5.5 淺響應(yīng)與深響應(yīng) 108
5.6 只讀和淺只讀 110
5.7 代理數(shù)組 113
5.7.1 數(shù)組的索引與 length 114
5.7.2 遍歷數(shù)組 119
5.7.3 數(shù)組的查找方法 124
5.7.4 隱式修改數(shù)組長度的原型方法 129
5.8 代理Set和Map 132
5.8.1 如何代理Set和Map 133
5.8.2 建立響應(yīng)聯(lián)系 137
5.8.3 避免污染原始數(shù)據(jù) 140
5.8.4 處理forEach 143
5.8.5 迭代器方法 147
5.8.6 values與keys方法 152
5.9 總結(jié) 155
第6章 原始值的響應(yīng)式方案 158
6.1 引入ref的概念 158
6.2 響應(yīng)丟失問題 160
6.3 自動(dòng)脫ref 164
6.4 總結(jié) 166
第7章 渲染器的設(shè)計(jì) 170
7.1 渲染器與響應(yīng)系統(tǒng)的結(jié)合 170
7.2 渲染器的基本概念 172
7.3 自定義渲染器 175
7.4 總結(jié) 179
第8章 掛載與更新 180
8.1 掛載子節(jié)點(diǎn)和元素的屬性 180
8.2 HTML Attributes與DOM Properties 182
8.3 正確地設(shè)置元素屬性 184
8.4 class的處理 189
8.5 卸載操作 192
8.6 區(qū)分vnode的類型 195
8.7 事件的處理 196
8.8 事件冒泡與更新時(shí)機(jī)問題 201
8.9 更新子節(jié)點(diǎn) 204
8.10 文本節(jié)點(diǎn)和注釋節(jié)點(diǎn) 209
8.11 Fragment 212
8.12 總結(jié) 215
第9章 簡單Diff算法 218
9.1 減少DOM操作的性能開銷 218
9.2 DOM復(fù)用與key的作用 221
9.3 找到需要移動(dòng)的元素 225
9.4 如何移動(dòng)元素 228
9.5 添加新元素 233
9.6 移除不存在的元素 238
9.7 總結(jié) 241
第 10章 雙端Diff算法 242
10.1 雙端比較的原理 242
10.2 雙端比較的優(yōu)勢 252
10.3 非理想狀況的處理方式 255
10.4 添加新元素 263
10.5 移除不存在的元素 268
10.6 總結(jié) 270
第 11章 快速Diff算法 271
11.1 相同的前置元素和后置元素 271
11.2 判斷是否需要進(jìn)行DOM移動(dòng)操作 279
11.3 如何移動(dòng)元素 288
11.4 總結(jié) 296
第 12章 組件的實(shí)現(xiàn)原理 298
12.1 渲染組件 298
12.2 組件狀態(tài)與自更新 301
12.3 組件實(shí)例與組件的生命周期 304
12.4 props與組件的被動(dòng)更新 306
12.5 setup函數(shù)的作用與實(shí)現(xiàn) 311
12.6 組件事件與emit的實(shí)現(xiàn) 314
12.7 插槽的工作原理與實(shí)現(xiàn) 316
12.8 注冊(cè)生命周期 318
12.9 總結(jié) 320
第 13章 異步組件與函數(shù)式組件 322
13.1 異步組件要解決的問題 322
13.2 異步組件的實(shí)現(xiàn)原理 324
13.2.1 封裝defineAsyncComponent函數(shù) 324
13.2.2 超時(shí)與Error組件 325
13.2.3 延遲與Loading組件 328
13.2.4 重試機(jī)制 331
13.3 函數(shù)式組件 333
13.4 總結(jié) 335
第 14章 內(nèi)建組件和模塊 337
14.1 KeepAlive組件的實(shí)現(xiàn)原理 337
14.1.1 組件的激活與失活 337
14.1.2 include和exclude 342
14.1.3 緩存管理 343
14.2 Teleport組件的實(shí)現(xiàn)原理 346
14.2.1 Teleport組件要解決的問題 346
14.2.2 實(shí)現(xiàn)Teleport組件 347
14.3 Transition組件的實(shí)現(xiàn)原理 350
14.3.1 原生DOM的過渡 351
14.3.2 實(shí)現(xiàn)Transition組件 356
14.4 總結(jié) 360
第 15章 編譯器核心技術(shù)概覽 364
15.1 模板DSL的編譯器 364
15.2 parser的實(shí)現(xiàn)原理與狀態(tài)機(jī) 368
15.3 構(gòu)造AST 374
15.4 AST的轉(zhuǎn)換與插件化架構(gòu) 383
15.4.1 節(jié)點(diǎn)的訪問 383
15.4.2 轉(zhuǎn)換上下文與節(jié)點(diǎn)操作 387
15.4.3 進(jìn)入與退出 392
15.5 將模板AST轉(zhuǎn)為JavaScript AST 396
15.6 代碼生成 402
15.7 總結(jié) 407
第 16章 解析器 409
16.1 文本模式及其對(duì)解析器的影響 409
16.2 遞歸下降算法構(gòu)造模板AST 413
16.3 狀態(tài)機(jī)的開啟與停止 419
16.4 解析標(biāo)簽節(jié)點(diǎn) 426
16.5 解析屬性 430
16.6 解析文本與解碼HTML實(shí)體 436
16.6.1 解析文本 436
16.6.2 解碼命名字符引用 438
16.6.3 解碼數(shù)字字符引用 445
16.7 解析插值與注釋 449
16.8 總結(jié) 451
第 17章 編譯優(yōu)化 453
17.1 動(dòng)態(tài)節(jié)點(diǎn)收集與補(bǔ)丁標(biāo)志 453
17.1.1 傳統(tǒng)Diff算法的問題 453
17.1.2 Block與PatchFlags 454
17.1.3 收集動(dòng)態(tài)節(jié)點(diǎn) 457
17.1.4 渲染器的運(yùn)行時(shí)支持 459
17.2 Block樹 461
17.2.1 帶有v-if指令的節(jié)點(diǎn) 462
17.2.2 帶有v-for指令的節(jié)點(diǎn) 464
17.2.3 Fragment的穩(wěn)定性 465
17.3 靜態(tài)提升 466
17.4 預(yù)字符串化 468
17.5 緩存內(nèi)聯(lián)事件處理函數(shù) 469
17.6 v-once 470
17.7 總結(jié) 471
第 18章 同構(gòu)渲染 474
18.1 CSR、SSR以及同構(gòu)渲染 474
18.2 將虛擬DOM渲染為HTML字符串 478
18.3 將組件渲染為HTML字符串 484
18.4 客戶端激活的原理 489
18.5 編寫同構(gòu)的代碼 494
18.5.1 組件的生命周期 494
18.5.2 使用跨平臺(tái)的API 496
18.5.3 只在某一端引入模塊 496
18.5.4 避免交叉請(qǐng)求引起的狀態(tài)污染 497
18.5.5 組件 498
18.6 總結(jié) 499