这个 session 的主讲人感觉是一个很典型的美国人,年纪也不小。

网络现状

四十亿人在使用因特网,大概占有世界人口的一半。上网人数的增长在减缓。
但是网络仍然在增长。增长点主要在物联网、第三世界国家(中国、印度)、移动设备。
2G 网络仍然很普遍,要使用 Network Link Conditioner (NLC) 来模拟真实世界的网络状况。

IPV6

通过 IPV6 建立的连接数目仍然不多。

根据印度的数据,使用 IPV6,75% 的连接建立时间在 150ms 以下。使用 IPV4,75% 的连接建立时间在 325ms 以上。所以多用 IPV6。

Quick UDP Internet Connections (QUIC)

是 TCP 的继承者,IETF 的标准化正在进行中。
但是 Coming Soon

DNS 性能

为了防止目标主机变化,很多网站设置 DNS 缓存时间在 6s 以下,这样子目标主机宕机以后,可以及时响应。
但是这样子会使得每次请求都要去更新 DNS,大概需要 250ms。
苹果新增一个接口,可以使用缓存的 DNS。发起请求和更新 DNS 同时进行,大概率 DNS 不会变。如果请求失败了或者 DNS 变了,使用更新后的 DNS。

给我们的建议

不要用 SCNetworkReachability

因为结果是不准的,预测未来是不靠谱的。
要使用 waitsForConnectivity 选项。

API Choices

不要用 BSD Socket。太古老了,使用 Network.framework。

URLSession 及其使用建议

  • 支持 HTTP/2 和 HTTP/1.1
  • 进程间通信

推荐在所有的苹果平台上使用这个网络 API

延时提升

主要是 HTTP/2,去掉了 HTTP 层的 head-of-line blocking,即要收到上一个请求返还,才能发出下一个请求。提升了带宽利用率,只需要服务器端改变就好,客户端已经由 URLSession 搞定了。

请求合并

针对不同主机的请求,也可能会复用请求,前提条件如下:

  • IP 地址一致
  • 域名被同一个 TLS 证书覆盖

这是 URLSession 的新的行为。可以创建更少的 URLSession 对象。

提升吞吐量

  1. 减少请求大小

    • 减少 cookie 的大小
    • HTTP/2 头部压缩
  2. 使用压缩算法
    Gzip 和 Brotli。 第二个没有听说过。

Responsiveness

QoS

URLSession 可以感知到所在队列的 QoS,具体来说是感知到 task.resume() 所在队列的 QoS。

NSURLRequest.NetworkServiceType 新增了一个叫做 networkServiceTypeResponsiveData

一般来说,应该用 defaultbackground

如何响应网络状态变化

  1. 设置 waitsForConnectivity 属性为 true
  2. urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) 这个回调中处理网络中断情况,比如给用户提醒。
  3. 如果不在需要请求,调用 task.cancel()

节省系统资源

  • 对后台网络请求,激活 isDiscretionary
    这样子,系统可以在合适的时机发起网络请求。
  • 合理使用缓存

参考

Optimizing Your App for Today’s Internet的更多相关文章

  1. 高德APP启动耗时剖析与优化实践(iOS篇)

    前言最近高德地图APP完成了一次启动优化专项,超预期将双端启动的耗时都降低了65%以上,iOS在iPhone7上速度达到了400毫秒以内.就像产品们用后说的,快到不习惯.算一下每天为用户省下的时间,还 ...

  2. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  3. iOS UIKit:App

    1.App生命周期 IOS架构是由许多设计模式实现,如model-view-controller 和 delegation模式. 1.1 main函数 与其它框架类似,IOS框架的入口也是从main函 ...

  4. Android性能优化-App后台优化

    原文链接 Background Optimizations 前言 后台进程是内存和电池敏感的.一个隐式的broadcast可能会启动很多监听它的后台进程,即使这些进程可能做得工作不多.这可能丢设备性能 ...

  5. 【转】iOS9适配

    Demo1_iOS9网络适配_改用更安全的HTTPS iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL.采用TLS 1.2 协议,目的是 强制 ...

  6. 升级到iOS9之后的相关适配

    iOS9AdaptationTips(iOS9开发学习交流群:458884057) iOS9适配系列教程[中文在页面下方]转自@iOS程序犭袁 (截至2015年9月26日共有10篇,后续还将持续更新. ...

  7. Build better apps: Windows 10 by 10 development series

    http://blogs.windows.com/buildingapps/2015/08/05/build-better-apps-windows-10-by-10-development-seri ...

  8. 在Swift中应用Grand Central Dispatch(下)

    在第一部分中, 你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让 PhotoManager单例在读写照片时是线程安全的.除此之 ...

  9. Android -- The Manifest File

    Before the Android system can start an app component, the system must know that the component exists ...

随机推荐

  1. OSGi 系列(十八)之 基于注解的 Blueprint

    OSGi 系列(十八)之 基于注解的 Blueprint 1. 注解实现 blueprint 第一步:bundle 添加 Bundle-Blueprint-Annotation <plugin& ...

  2. vue组件介绍

    https://www.cnblogs.com/Leo_wl/p/5863185.html vue.js说说组件   什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重 ...

  3. 2018.07.03 POJ 2653 Pick-up sticks(简单计算几何)

    Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Description Stan has n sticks of various leng ...

  4. 2018.09.19 atcoder Snuke's Coloring(思维题)

    传送门 谁能想到这道题会写这么久. 本来是一道很sb的题啊. 就是每次选一个点只会影响到周围的九个方格,随便1e9进制就可以hash了,但是我非要作死用stl写. 结果由于技术不够高超,一直调不出来. ...

  5. 2018.09.09 codeforces280C. Game on Tree(期望dp)

    传送门 期望dp经典题. 显然只需要算出每个点被染黑的期望步数. 点i被染黑的期望是1/(1到i这条链上的节点数)" role="presentation" style= ...

  6. hdu-1728(bfs+优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 注意:1.先输入起点(y1,x1)和终点(y2,x2): 2.如果一个一个遍历会超时. 思路:每 ...

  7. C语言之预处理命令与用typedef命名已有类型

    预处理命令 主要是改进程序设计环境,以提高编程效率,不属于c语言本身的组成部分,不能直接对它们进行编译,必须在对 程序编译之前,先对程序中的这些特殊命令进行“预处理”.比如头文件. 有以下三类:宏定义 ...

  8. jquery文件上传控件 WebUploader

    WebUploader是百度开源的一个文件上传组件,因为其操作简洁大方,就在项目中使用了,记录一下. 效果是这样子:  这个样子是默认的效果.  这个是选择上传的图片,可以批量,选择后可以删除和添加更 ...

  9. 伪共享(False Sharing)

    原文地址:http://ifeve.com/false-sharing/ 作者:Martin Thompson  译者:丁一 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数 ...

  10. ZOJ2417 Lowest Bit 2017-04-18 20:53 38人阅读 评论(0) 收藏

    Lowest Bit Time Limit: 2 Seconds      Memory Limit: 65536 KB Given an positive integer A (1 <= A ...