描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111764595
几乎所有的APP都有搜索功能,做APP开发的团队几乎都会对搜索功能的实现有需求。不同的APP对搜索功能的要求不一样,在搜索功能落地过程中,遇到的具体问题也不一样。百度资深移动端搜索专家、15年搜索架构师撰写的这本书,从架构角度展开,对APP从出现到成长为可支持亿级用户的超级APP的完整实现过程和相关技术进行深度揭秘。书中不仅包括搜索功能的实现过程、方法,以及所涉及的核心技术和指标,还包括APP优化、迭代并成长为超级APP的方法。难能可贵的是,作者把自己在百度10余年做搜索的经验经过近2年的提炼,完美融合到了本书中。
这是一本以搜索业务为主线,深度解读超级App构建与优化的策略、流程、方法、技巧和作者近20年心得精华的著作。本书覆盖了App从诞生到成为超级App的过程中技术架构层面所面临的所有核心挑战及其解决思路。
本书作者是我国App研发领域的先行者(2005年正式进入App开发领域)。曾在百度负责多个App的技术架构构建,全程参与了百度App从诞生到发展至拥有上亿规模用户的全过程。本书是作者将近20年App研发经验和10余年百度搜索App开发经验的精华,是一本真正的干货集。
基础篇(第1~3章),从作者进入百度讲起,带领读者一步步走进搜索App的世界。这一篇通过简洁的语言和生动的案例,以“润物细无声”的方式读者帮建立起对搜索App的基础认知,包括百度App发展历程、典型App中搜索功能构建、搜索结果页和落地页技术实现、搜索服务端架构、搜索服务优化等特色内容,为读者学习后续内容打下坚实的基础。
高级篇(第4~12章), 围绕搜索全流程业务展开,包括搜索客户端中并行化响应输入的实现,以及可扩展网页(即功能插件化)、场景容器化、可定制安全策略、可持续优化指标、可统一管理网络通信、移动端AI预测、可变体发布及支持质效提的搜索客户端架构的设计与实现思路。通过本篇,读者可更深入理解搜索App的业务流程,掌握技术架构的工作原理,并学会如何将这些思想应用于相关的产品中。
个人成长篇(第13章),从团队协作、产品交付及技术架构优化这三个方面介绍个人的架构优化之路。这部分是作者10余年的工作经验和思考。
目 录 Contents
前言
基础篇
第1章 搜索客户端的发展与价值2
1.1 从我在百度的工作经历看搜索客户端架构演进2
1.1.1 从零构建搜索客户端App2
1.1.2 Ding:优化移动端搜索的高频搜索需求4
1.1.3 搜索 浏览双框架:优化移动端搜索过程的体验4
1.1.4 搜索结果NA化:优化移动端搜索结果浏览体验5
1.1.5 搜索异步化:优化搜索核心指标7
1.1.6 多容器管理:突破单浏览内核的限制8
1.1.7 变体发布:多App复用搜索能力9
1.1.8 小结10
1.2 移动操作系统级的搜索能力支持12
1.2.1 iOS系统搜索能力12
1.2.2 Android系统搜索能力13
1.2.3 小结14
1.3 App中的搜索功能建设15
1.3.1 京东App中的搜索功能15
1.3.2 微信App中的搜索功能16
1.3.3 快手App中的搜索功能17
1.3.4 有道词典App中的搜索功能17
1.3.5 招商银行App中的搜索功能18
1.3.6 夸克浏览器App中的搜索功能19
1.3.7 小结20
第2章 搜索客户端基础技术21
2.1 搜索全流程的3个核心场景21
2.2 需求输入场景及技术实现23
2.2.1 多线程技术24
2.2.2 网络请求24
2.2.3 搜索建议的数据处理25
2.3 结果页场景及技术实现28
2.3.1 数据持久化存取29
2.3.2 URL携带搜索关键字30
2.3.3 结果页的分类及加载31
2.4 落地页场景及技术实现32
2.4.1 落地页功能扩展32
2.4.2 落地页与结果页的切换管理33
2.5 移动客户端研发注意事项34
2.5.1 移动客户端与PC应用研发的区别34
2.5.2 移动客户端与云端服务研发的区别35
2.6 设计一份可落地的技术方案36
2.6.1 技术方案的辅助决策点评估37
2.6.2 技术方案优先处理原则38
第3章 搜索客户端基础服务40
3.1 搜索客户端协同的服务分类40
3.1.1 客户端运行时对接的服务40
3.1.2 搜索业务对接的服务42
3.2 从客户端的角度看搜索服务端架构43
3.2.1 内容的产生44
3.2.2 内容的去重46
3.2.3 内容的存储48
3.2.4 内容的检索53
3.2.5 搜索结果的产品化封装56
3.2.6 搜索过程客户端与服务端协作流程57
3.3 自有搜索客户端对搜索服务优化的支持58
高级篇
第4章 搜索客户端中并行化响应输入的实现62
4.1 并行化响应用户输入的意义62
4.1.1 搜索是强依赖输入的业务62
4.1.2 App可并行化响应用户输入的价值64
4.2 输入过程并行化任务的分类65
4.3 文本输入搜索过程的并行化任务与支持65
4.3.1 接收用户的文本输入65
4.3.2 处理用户的文本输入66
4.3.3 响应用户的文本输入68
4.3.4 文本输入过程并行化模型69
4.4 语音输入搜索过程的并行化任务与支持70
4.4.1 接收用户的语音输入70
4.4.2 处理用户的语音输入72
4.4.3 响应用户的语音输入73
4.4.4 语音输入过程并行化模型73
4.5 图像输入搜索过程的并行化任务与支持75
4.5.1 接收用户的图像输入75
4.5.2 处理用户的图像输入76
4.5.3 响应用户的图像输入78
4.5.4 图像输入的业务流程支持80
4.5.5 图像输入的服务依赖保障80
4.5.6 图像输入过程并行化模型81
4.6 网页浏览过程的多进程模型85
4.6.1 Networking进程86
4.6.2 WebContent进程86
4.6.3 UI进程简介87
4.7 并行化实现的3个条件87
第5章 设计可扩展网页能力的搜索客户端架构89
5.1 搜索客户端实现网页能力扩展的意义89
5.1.1 基本概念及互通模型90
5.1.2 搜索客户端支持网页扩展及互通的价值91
5.2 使用基础API支持网页浏览91
5.2.1 请求加载新页面91
5.2.2 同步网页加载状态93
5.2.3 管理网页加载状态97
5.2.4 切换页面浏览历史98
5.2.5 响应页面浏览滑动事件99
5.2.6 定制手势响应快捷指令100
5.2.7 关联规则过滤网页内容100
5.3 定义数据通路标准扩展网页能力101
5.3.1 关联Custom URL scheme实现URL调用101
5.3.2 通过JS实现NA功能与网页对话104
5.3.3 接管网络请求实现数据互通105
5.3.4 同步Cookie变化实现状态统一106
5.4 NA与网页互通的能力总览108
5.4.1 网页加载过程互通108
5.4.2 网页浏览交互互通109
5.4.3 网页数据通信互通110
5.5 管理多种浏览内核共存110
5.5.1 针对多种浏览内核的约束111
5.5.2 以系统浏览内核为基点进行扩展113
5.6 以插件的形式扩展网页功能114
5.6.1 网页场景插件化模型115
5.6.2 功能插件管理、调用及事件响应117
5.6.3 网页场景使用插件管理框架120
第6章 设计场景容器化的搜索客户端架构122
6.1 构建多容器管理机制的意义122
6.1.1 单浏览内核管理框架面临的挑战122
6.1.2 构建多容器管理机制的必要性123
6.2 多容器管理框架的核心能力及收益124
6.2.1 多容器管理框架核心能力对齐124
6.2.2 多容器管理框架核心能力模型126
6.2.3 多容器管理框架的收益预估126
6.3 框架升级潜在风险及解决128
6.3.1 并行研发的影响128
6.3.2 Web生态标准的兼容130
6.3.3 页面加载速度指标劣化134
6.4 容器生命周期管理能力建设134
6.4.1 抽象容器的基本生命周期事件134
6.4.2 统一容器生成入口和数据结构135
6.4.3 资源消耗和收益的平衡135
6.4.4 小结138
6.5 容器的展现及事件管理能力建设139
6.5.1 容器的视图展现管理139
6.5.2 容器的视图生命周期事件管理140
6.5.3 容器及框架的手势事件管理142
6.5.4 小结143
6.6 容器的浏览历史管理能力建设143
6.6.1 容器浏览历史的操作144
6.6.2 容器浏览历史条目的存储146
6.6.3 小结147
6.7 多容器管理框架的应用148
6.7.1 容器接入多容器管理框架148
6.7.2 打开新页面时的框架处理逻辑149
6.7.3 页面历史切换及优先级处理逻辑150
6.7.4 容器的销毁与恢复逻辑151
6.8 网页加载性能指标优化152
6.8.1 通过预创建容器优化容器创建的耗时152
6.8.2 通过预加载优化静态资源加载耗时153
6.8.3 通过实现预渲染优化页面整体耗时154
6.8.4 小结155
第7章 设计可定制安全策略的搜索客户端架构156
7.1 搜索客户端可定制安全策略的意义156
7.1.1 移动生态和法律法规中的安全相关标准157
7.1.2 客户端是产品提供服务的第一层158
7.1.3 客户端具备实时发现及干预安全问题的条件159
7.2 网络通信安全保障160
7.2.1 域名解析安全问题及解决方法160
7.2.2 数据传输安全问题及解决方法160
7.2.3 网络安全的技术架构支持162
7.3 网页浏览安全防护162
7.3.1 网页内容安全问题及解决方法163
7.3.2 网页互通安全问题及解决方法165
7.3.3 网页浏览安全的技术架构支持166
7.4 自有服务安全共建166
7.4.1 识别自有客户端并实现差异化服务166
7.4.2 关键请求不可重放167
7.4.3 安全策略要尽早推进168
7.5 用户信息安全保护168
7.5.1 历史数据的读取与技术实现建议169
7.5.2 实时数据的读取与技术实现建议170
7.5.3 用户信息安全的技术实现原则171
7.6 技术复用安全管理171
7.6.1 第三方技术引进安全评估172
7.6.2 自研技术输出安全定制174
第8章 设计可持续优化指标的搜索客户端架构176
8.1 客户端指标可持续优化的意义176
8.2 客户端常见指标简介177
8.2.1 安装包体积指标及优化177
8.2.2 启动速度指标及优化177
8.2.3 加载速度指标及优化178
8.2.4 白屏率指标及优化178
8.2.5 卡顿率指标及优化179
8.2.6 崩溃率指标及优化179
8.2.7 磁盘空间指标及优化179
8.2.8 通用业务指标及优化180
8.3 客户端指标优化基础能力构建180
8.3.1 分组样本设定能力的构建180
8.3.2 数据收集能力的构建184
8.4 客户端指标优化方法及应用187
8.4.1 制定标准188
8.4.2 指标建设189
8.4.3 数据收集192
8.4.4 数据分析193
8.4.5 指标优化196
8.4.6 指标评估199
8.4.7 指标监控200
第9章 设计可统一管理网络通信的搜索客户端架构201
9.1 网络通信可统一管理的意义201
9.2 网络通信优化的实际应用价值203
9.2.1 语音搜索的网络通信管理203
9.2.2 网页场景功能的网络通信管理209
9.3 浏览内核的网络通路实现与功能扩展管理211
9.3.1 浏览内核的网络请求拦截212
9.3.2 网络通路的工作流程213
9.3.3 网络通路中的功能扩展管理214
9.4 统一管理网络通信及分层设计221
9.4.1 系统层的职责与边界221
9.4.2 桥接层的职责与边界222
9.4.3 支持层的职责与边界222
9.4.4 调度层的职责与边界225
9.4.5 接口层的职责与边界227
9.5 业务实现层的网络能力隔离227
9.5.1 依赖浏览内核构建的业务实现分层228
9.5.2 不依赖浏览内核构建的业务实现分层228
第10章 设计可支持移动端AI预测的搜索客户端架构230
10.1 客户端可支持移动端AI预测的意义230
10.1.1 基本概念及关系231
10.1.2 编程方式的演进:从传统编程到人工智能233
10.1.3 客户端使用移动端AI预测与服务端AI预测的对比234
10.2 客户端支持移动端AI预测的挑战235
10.3 模型管理框架实现237
10.3.1 模型管理服务端支持237
10.3.2 模型管理框架客户端实现239
10.3.3 模型管理框架的应用示例243
10.4 特征管理框架实现244
10.4.1 特征分类及框架依赖245
10.4.2 特征复用及框架支持245
10.4.3 特征缓存及框架支持247
10.4.4 特征收集及框架支持248
10.4.5 特征管理框架应用示例249
10.5 移动端AI预测技术支持框架的应用250
10.5.1 构建新业务时的支持250
10.5.2 优化已有业务的支持251
第11章 设计可变体发布的搜索客户端架构253
11.1 App支持可变体发布的意义253
11.1.1 初识矩阵App254
11.1.2 App支持变体发布的价值255
11.2 App支持变体发布的前置依赖256
11.2.1 基础概念及关系256
11.2.2 模块级复用与App级复用258
11.2.3 矩阵App复用主线App的方式260
11.3 变体发布的核心技术问题及解决264
11.3.1 控制反转服务264
11.3.2 组件的裁剪支持266
11.3.3 组件的修改支持266
11.4 搜索业务可变体发布的技术框架支持268
11.4.1 典型搜索业务特征和技术架构268
11.4.2 服务动态化269
11.4.3 场景容器化272
11.4.4 功能插件化273
11.4.5 端云一体化输出275
11.4.6 小结276
11.5 模块拆分与变体发布支持277
11.5.1 模块的分级及约束277
11.5.2 模块拆分的决策依据279
11.5.3 组件标准化输出280
11.6 主线App支持变体发布要遵循的原则281
11.6.1 接口稳定原则282
11.6.2 最小接口公开原则282
11.6.3 有序依赖原则283
11.6.4 无无用依赖原则283
11.6.5 无隐式依赖原则284
11.6.6 无传递依赖原则285
11.6.7 无循环依赖原则287
11.6.8 命名唯一原则289
11.6.9 配置项归属唯一原则290
11.6.10 资源归属唯一原则290
第12章 设计可支持质效提升的搜索客户端架构291
12.1 架构与研发质效的关系291
12.1.1 我对研发质效的理解292
12.1.2 我对架构目标的理解292
12.1.3 我看到的架构对质效的影响292
12.2 提升研发过程的效率294
12.2.1 子系统独立迭代294
12.2.2 业务可脱机调试297
12.2.3 任务自动化执行支持299
12.2.4 流程自动化工具建设302
12.3 降低异常产生的概率304
12.3.1 降低内部因素产生的异常304
12.3.2 降低外部因素产生的异常306
12.4 降低异常产生的影响309
12.4.1 发现异常的能力的构建309
12.4.2 解决异常的能力的构建311
12.4.3 降低异常概率/影响的设计思路312
个人成长篇
第13章 设计自己的架构优化之路314
13.1 快速融入团队的7个因素314
13.2 实现有效交付的7个节点317
13.3 持续优化技术架构的7个思维方式321
前 言
为什么要写这本书
在当今数字化时代,App已经成为人们日常生活中不可或缺的一部分。而一个优秀的 App,往往需要一个高效、稳定、安全的技术架构作为支撑,同时搜索功能也成为大多数App的标配。
2023年年底,我从百度公司离职。算起来,我在百度工作了整整13年。在这13年里,我从一名研发工程师晋升为资深研发工程师;技术水平从只了解一门编程语言到熟悉整个业务和生态;工作方式从独自写代码转变为多人跨地域、跨部门协同;思维方式也从接受需求、编写功能点,逐渐转变为主动思考问题、解决问题并推动事情落地。
非常幸运的是,在百度的这13年里,我参与并负责了多个与搜索有关的App从无到有的构建过程,也见证了百度App用户规模从万级到亿级、客户研发团队从几人到数百人的发展和变化。这个过程既充满挑战,也蕴含机遇,让我能够将对技术架构的理解付诸实践,从而使我更加深入地了解App中的技术架构是如何支持App搜索业务的,以及应该如何对App的技术架构进行优化。
故我撰写本书有两个目标:第一个目标是梳理自己在参与及负责的多个App架构优化工作中遇到的挑战、思考过程以及实际成效,作为对自己在百度工作13年的总结;第二个目标是希望把这些经验分享出来,与所有相关人员进行思想上的交流,因为在App从无到有以及到拥有上亿级用户规模的过程中,不同的App所采用的技术路径是相似的。
读者对象
这是一本专注于搜索业务全流程技术实现的书籍,重点介绍了App中搜索系统在不同阶段的架构设计及实现。无论你是初入行业的新手还是经验丰富的技术专家,或是对技术有浓厚兴趣的读者,本书都将为你提供有价值的知识和实用的指导。本书特别适合以下人员阅读。
从事移动搜索业务的人员:包括测试人员、产品经理、前端工程师及后端工程师等。本书重点介绍了与搜索App技术架构相关的知识,可以帮助这些人员更好地理解客户端中的技术架构和设计应用架构。
移动应用开发者:对于移动应用开发者,本书提供深入的技术架构设计和实践经验,可以帮助开发者构建更加有效、可用的App技术架构。
技术经理和团队领导:本书包含在解决问题时对技术选择的思考,这部分内容可以帮助负责管理技术团队和项目的人员做出明智的决策。
计算机相关专业的学生和学者:本书可作为计算机科学、软件工程等相关专业的学生和研究人员学习搜索App开发、App优化的参考书籍,可以帮助他们深入了解App技术架构的实际应用和研究方向。
对搜索App或App中搜索功能的实现感兴趣的人员:本书能够帮助这部分人员从更全面的视角了解搜索系统架构的原理、重要性和演化趋势。
本书特色
本书是对我从无到有构建多个App技术架构和重构优化超级App技术架构的实践经验的高度总结,在介绍不同架构如何实现的同时,还介绍了当时的背景及实践的流程,目的是让广大读者用更少的时间,在真实的业务场景中学习并吸收我13年工作经验的精华。
本书中不仅有具体的技术实现细节,还有我对具体问题的深度思考,这些思考不仅可以帮助读者知道怎么做,还能知道为什么这么做,进而让读者实现举一反三,轻松应对所有同类问题。
本书兼顾广度和深度,既覆盖了搜索App设计的全部关键环节,又直指问题本质。
虽然本书是以搜索App为主进行讲解的,但是其中的方法和思想可以沿用到其他App产品的设计中,而且可以覆盖技术架构师、开发人员、管理人员和项目经理等多个人群。
如何阅读本书
本书共三篇。
基础篇(第1~3章),简要介绍了搜索客户端的发展与价值、基础技术及基础服务,目的是帮助读者了解基础知识,为学习本书后续内容做铺垫。
高级篇(第4~12章),根据搜索全流程业务的需要,围绕输入并行化、可扩展网页能力、场景容器化、安全策略制定、核心指标持续优化、网络统一管理、移动端AI预测、App可变体发布及支持质效提升等 9 个维度,着重讲解了App技术架构的实现与思考。
个人成长篇(第13章),通过融入团队、有效交付及持续优化3个维度,介绍如何与团队、业务及技术融合,构建个人的架构优化之路。
如果你对搜索的业务流程、基础技术及服务端依赖比较了解,可以直接从高级篇开始阅读。但如果你是初学者,请一定从第1章开始学习。
致谢
首先感谢百度这个平台。百度有良好的技术及实践氛围,这让我可以长期专注于研发工作并积累与App架构设计相关的知识,这也是本书的内容能做到丰富和深入的基础。
感谢刘艳红、Proteas、姬路涛、刘爽、谢柏渊、马光潇对本书进行审阅,他们提出了许多宝贵的建议。
感谢《Java加密与解密的艺术》的作者梁栋的引荐,在他的努力下才促成了这本书的合作与出版。
最后,感谢妻子和女儿在我写书期间给予的理解与支持。写书占用了一些亲子时光。记得那时,女儿经常跑过来找我一起玩,看到我坐在计算机前,她总是懂事地说一句:“爸爸在写书呢!”然后就跑开了。
谨以本书献给我最亲爱的家人、好友和我在百度工作的13年中一起合作过的伙伴们!
评论
还没有评论。