iOS和macOS性能优化:Cocoa、Cocoa Touch、Objective-C和Swift
  • 推荐0
  • 收藏2
  • 浏览1.5K

iOS和macOS性能优化:Cocoa、Cocoa Touch、Objective-C和Swift

[德] Marcel Weiher (作者)  李俊阳 马超 程伟 孙莹 译 (译者)

  • 书  号:978-7-121-33814-4
  • 出版日期:2018-06-28
  • 页  数:368
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 原书名: iOS and macOS Performance Tuning: Cocoa, Cocoa Touch, Objective-C, and Swift
  • 原书号:9780321842848
  • 维护人:刘恩惠
纸质版 ¥99.00
随着应用功能的日益增加,性能问题也逐渐浮出水面,进入我们的视野之中。本书作者Marcel Weiher在性能调优领域有着丰富的经验,在他的带领下,你将会了解如何提升CPU、内存、I/O、图像、Swift等方面的性能,如何在开发过程中定位到性能的瓶颈和问题,他同时还介绍了性能优化的编程技巧和最佳实践,从而帮助你写出更高效、更快速的代码。此外,你还将学习到定位性能问题的工具使用方法以及最佳实践,并跟随示例来学习性能优化。
本书适合寻求进阶及所有对性能优化感兴趣的iOS 开发人员阅读。
从CPU、内存、Swift、I/O、图像和UI入手全方位提升苹果系统性能,掌握性能优化的编程技巧,帮你写出高性能代码实现!
译者序
我们在开发应用的时候,最关心的都是些什么呢?首要的自然就是功能需求了,此外还有那些炫酷的用户界面和转场动画。当我们进入书店,或者在网上搜索时,映入眼帘的普遍都是开发入门、功能需求、动画特效等诸如此类的书籍和文章。那么,我们何时才会关注那些所谓的“非功能性需求”呢?
在我们翻译的上一本书《iOS 应用安全权威指南》中,我们很高兴地看到了iOS 开发中关于“安全性”需求的话题。在本书中,我们将继续关注“性能和可靠性”这一非功能性需求。
提到性能,我们通常想到的是后台的服务器性能和网络带宽。在出现性能问题的时候,我们会想方设法地提升后台服务器的性能,增加CPU 内核、增加内存、增加网络带宽……但是有没有想过,有时候应用本身的性能也会阻碍用户数量的增长,甚至严重影响用户体验。试想,如果用户在使用应用的时候,出现了严重的卡顿,这种情况对于用
户而言往往是无法忍受的。这对很多公司而言,致命性不言而喻。更严重的是,应用一旦出现了性能问题,我们是没办法通过增加CPU 内核、内存等方法来进行提升的。因此,我们需要对应用进行性能调优。
但是,目前市面上关于iOS 性能优化的文章和书籍实在是少之又少,我们通常会看到人们用Instruments 的Allocations、Leaks 等工具来检查性能问题,但是它们的具体用法是怎么样的呢?我们要怎样做才能找到应用真实的性能瓶颈呢?有哪些问题是通过编写代码本身就可以规避的呢?这些,本书都能够告诉你。
我们相信,每位软件开发者都有一种精益求精、追求卓越的心态和想法,在我们完成了庞杂的功能需求之后,自然就会开始关注如何提升用户体验,其中就包括性能优化。无论你的应用规模如何,我们都强烈建议大家阅读本书,掌握一些基本的技巧,只要在开发过程中规避这些陷阱和漏洞,那么基本上我们的应用就能够满足性能的要求,在绝
大多数时间,使你完全没必要担忧性能的相关问题。
我们都知道,Xcode 拥有一个简单的性能检测窗口Debug Navigator,其中分别展示了CPU、内存、硬盘、网络的使用量等。类似地,本书包含如下四部分内容:CPU、内存、I/O,以及图像处理和响应速度。每部分内容都同时包括了基本的理论知识、测量的工具和度量标准、常见的问题和处理方法,以及真实的案例演示。内容循序渐进,由浅
至深,无论你是急于寻找性能问题的解决方案,还是想要系统化地学习性能调优的相关知识,都能够依据这个完整的架构体系寻找到想要的内容。
在本书翻译过程中,由于书中的内容对于我们而言也比较新颖,在百忙之余,我们也一一根据书中的案例和步骤先行学习、试验和体会,以期能够用更为准确的语言和文字,将书中的思想完整地分享给各位读者朋友。在此也特别感谢参与校对的SwiftGG 翻译组的小伙伴们,对我们在翻译过程中出现的错误进行了勘正。同时也感谢电子工业出版社的编辑、审稿专家,他们认真负责、高效细心地进行了编辑和校对,也给我们提出了不少好的建议。当然,由于本书用到了大量的专业术语,在中文世界中找不到相应的描述,因此我们也斗胆“创造”了很多新词,如果出现了缺漏、不准确、不到位的情况,还请各位读者批评指正。
最后,再次感谢你关注这本讲解性能优化的书籍,我们相信你一定能从这本书中学习到各种有用的知识,向进阶的iOS 开发者更进一步!
李俊阳
2018 年3 月3 日


