具体描述
性能对用户体验有着至关重要的影响。本书将介绍对用户体验产生负面影响的各个方面,并概述如何优化iOS应用的性能。全书共5个部分,主要从性能的衡量标准、对应用至关重要的核心优化点、iOS应用开发特有的性能优化技术以及性能的非代码方面,讲解了应用性能的优化问题。本书的主要目的是展示如何从工程学的角度编写最优代码。本书适合已经具有Objective-C和iOS实践经验的开发人员阅读。
作者简介
作者简介:
Gaurav Vaish 就职于雅虎公司的移动和新兴产品团队,为每月有数亿人使用的移动应用创建优雅的可重用方案。他曾是IIT全球指导计划的成员,还在印度班加罗尔创立了InColeg Learning及Edujini Labs有限公司。
译者简介:
梁士兴 毕业于北京航空航天大学,现任职美团-大众点评iOS高级技术专家。有多年的一线iOS开发经验,对于iOS应用性能有深入研究和独到见解。对iOS前沿技术、移动应用架构模式非常感兴趣。
郝田田 毕业于西安电子科技大学,现任职美团-大众点评iOS研发工程师,具有丰富的iOS软件开发经验,长期关注iOS领域前沿技术,曾参与数本iOS技术类书籍翻译工作。
陈作君 毕业于北京理工大学,现任职滴滴出行iOS研发工程师,多年大型移动端应用开发经验,热衷于开源项目建设,是一名技术书籍翻译的爱好者。
目录信息
前言 xvii
第一部分 开始
第1章 移动应用的性能 3
1.1 定义性能 3
1.2 性能指标 4
1.2.1 内存 4
1.2.2 电量消耗 4
1.2.3 初始化时间 4
1.2.4 执行速度 5
1.2.5 响应速度 5
1.2.6 本地存储 5
1.2.7 互操作性 6
1.2.8 网络环境 7
1.2.9 带宽 7
1.2.10 数据刷新 8
1.2.11 多用户支持 8
1.2.12 单点登录 9
1.2.13 安全 9
1.2.14 崩溃 10
1.3 应用性能分析 10
1.3.1 采样 10
1.3.2 埋点 10
1.4 测量 11
1.4.1 设置工程与代码 11
1.4.2 设置崩溃报告 12
1.4.3 对应用埋点 13
1.4.4 日志 17
1.5 小结 19
第二部分 核心优化
第2章 内存管理 23
2.1 内存消耗 23
2.1.1 栈大小 24
2.1.2 堆大小 25
2.2 内存管理模型 27
2.3 自动释放对象 28
2.4 自动释放池块 30
2.5 自动引用计数 32
2.6 引用类型 35
2.6.1 变量限定符 36
2.6.2 属性限定符 37
2.7 实践环节 38
2.7.1 照片模型 38
2.7.2 更新故事板 38
2.7.3 方法实现 39
2.7.4 输出分析 41
2.8 僵尸对象 42
2.9 内存管理规则 43
2.10 循环引用 43
2.10.1 避免循环引用的规则 45
2.10.2 循环引用的常见场景 46
2.10.3 观察者 56
2.10.4 返回错误 59
2.11 弱类型:id 59
2.12 对象寿命与泄漏 61
2.13 单例 62
2.14 找到神秘的持有者 64
2.15 最佳实践 65
2.16 生产环境的内存使用情况 66
2.17 小结 67
第3章 能耗 68
3.1 CPU 68
3.2 网络 70
3.3 定位管理器和GPS 73
3.3.1 最佳的初始化 74
3.3.2 关闭无关紧要的特性 75
3.3.3 只在必要时使用网络 76
3.3.4 后台定位服务 77
3.3.5 NSTimer、NSThread 和定位服务 77
3.3.6 在应用关闭后重启 78
3.4 屏幕 78
3.4.1 动画 78
3.4.2 视频播放 78
3.4.3 多屏幕 79
3.5 其他硬件 83
3.6 电池电量与代码感知 83
3.7 分析电量使用 85
3.8 最佳实践 86
3.9 小结 88
第4章 并发编程 89
4.1 线程 89
4.2 线程开销 90
4.2.1 内核数据结构 90
4.2.2 栈空间 90
4.2.3 创建耗时 90
4.3 GCD 91
4.4 操作与队列 92
4.5 线程安全的代码 93
4.5.1 原子属性 93
4.5.2 同步块 94
4.5.3 锁 96
4.5.4 将读写锁应用于并发读写 100
4.5.5 使用不可变实体 102
4.5.6 使用集中的状态更新服务 106
4.5.7 状态观察者与通知 110
4.5.8 异步优于同步 114
4.6 小结 116
第三部分 iOS 性能
第5章 应用的生命周期 119
5.1 应用委托 119
5.2 应用启动 121
5.2.1 首次启动 123
5.2.2 冷启动 129
5.2.3 热启动 135
5.2.4 升级后启动 137
5.3 推送通知 138
5.3.1 远程通知 138
5.3.2 本地通知 141
5.4 后台拉取 142
5.5 小结 144
第6章 用户界面 145
6.1 视图控制器 146
6.1.1 视图加载 149
6.1.2 视图层级 150
6.1.3 视图可见性 152
6.2 视图 154
6.2.1 UILabel 155
6.2.2 UIButton 156
6.2.3 UIImageView 157
6.2.4 UITableView 158
6.2.5 UIWebView 161
6.2.6 自定义视图 164
6.3 自动布局 170
6.4 尺寸类别 171
6.5 iOS 8 中新的交互特性 175
6.5.1 交互式通知 175
6.5.2 应用扩展 176
6.6 小结 179
第7章 网络 180
7.1 指标和测量 180
7.1.1 DNS 查找时间 181
7.1.2 SSL 握手时间 182
7.1.3 网络类型 183
7.1.4 延迟 188
7.1.5 网络API 190
7.2 应用部署 190
7.2.1 服务器 191
7.2.2 请求 191
7.2.3 数据格式 192
7.3 工具 193
7.3.1 网络链接调节器 193
7.3.2 AT & T 应用资源优化器 194
7.3.3 Charles 196
7.4 小结 199
第8章 数据共享 200
8.1 深层链接 200
8.2 剪贴板 205
8.3 共享内容 208
8.3.1 文档交互 209
8.3.2 活动 215
8.4 iOS 8 扩展 217
8.4.1 配置操作扩展和共享扩展 219
8.4.2 操作扩展 220
8.4.3 共享扩展 221
8.4. 4 文档提供者扩展 223
8.4.5 应用群组 228
8.5 小结 230
第9章 安全 231
9.1 应用访问 232
9.1.1 匿名访问 232
9.1.2 认证访问 234
9.2 网络安全 237
9.2.1 使用HTTPS 237
9.2.2 使用证书锁定 238
9.3 本地存储 242
9.4 数据共享 248
9.5 安全和应用性能 248
9.6 清单 248
9.7 小结 250
第四部分 代码之外
第10章 测试及发布 253
10.1 测试类型 253
10.2 定义 254
10.3 单元测试 255
10.3.1 设置 255
10.3.2 编写单元测试 256
10.3.3 代码覆盖率 258
10.3.4 异步操作 262
10.3.5 Xcode 6 福利:性能单元测试 263
10.3.6 模拟依赖 265
10.3.7 其他框架 268
10.4 功能测试 268
10.4.1 设置 269
10.4.2 编写功能测试 271
10.4.3 工程结构 273
10.5 隔离依赖 274
10.6 测试及组件设计 275
10.7 持续集成与自动化 277
10.8 最佳实践 278
10.9 小结 282
第11章 工具 283
11.1 Accessibility Inspector 283
11.1.1 Xcode Accessibility Inspector 284
11.1.2 iOS Accessibility Inspector 285
11.2 Instruments 288
11.2.1 使用Instruments 289
11.2.2 活动监视器 291
11.2.3 内存分配 292
11.2.4 内存泄漏 295
11.2.5 网络 296
11.2.6 时间分析器 297
11.3 Xcode 视图调试器 298
11.4 PonyDebugger 300
11.5 Charles 304
11.6 小结 309
第12章 埋点与分析 310
12.1 词汇 310
12.2 埋点 312
12.2.1 规划 312
12.2.2 实现 314
12.2.3 部署 316
12.3 分析 317
12.4 真实用户监控 317
12.4.1 分析与真实用户监控对比 317
12.4.2 使用真实用户监控 318
12.5 小结 318
第五部分 iOS 9
第13章 iOS 9 321
13.1 应用的生命周期 321
13.1.1 通用链接 322
13.1.2 搜索 324
13.1.3 搜索最佳实践 328
13.2 用户界面 329
13.2.1 UIKit 框架 330
13.2.2 Safari 服务框架 332
13.3 扩展 335
13.3.1 内容拦截扩展 336
13.3.2 Spotlight 索引扩展 338
13.4 应用瘦身 339
13.4.1 分割 339
13.4.2 按需加载资源 340
13.4.3 bitcode 343
13.5 小结 344
第14章 iOS 10 345
14.1 Siri 扩展 346
14.2 改进的通知 348
14.2.1 申请权限 348
14.2.2 触发器 348
14.2.3 为通知添加交互 349
14.2.4 完全自定义展示通知 350
14.2.5 通知服务扩展 352
14.3 iMessage 扩展 354
14.4 VoIP 支持 357
作者介绍 359
封面介绍 359
· · · · · · (收起)
读后感
用户评价
我不得不说,《高性能Web前端架构与优化》这本书的视角非常独特,它完全颠覆了我对前端性能优化的传统认知。通常我们谈性能,无非是压缩代码、图片优化、懒加载那一套。但这本书记载的远不止于此,它把性能优化拉升到了“系统工程”的高度。作者的切入点非常犀利,直接聚焦于“用户感知的延迟”和“资源获取的瓶颈”。让我眼前一亮的是关于Critical Rendering Path(关键渲染路径)的深入解析。他不仅仅是解释了浏览器如何构建DOM和CSSOM,而是详细剖析了不同资源加载策略(如预加载、预读取、DNS预解析)对路径长度的实际影响,甚至展示了如何通过精确控制资源加载的优先级,将“白屏时间”缩短到毫秒级。此外,书中对现代Web API(如Service Worker和WebAssembly)在提升离线体验和计算密集型任务处理方面的潜力挖掘,也极其到位。它不是告诉你“应该做什么”,而是告诉你“为什么这样做能更快”,这种底层逻辑的解释,让优化策略的选择有了坚实的理论基础,而非简单的经验主义。
我对《现代操作系统原理与实践》这本书的评价,必须从它那近乎偏执的严谨性说起。市面上很多操作系统书籍,要么过于理论化,充斥着大量复杂的公式推导,让人望而却步;要么又过于浅尝辄止,只停留在表面的概念介绍。而这本书巧妙地找到了一个完美的平衡点。作者似乎有着一种将复杂系统拆解成最小可理解单元的魔力。举例来说,在讲解进程间通信(IPC)时,他不仅详细对比了信号量、消息队列、共享内存的效率和适用场景,还附带了基于Linux内核源码的片段分析,展示了操作系统在真正实现这些机制时的权衡取舍。我尤其欣赏其中关于调度算法的章节,它没有仅仅停留在理论上的“公平性”和“响应时间”的讨论,而是引入了现代服务器负载的实际模型,说明为什么在某些高并发场景下,传统的优先级抢占模型会暴露出性能瓶颈,并提出了作者自己的优化思路。这本书的价值在于,它教会你如何“思考”操作系统,而不是仅仅“背诵”操作系统的知识点。读完后,我对系统调优的理解上升到了一个新的高度,能够预判出不同操作在内核层面的实际开销。
对于《深入理解数据库事务与并发控制》这本书,我的感受可以用“剥茧抽丝”来形容。数据库理论是枯燥的代名词,但作者却能将事务的四大特性(ACID)讲得如同精彩的侦探故事一般扣人心弦。他没有满足于教科书上对隔离级别的定义,而是深入剖析了每个隔离级别下,数据库引擎是如何通过锁(行锁、间隙锁、临界区锁)和多版本并发控制(MVCC)来实现隔离性的,以及每种实现方式带来的性能开销和潜在的死锁风险。尤其是关于MVCC的讲解,作者绘制的清晰状态图,配合具体的事务序列实例,让我彻底明白了快照读和当前读的本质区别,这是我之前阅读其他资料时始终未能完全把握的难点。书中后半部分关于锁的粒度和活锁、饥饿等高级问题的讨论,更是体现了作者深厚的实战经验。这本书的价值在于,它不仅教会你如何配置事务的隔离级别,更重要的是,它让你理解了配置背后的代价和权衡,从而能为实际应用场景做出最明智的性能与一致性决策。
《分布式系统架构设计精要》这本书,给我的感觉更像是一本经验丰厚的架构师的“手术刀”。它不像一些入门书籍那样,一上来就抛出CAP理论、BASE原则等高屋建瓴的概念。相反,它直接将我们带入到处理真实世界难题的第一线。作者极其擅长在矛盾中寻找最优解。比如,在处理数据一致性问题时,书中用了一个跨洋电商平台的订单同步案例,清晰地展示了“最终一致性”在实际业务场景中可能引发的灾难,以及如何通过引入“版本号+时间戳”的组合策略来规避这些风险。最让我印象深刻的是关于分布式事务处理的章节,它没有固守“两阶段提交”的传统论调,而是深入探讨了TCC(Try-Confirm-Cancel)模式在微服务环境下的适用性、实现难点以及补偿机制的设计哲学。这本书的叙事风格是那种沉稳而有力的,每一步推导都建立在对前一步实践的深刻反思之上,让人读起来充满了被引导和启迪的感觉。对于任何一个正在设计或维护大规模在线服务的人来说,这本书是避坑指南和加速器并存的宝典。
初次捧读这本《深入理解C++编程艺术》,实在是被其开篇的哲学思辨所吸引。作者并非简单罗列语法规则,而是将C++的每一个特性都置于计算机科学的宏大背景下进行剖析。尤其是关于模板元编程那几章,简直是一场智力的冒险。他没有用晦涩的术语堆砌,而是通过一系列精心设计的比喻,将那些原本只存在于纸面上的抽象概念,生生地拉到了读者眼前。我记得有一个关于类型萃取(Type Traits)的例子,作者用“炼金术士的秘方”来比喻,形象地说明了如何在编译期洞察类型的本质。这种对底层机制的深刻洞察力,让我感觉自己不再是那个只会调用API的“调用者”,而是真正开始理解“创造者”思维的人。阅读过程中,我常常需要停下来,反复咀嚼那些看似简单的段落,因为每一个字似乎都蕴含着作者多年实践的智慧结晶。对于那些希望从“会用”C++到“精通”C++的开发者来说,这本书绝对是不可多得的内功心法。它不是一本速成手册,而更像是一份需要时间去品味、去实践的武林秘籍,每一次重读都会有新的领悟。
一般般,总共360页内容包含14章,这一点就注定没法写深入的内容。涉及到的面很广,但是讲的都很浅,对中级以上的开发者来说,没太大帮助,愧对中文版的书名啊。
翻译有些太直译。总感觉有点不流畅
很好的一本说,有一些知识点,对以后项目的开发很有借鉴意义
整体还行,有写东西比较陈旧
整体还行,有写东西比较陈旧