【读书笔记】iOS-网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践。
1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用。
2,只有在知道返回的数据不会超出应用的内存时才使用同步请求。记住,整个响应体都会位于代码的内存中。如果响应很大,那么可能导致应用出现内存溢出问题。此外,当代码将响应解析为所需的格式时可能需要复制返回的数据,这会导致内存增加一倍。
3,在处理返回的数据前,验证错误与调用返回的HTTP响应状态码。
4,如果源URL需要验证,那么不使用同步请求,因为同步框架并不支持对认证请求做出响应。唯一的例外是BASIC认证,因为这时认证信息可以通过URL或请求头进行传递。以这种方式执行认证会增加应用与服务器之间的耦合度,从而导致整个应用变得更加脆弱。如果请求不使用HTTPS协议,那么还会在明文中传递认证信息。
5,如果需要向用户提供进度条,那不要使用同步请求,因为请求是原子的,无法提供中间的进行指示信息。
6,如果需要通过流解析器来渐进响应数据,那么不要使用同步请求。
7,如果在请求完成前需要取消,那么不要使用同步请求。
二,队列式异步请求的最佳实践。
1,只有知道返回的数据不会超出应用的内存的时候才使用队列式异步请求。记住,整个响应体都会位于代码的内存中。如果响应很大,那么可能导致应用出现内存溢出问题,此外,当代码将响应解析为所需的格式时可能需要复制返回的数据,这个导致内存增加一倍。
2,为所有操作使用单一的NSOperationQueue,根据服务器的能力以及预期的肉络状况控制当前操作的最大数量。
3,在处理返回的数据前验证错误与调用返回的HTTP信啊感应状态码。
4,如果源URL需要验证,那么不要使用队列式异步请求,因为该功能不支持对认证请求做出响应。如果服务需要这种认证,那么可以将BASIC认证信息放在提供给请求的URL中。
5如果需要向用户提供进度条,那么不要使用队列式异步请求,因为请求是原子的,无法提供中间的进度指示信息。
6,如果需要通过流解析器来渐进解析响应数据,那么不要使用队列式异步请求。
7,如果请求在完成前需要取消,那么不要使用队列式异步请求。
三,异步请求的最佳实践。
1,对于大的上传或下载来说,请使用异步请求以减少应用的内存占用量。
2,在需要认证的情况下请使用异步请求。
3,如果需要向用户提供进度反馈,那么请使用异步请求。
4,在后台线程上使用异步请求要小心,请提供一个运行循环。
5,对于可以在后台线程的请求队列中轻松调度和完成的简单的请求来说,这时使用异步请求有些过犹不及。
6,如果使用输入流来上传数据,请实现connecton:newBodyStream:方法以避免对输入流的复制。
参考资料:《iOS网络高级编程-iPhone和iPad的企业应用开发》
【读书笔记】iOS-网络-同步请求,队列式异步请求,异步请求的区别的更多相关文章
- 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...
- 《android开发进阶从小工到专家》读书笔记--HTTP网络请求
No1: 客户端与服务器的交互流程: 1)客户端执行网络请求,从URL中解析出服务器的主机名 2)将服务器的主机名转换成服务器的IP地址 3)将端口号从URL中解析出来 4)建立一条从客户端与Web服 ...
- 读书笔记_python网络编程3_(1)
0.前言 代码目录: https://github.com/brandon-rhodes/fopnp/tree/m/py3 0.1.网络实验环境:理解客户端与服务器是如何通过网络进行通信的 每台机器通 ...
- 【读书笔记】《深入浅出nodejs》第三章 异步I/O
1. 为什么要异步I/O (1)用户体验上: 并发的优势: M+N+... -> max(M,N,...) --> 使后端能够快速的响应资源 *并发的劣势:... (2)资源分配: 单线 ...
- IOS网络同步请求
//1.目标地址 NSString *url_string = @"http://b33.photo.store.qq.com/psu?/05ded9dc-1001-4be2-b975-13 ...
- 读书笔记_python网络编程3_(2)
2.UDP 2.0.数据包表示较短的信息,大小通常不会超过几千字节,在浏览器与服务器进行会话/电子邮件客户端与ISP的邮件服务器进行会话时,这些独立而小型的数据包是如何组成会话的呢? 2.0.1.IP ...
- 读书笔记_python网络编程3(6)
6.TLS/SSL 6.0. 传输层安全协议(TLS, Transport Layer Security)是如今web上应用最广泛的加密方法了,1999年成为互联网标准.前身是安全套接层(SSL, S ...
- 读书笔记_python网络编程3_(3)
3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上.TCP使程序可以使用连续的数据流进行相互通信. 除非网络原因导致连接中断/冻结,TCP都能保证将 ...
- 读书笔记_python网络编程3(5)
5. 网络数据与网络错误 应该如何准备需要传输的数据? 应该如何对数据进行编码与格式化? Py程序需要提供哪些类型的错误? 5.1. 字节与字符串 PC与网卡都支持将字节作为通用传输单元.字节将8比特 ...
- Node.js高级编程读书笔记 - 3 网络编程
Outline 3.4 构建TCP服务器 3.5 构建HTTP服务器 3.6 构建TCP客户端 3.7 创建HTTP请求 3.8 使用UDP 3.9 用TLS/SSL保证服务器的安全性 3.10 用H ...
随机推荐
- Mac下如何安装配置Homebrew
Last login: Mon Aug 7 13:57:29 on consolexiashenbindeMacBook-Pro:~ xiashenbin$ ruby -e "$(curl ...
- 机器学习与Tensorflow(3)—— 机器学习及MNIST数据集分类优化
一.二次代价函数 1. 形式: 其中,C为代价函数,X表示样本,Y表示实际值,a表示输出值,n为样本总数 2. 利用梯度下降法调整权值参数大小,推导过程如下图所示: 根据结果可得,权重w和偏置b的梯度 ...
- git小乌龟工具TortoiseGit记住你的账号密码
在使用TortoiseGit的过程中,发下每次push或者pull都要重复输入账号密码,非常麻烦 怎么设置记住密码 在[系统盘]:\Users[你的用户名](比如C:\User\Administrat ...
- MATLAB下数组随机打乱顺序的方法
一:问题 有两个规模相同的数组,两个数组相同位置的元素一一对应,现在要将两数组的元素同时打乱顺序,并且乱序后的两数组对应位置元素要保持乱序前的对应关系. 二:方法 采用randperm()函数,产生 ...
- 剑指offer十八之二叉树的镜像
一.题目 操作给定的二叉树,将其变换为源二叉树的镜像.二叉树的镜像定义: 源二叉树 : 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树: 8 / \ 10 6 / \ ...
- Ruby:线程实现经典的生产者消费者问题
运行结果: ProAndCon 0 produced 1 produced consumed 0 2 produced 3 produced consumed 1 consumed 2 consume ...
- Bash重定向
1. 基础知识 文件描述符(File Descriptor),是进程对其所打开文件的索引,形式上是个非负整数.类 Unix 系统中,常用的特殊文件描述符如下: 文件描述符 名称 常用缩写 默认值 0 ...
- .NET平台常用框架
分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的K ...
- Java中的简单工厂模式(转)
Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的 ...
- Maven 进阶
一.Maven 版本管理 Maven 的推荐版本号约定为:主版本号.次版本号.增量版本号-<里程碑版本> 开发中的版本要以 -SNAPSHOT 结尾,因为这种快照版本是支持 jar 包被覆 ...