前言
性能是软件极其重要的特性之一。若没有世界一流的性能,软件也就称不上是世界级的。长期以来,硬件的改善意味着担心软件的性能似乎是浪费时间的,但随着摩尔定律不再自然而然地提供显著的自动性能改进,性能优化也逐步回到了计算机科学和工程的前沿。
此外,尽管底层硬件的性能已经提升了很多倍,但终端用户对性能提升的感知似乎并不明显。比尔·盖茨认为“软件的速度每18 个月就会变慢一半”,同样在A Plea for LeanSoftware(《为软件瘦身请命》)一文中提出的维尔特定律还认为,“软件变慢的速度永远快过硬件变快的速度”。
iPad 面世之初,行业资深人士被其流体式的布局界面所惊艳,但同时不得不接受一个只配备了1GHz 的CPU,这是让人感到遗憾的一点。不过,那时的iPad 比我的Apple II快了1000 多倍,比大屏的NeXT Cube 也要快40 倍。如果真的有什么值得诧异的,那就是在使用GPU 处理屏幕渲染的时候,它居然没怎么变快。
本书将尝试在Objective-C、Cocoa 和Cocoa Touch 的背景下深入了解这些发展的根本原因,并尝试提供技术,帮助我们充分利用计算机惊人的原始力量——那些易于肆意挥霍的力量。我会试图告知何时挥霍计算机的性能是恰当的,以及何时需要对性能引起高度重视。程序员的注意力也是一种稀缺资源,但却经常浪费在尝试优化无关紧要的部
分程序上。
主题将涵盖延迟与带宽,处理事项成本损耗(开销)与实际完成工作的对比,其具有普遍性,且硬件和软件栈的表现形式随级别不同而不同。
你可能注意到任何单一的操作时间取决于机器的速度,而机器总是足够快的,因此得出关键方程项目数?损耗。大多数优化是减少公式的一部分或两部分,通常我们要先尝试将其分解。
降低成本损耗的一种常用方法:认识到损耗实际上是由损耗1 和损耗2 两个独立的成本组成的,并且两者之中有且仅有一个需要应用于所有项目——项目数×(损耗1+损耗2)→损耗1+项目数×损耗2。我称之为基本优化方程,大部分优化技术均属于这一类,它也是构成我们每天处理的大多数硬件/软件栈的基础。
本书有一个非常规则的目录结构,将依次讨论性能的4 个基本主题领域:
1.CPU 的性能
2.内存
3.I/O
4.图像和响应速度
尽管已经努力保证每个主题领域的独立性,但是逻辑之间千丝万缕,因此对基础的主题有一定了解有助于对后续主题的理解。
上述4 个主题分别又被划分成4 个特定的兴趣领域,如下。
1.原理。
2.测量和工具。
3.陷阱和优化技巧。
4.实战演示应用技术。
再次强调,我们将遵循这样一个逻辑结构:在进行实际的性能优化技术之前,你需要了解一些理论知识并知道如何测量,同样地,如果基本熟悉前面几个话题,应该也能够深入感兴趣的特定领域。
本书采用这种结构划分成了4?4 =16 章,加上内存和I/O 之间穿插的特别章节Swift,总计17 章。Swift 在整本书中被广泛使用,其独特的性能特点值得我们新开一章来讨论。
对我而言,软件性能是一种激情和呼唤,贯穿了我的整个职业生涯。关于性能,我深有体会,性能无法自动优化,我们也无法在最后时刻弃它而去。另一方面,不要过分担心性能,才能集中精力在真正需要的性能工作上。这并非自相矛盾,设定一个合理的基础性能水平,通常情况下软件都是能够达到的,这样就免去了大部分时间都在对性能担忧的困扰。
简而言之,本书是关于如何出色完美地提升软件执行效率的一本书。

