本书共分8部分,涵盖33个主题,内容涉及JavaScript基础强化、JavaScript语言进阶、不可忽视的HTML和CSS、前端框架、前端工程化、性能优化、编程思维和算法、网络知识等,聚焦前端开发基础知识和进阶技能,关注前端工程化和体系化,结构清晰,循序渐进,深入浅出。在重构基础知识方面,本书将标准规范和实践代码相结合。在培养进阶技能方面,本书深度剖析了技术背后的原理和哲学。书中列举的项目设计案例涵盖了许多经典面试题目,不仅能帮助初级开发者夯实基础,还能为中、高级开发者突破瓶颈提供帮助和启发。
侯策,曾先后就职于法国ENGIE集团、百度等国内外知名互联网企业,具有丰富的开发经验和团队管理经验。曾担任GIAC全球互联网架构大会演讲嘉宾,FDCon2019中国前端开发者千人峰会演讲嘉宾。著有《React状态管理与同构实战》一书。
第一部分 JavaScript基础强化
01 一网打尽this,对执行上下文说Yes 2
this到底指向谁 2
实战例题分析 3
开放例题分析 12
总结 13
02 “老司机”也会在闭包上翻车 14
基本知识 14
例题分析 32
总结 35
03 我们不背诵API,只实现API 36
jQuery offset方法实现 36
数组reduce方法的实现 40
实现compose方法的几种方案 45
apply、bind进阶实现 48
总结 52
04 JavaScript高频考点及基础题库 53
JavaScript数据类型及其判断 53
JavaScript数据类型及其转换 57
JavaScript函数参数传递 60
cannot read property of undefined问题解决方案 61
type.js源码解读 63
总结 65
第二部分 JavaScript语言进阶
05 异步不可怕,“死记硬背”+实践拿下 68
异步流程初体验 68
红绿灯任务控制 74
请求图片进行预先加载 76
setTimeout相关考查 79
宏任务和微任务 82
总结 85
06 你以为我真的想让你手写Promise吗 86
从“Promise化”一个API谈起 86
Promise初见雏形 88
Promise实现状态完善 91
Promise异步实现完善 93
Promise细节完善 97
Promise then的链式调用 100
链式调用的初步实现 101
链式调用的完善实现 106
Promise穿透实现 115
Promise静态方法和其他方法实现 116
总结 120
07 面向对象和原型——永不过时的话题 121
实现new没有那么容易 121
如何优雅地实现继承 123
jQuery中的对象思想 130
类继承和原型继承的区别 133
面向对象在实战场景中的应用 134
总结 136
08 究竟该如何学习与时俱进的ES 137
添加新特性的必要性 137
学习新特性的正确“姿势” 139
新特性可以做些什么有趣的事 141
Babel编译对代码做了什么 145
总结 150
第三部分 不可忽视的HTML和CSS
09 前端面试离不开的“面子工程” 152
如何理解HTML语义化 152
BFC背后的布局问题 155
通过多种方式实现居中 162
总结 167
10 进击的HTML和CSS 168
进击的HTML 168
不可忽视的Web components 171
移动端HTML5注意事项总结 171
CSS变量和主题切换优雅实现 174
CSS Modules理论和实战 178
总结 184
11 响应式布局和Bootstrap的实现分析 185
上帝视角——响应式布局适配方案 185
真实线上适配案例分析 187
Bootstrap栅格实现思路 192
横屏适配及其他细节问题 194
面试题:%相对于谁 195
深入:flex布局和传统布局的性能对比 197
总结 200
第四部分 前端框架
12 触类旁通多种框架 202
响应式框架基本原理 202
模板编译原理介绍 211
发布/订阅模式简单应用 214
MVVM融会贯通 215
揭秘虚拟DOM 216
总结 226
13 你真的懂React吗 227
神奇的JSX 227
你真的了解异步的this.setState吗 232
原生事件和React合成事件 234
请不要再背诵diff算法了 236
element diff的那些事儿 237
加上key就一定“性能最优”吗 238
总结 239
14 揭秘React真谛:组件设计 240
单一职责没那么简单 240
组件通信和封装 246
组合性是灵魂 248
副作用和(准)纯组件 250
组件可测试性 254
组件命名是意识和态度问题 257
总结 258
15 揭秘React真谛:数据状态管理 259
数据状态管理之痛 259
Redux到底怎么用 262
Redux的“罪与罚” 268
我们到底需要怎样的数据状态管理 270
总结 272
16 React的现状与未来 273
React现状分析 273
从React Component看React发展史 274
颠覆性的React hook 277
值得关注的其他React特性 282
总结 284
17 同构应用中你所忽略的细节 285
打包环境区分 285
注水和脱水 287
请求认证处理 292
样式问题处理 293
meta tags渲染 295
404处理 296
安全问题 297
性能优化 297
总结 298
18 通过框架和类库,我们该学会什么 299
React和Vue:神仙打架 299
新版本发布的思考 302
从框架再谈基础 304
总结 304
第五部分 前端工程化
19 深入浅出模块化 306
模块化简单概念 306
模块化发展历程 307
ES原生时代 314
未来趋势和思考 316
总结 318
20 webpack工程师和前端工程师 319
webpack到底将代码编译成了什么 319
webpack工作基本原理 327
探秘并编写webpack loader 330
探秘并编写webpack plugin 336
webpack和Rollup 341
综合运用 342
总结 344
21 前端工程化背后的项目组织设计 345
大型前端项目的组织设计 345
使用Lerna实现monorepo 347
分析一个项目迁移案例 350
依赖关系简介 353
复杂依赖关系分析和处理 354
使用yarn workspace管理依赖关系 356
总结 359
22 代码规范工具及技术设计 360
自动化工具巡礼 360
工具背后的技术原理和设计 367
自动化规范与团队建设 376
总结 378
第六部分 性能优化
23 性能监控和错误收集与上报 380
性能监控指标 380
FMP的智能获取算法 383
性能数据获取 384
错误信息收集 390
性能数据和错误信息上报 401
无侵入和性能友好的方案设计 404
总结 405
24 如何解决性能优化问题 406
开放例题实战 406
代码例题实战 410
总结 416
25 以React为例,谈谈框架和性能 417
框架的性能到底指什么 417
React的虚拟DOM diff 418
提升React应用性能的建议 419
React性能设计亮点 426
从Vue 3.0动静结合的Dom diff谈起 427
总结 436
第七部分 编程思维和算法
26 揭秘前端设计模式 438
设计模式到底是什么 438
设计模式原则 439
设计模式的3大类型和23种套路 440
总结 441
27 无处不在的数据结构 442
数据结构和学习方法概览 442
栈和队列 443
链表 446
链表实现 448
树 454
图 461
散列表(哈希表) 467
散列表的实现 472
总结 474
28 古老又新潮的函数式 475
函数式和高质量函数 475
柯里化分析 479
偏函数 485
总结 488
29 那些年常考的前端算法 489
前端和算法 489
算法的基本概念 490
V8 引擎中排序方法的奥秘和演进 491
快速排序和插入排序 491
排序的稳定性 498
Timsort实现 499
实战 500
算法学习 513
总结 518
30 分析一道常见面试题 519
题意分析 519
思路与解答 521
再谈流程控制和中间件 523
总结 534
第八部分 网络知识
31 缓存谁都懂,一问都发蒙 536
缓存概念与分类 536
流程图 538
缓存和浏览器操作 539
缓存相关面试题目 539
缓存实战 540
实现一个验证缓存的轮子 551
总结 554
32 HTTP的深思 555
HTTP的诞生 555
HTTP的现状和痛点 555
HTTP 2.0未来已来 557
从实时通信系统看HTTP发展 559
相关深度面试题目 560
总结 561
33 不可忽视的前端安全:单页应用鉴权设计 562
单页应用鉴权简介 562
单页应用鉴权实战 565
采用Authentication cookie实现鉴权 567
混合使用JWT和cookie进行鉴权 568
总结 571
结束语 572