目录

目录
1 CPU:原理 ...................................................................................................................... 1
一个简单的例子 ......................................................................................................................... 2
(微)基准的危险 ............................................................................................................. 3
更多整数求和的方式 ....................................................................................................... 4
Swift.................................................................................................................................. 5
其他语言 ........................................................................................................................... 7
混编的力量 ................................................................................................................................ 9
趋势 .......................................................................................................................................... 10
操作成本 .................................................................................................................................. 12
复杂度计算 ............................................................................................................................... 14
总结 .......................................................................................................................................... 16
2 CPU:测量和工具 ......................................................................................................... 17
命令行工具 ............................................................................................................................... 18
top ................................................................................................................................. 18
time ............................................................................................................................... 19
sample ........................................................................................................................... 19
Xcode 测量工具 ........................................................................................................................ 22
Instruments................................................................................................................................ 23
设置和数据收集 ............................................................................................................. 24
性能分析选项 ................................................................................................................. 25
基本分析 ......................................................................................................................... 27
源代码 ............................................................................................................................. 29
数据挖掘I:Focus ......................................................................................................... 31
数据挖掘II:Pruning ..................................................................................................... 34
内部测量 .................................................................................................................................. 35
测试 ................................................................................................................................ 36
dtrace(dynamic tracing,动态跟踪) .................................................................................... 37
职责之外的优化 ....................................................................................................................... 38
总结 .......................................................................................................................................... 39
3 CPU:陷阱和优化技巧 .................................................................................................. 41
数据表示 .................................................................................................................................. 41
基本类型 ......................................................................................................................... 42
字符串 ............................................................................................................................. 45
对象 .......................................................................................................................................... 47
存取器 ............................................................................................................................. 48
公共访问(Public Access) ........................................................................................... 51
对象创建和缓存 ............................................................................................................. 52
可变性和缓存 ................................................................................................................. 53
惰性求值 ......................................................................................................................... 55
缓存注意事项 ................................................................................................................. 55
陷阱:通用(中级)表示 ............................................................................................. 57
数组和批处理 ................................................................................................................. 58
字典 ................................................................................................................................ 60
消息传递 .................................................................................................................................. 63
IMP 缓存 ......................................................................................................................... 65
转发 ................................................................................................................................ 67
均匀性和优化 ................................................................................................................. 69
方法 .......................................................................................................................................... 70
陷阱:CoreFoundation ................................................................................................... 70
多核 .......................................................................................................................................... 71
线程(Thread) .............................................................................................................. 72
工作队列 ......................................................................................................................... 73
有节制地优化 ........................................................................................................................... 74
4 CPU 实战:XML 解析 ................................................................................................... 77
HTML 扫描器 ........................................................................................................................... 78
将回调映射为消息.................................................................................................................... 81
对象 .......................................................................................................................................... 83
对象的高效性能 ....................................................................................................................... 85
性能评估 .................................................................................................................................. 88
调整 .......................................................................................................................................... 91
优化整个组件:MAX .............................................................................................................. 92
MAX 实现 ................................................................................................................................ 94
总结 .......................................................................................................................................... 95
5 内存:原理 .................................................................................................................... 97
内存层次结构 ........................................................................................................................... 97
Mach 虚拟内存 ....................................................................................................................... 103
堆和栈 .................................................................................................................................... 104
栈分配 ........................................................................................................................... 106
使用malloc()进行堆分配 ....................................................................................... 108
资源管理 ................................................................................................................................ 111
垃圾回收 ....................................................................................................................... 111
Foundation 对象所有权 ................................................................................................ 112
跟踪垃圾回收 ............................................................................................................... 113
自动引用计数(Automatic Reference Counting) ...................................................... 114
过程式资源回收 ........................................................................................................... 115
总结 ........................................................................................................................................ 115
6 内存:测量与工具 ....................................................................................................... 117
Xcode 计量表 .......................................................................................................................... 117
命令行工具 ............................................................................................................................. 118
top ............................................................................................................................... 118
heap .............................................................................................................................. 120
leaks 及malloc_debug ......................................................................................... 122
代码内进行内存测量 .............................................................................................................. 123
内存监测工具 ......................................................................................................................... 124
Leaks .............................................................................................................................. 124
Allocations ..................................................................................................................... 125
VM Tracker .................................................................................................................... 132
计数器与性能监测事件 ............................................................................................... 133
总结 ........................................................................................................................................ 134
7 内存:陷阱和优化技巧 ................................................................................................ 137
引用计数 ................................................................................................................................ 137
避免内存泄漏 ............................................................................................................... 139
Foundation 对象和基本类型对比 .......................................................................................... 141
更小的结构 ............................................................................................................................. 143
千禧危机 ....................................................................................................................... 145
压缩 ............................................................................................................................... 145
可清除内存 ................................................................................................................... 146
内存与并发 ............................................................................................................................. 146
架构注意事项 ......................................................................................................................... 147
临时分配与对象缓存 .............................................................................................................. 152
NSCache 与libcache ............................................................................................................... 153
内存映射文件 ......................................................................................................................... 154
madvise ................................................................................................................................ 157
iOS 注意事项 .......................................................................................................................... 158
ARC 优化 ............................................................................................................................... 158
总结 ........................................................................................................................................ 161
8 内存管理实战:FilterStream 架构 ............................................................................... 163
UNIX 管道及过滤器 ............................................................................................................... 163
面向对象的过滤器.................................................................................................................. 165
DescriptionStream .................................................................................................................... 166
消除description 中的无限递归 ........................................................................... 170
数据流层次结构 ..................................................................................................................... 172
总结 ........................................................................................................................................ 173
9 Swift ............................................................................................................................ 175
Apple 所声称的Swift 性能 .................................................................................................... 175
语言特性 ....................................................................................................................... 177
基准代码 ....................................................................................................................... 179
Swift 性能评估 ........................................................................................................................ 180
基本性能特征 ............................................................................................................... 180
集合 ............................................................................................................................... 181
更进一步 ................................................................................................................................ 190
Nginx HTTP 解析器 ..................................................................................................... 190
Freddy JSON 解析器 .................................................................................................... 191
图片处理 ....................................................................................................................... 191
观察 ............................................................................................................................... 192
编译时间 ................................................................................................................................ 193
类型推断 ....................................................................................................................... 193
泛型特化 ....................................................................................................................... 195
全模块优化 ................................................................................................................... 197
控制编译时间 ............................................................................................................... 197
面向优化器编程 ..................................................................................................................... 198
一个足够智能的编译器 .......................................................................................................... 199
优化编译器之死 ........................................................................................................... 201
实用建议 ....................................................................................................................... 203
备用方案 ....................................................................................................................... 204
总结 ........................................................................................................................................ 207
10 I/O:原理 .................................................................................................................. 209
硬件 ........................................................................................................................................ 209
硬盘驱动器 ................................................................................................................... 209
固态硬盘 ....................................................................................................................... 211
网络 ............................................................................................................................... 212
操作系统 ................................................................................................................................ 212
抽象概念:字节流 ....................................................................................................... 212
文件I/O ......................................................................................................................... 214
网络栈 ........................................................................................................................... 218
总结 ........................................................................................................................................ 218
11 I/O:测量与工具 ........................................................................................................ 221
负形空间:top 与time ....................................................................................................... 222
信息概览:iostat 和netstat......................................................................................... 223
Instruments.............................................................................................................................. 224
详细追踪:fs_usage .......................................................................................................... 228
总结 ........................................................................................................................................ 231
12 I/O:陷阱和优化技巧 ................................................................................................ 233
将字节封装为NSData ............................................................................................................ 233
内存映射异常 ............................................................................................................... 235
如何分块 ....................................................................................................................... 237
UNIXy I/O ............................................................................................................................... 238
网络I/O .................................................................................................................................. 240
堆叠传输 ....................................................................................................................... 241
限制请求 ....................................................................................................................... 243
数据处理 ....................................................................................................................... 244
异步I/O ......................................................................................................................... 245
HTTP 服务 .................................................................................................................... 246
序列化 .................................................................................................................................... 250
内存转储 ....................................................................................................................... 251
一个简单的XML 格式 ................................................................................................. 252
属性列表 ....................................................................................................................... 254
归档 ............................................................................................................................... 256
序列化总结 ................................................................................................................... 258
CoreData ................................................................................................................................. 260
批量创建和更新 ........................................................................................................... 261
Fetch 和Fault 技术 ....................................................................................................... 263
对象交互 ....................................................................................................................... 266
子集 ............................................................................................................................... 266
分析 ............................................................................................................................... 267
SQLite ..................................................................................................................................... 267
关系型和其他非数据库 ............................................................................................... 269
事件发布 ................................................................................................................................ 270
混合形式 ....................................................................................................................... 271
隔离存储 ................................................................................................................................ 272
总结 ........................................................................................................................................ 272
13 I/O:实战 .................................................................................................................. 273
iPhone 游戏字典 ..................................................................................................................... 273
有趣的属性列表 ..................................................................................................................... 277
二进制属性列表读取器 ............................................................................................... 278
懒加载 ........................................................................................................................... 282
避免中间代码 ............................................................................................................... 284
逗号分隔值 ............................................................................................................................. 287
公共交通调度数据.................................................................................................................. 289
站点信息 ....................................................................................................................... 290
站点停靠时间检索 ....................................................................................................... 291
站点停靠时间导入 ....................................................................................................... 292
更快的CSV 解析 .................................................................................................................... 294
对象分配 ....................................................................................................................... 294
Push 与Pull 的比较 ...................................................................................................... 296
感兴趣的键 ................................................................................................................... 296
并行 ............................................................................................................................... 296
总结 ........................................................................................................................................ 299
14 图像和UI:原理 ........................................................................................................ 301
响应能力 ................................................................................................................................ 301
软件和API .............................................................................................................................. 302
Quartz 和PostScript 图像模型 ............................................................................................... 305
OpenGL .................................................................................................................................. 307
Metal ....................................................................................................................................... 307
图形硬件加速 ......................................................................................................................... 307
从Quartz 到Core Animation .................................................................................................. 311
总结 ........................................................................................................................................ 314
15 图像和UI:测量和工具 ............................................................................................. 315
CPU 分析仪 ............................................................................................................................. 315
Quartz 调试 .............................................................................................................................. 317
Core Animation 工具 ............................................................................................................... 318
当CPU 不再是问题 ................................................................................................................ 319
我在测量什么 ......................................................................................................................... 327
总结 ........................................................................................................................................ 329
16 图像和UI:陷阱和优化技巧 ...................................................................................... 331
陷阱 ........................................................................................................................................ 331
优化技巧 ................................................................................................................................ 332
过多通信导致安装缓慢 .......................................................................................................... 333
节流显示 ....................................................................................................................... 333
使用节流显示 ............................................................................................................... 335
今日安装程序和进度报告 ........................................................................................... 335
iPhone 无法承受之重 ............................................................................................................. 336
一切都是假象 ......................................................................................................................... 338
图像的缩放和剪切 ....................................................................................................... 338
缩略图绘制 ................................................................................................................... 340
如何确定没有绘制缩略图 ........................................................................................... 341
如何真的不绘制缩略图 ............................................................................................... 341
如何绘制非缩略图 ....................................................................................................... 342
在iPhone 上绘制直线 ............................................................................................................ 344
总结 ........................................................................................................................................ 346
17 图像和UI:实战 ........................................................................................................ 347
优美的天气应用 ..................................................................................................................... 347
更新 ............................................................................................................................... 348
探索PNG ...................................................................................................................... 348
头脑风暴 ....................................................................................................................... 350
JPEG 数据点 ................................................................................................................. 350
测量时的小错误 ........................................................................................................... 351
JPNG 与JPJP ................................................................................................................ 353
优美的启动 ................................................................................................................... 353
Wunderlist 3 ............................................................................................................................. 354
Wunderlist 2 ................................................................................................................... 354
整体架构 ....................................................................................................................... 355
URI 与进程中REST ..................................................................................................... 356
最终一致的异步数据存储 ........................................................................................... 357
RESTOperation 队列 ..................................................................................................... 358
流畅、反应灵敏的UI .................................................................................................. 359
简评Wunderlist ............................................................................................................. 361
总结 ........................................................................................................................................ 361

读者评论

相关图书

软件架构设计:大型网站技术架构与业务架构融合之道

余春龙 (作者)

本书系统化地阐述了技术架构与业务架构的方法论与实践。本书内容分为5大部分,第1部分从行业背景出发定义架构的概念与范畴;第2部分细致讨论架构所需的计算机功底,包括...

¥49.00

MySQL 8 Cookbook(中文版)

(美) 卡西克·阿皮加 特拉 (Karthik Appigatla) (作者) 周彦伟 孟治华 王学芳 (译者)

MySQL 8.0 的发布是MySQL 发展历史上的一个重要里程碑,也是开源数据库领域内的一个大事件。针对这个版本,MySQL 官方团队做了太多的工作,从查询优...

 

Scala编程(第3版)

Martin Odersky;Lex Spoon;Bill Venners (作者) 高宇翔 (译者)

本书由直接参与Scala开发的一线人员编写,因而对原理的解读和应用的把握更加值得信赖。本书面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala...

¥144.00

质量全面管控——从项目管理到容灾测试

葛长芝 (作者)

本书专门为有志于软件测试的工程师打开软件测试的大门,笔者结合案例讲解测试实践技术,主要内容有:项目管理、项目需求管理、代码质量控制、自动化部署、软件测试、安全测...

¥49.00

Spring MVC Cookbook中文版

Alex Bretet (作者) 张龙 (译者)

本书由浅入深地介绍了当今流行的Java Web框架Spring MVC的方方面面,从基础的环境搭建到微服务设计与架构,再到持久化、REST API构建、认证与测...

¥69.00

Web接口开发与自动化测试——基于Python语言

胡志恒 (作者)

本书以接口测试为主线,以Web开发为切入点,全面介绍了Web接口开发与自动化测试过程中使用的相关技术。全书分为15章,第1章介绍了Python的基础知识,解答初...

¥39.00