一,同步请求的最佳实践。

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网络-同步请求,队列式异步请求,异步请求的区别的更多相关文章

  1. 《android开发进阶从小工到专家》读书笔记--HTTP网络请求

    No1: 客户端与服务器的交互流程: 1)客户端执行网络请求,从URL中解析出服务器的主机名 2)将服务器的主机名转换成服务器的IP地址 3)将端口号从URL中解析出来 4)建立一条从客户端与Web服 ...

  2. 读书笔记_python网络编程3_(1)

    0.前言 代码目录: https://github.com/brandon-rhodes/fopnp/tree/m/py3 0.1.网络实验环境:理解客户端与服务器是如何通过网络进行通信的 每台机器通 ...

  3. 【读书笔记】《深入浅出nodejs》第三章 异步I/O

    1. 为什么要异步I/O (1)用户体验上: 并发的优势: M+N+... -> max(M,N,...)  --> 使后端能够快速的响应资源 *并发的劣势:... (2)资源分配: 单线 ...

  4. IOS网络同步请求

    //1.目标地址 NSString *url_string = @"http://b33.photo.store.qq.com/psu?/05ded9dc-1001-4be2-b975-13 ...

  5. 读书笔记_python网络编程3_(2)

    2.UDP 2.0.数据包表示较短的信息,大小通常不会超过几千字节,在浏览器与服务器进行会话/电子邮件客户端与ISP的邮件服务器进行会话时,这些独立而小型的数据包是如何组成会话的呢? 2.0.1.IP ...

  6. 读书笔记_python网络编程3(6)

    6.TLS/SSL 6.0. 传输层安全协议(TLS, Transport Layer Security)是如今web上应用最广泛的加密方法了,1999年成为互联网标准.前身是安全套接层(SSL, S ...

  7. 读书笔记_python网络编程3_(3)

    3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上.TCP使程序可以使用连续的数据流进行相互通信. 除非网络原因导致连接中断/冻结,TCP都能保证将 ...

  8. 读书笔记_python网络编程3(5)

    5. 网络数据与网络错误 应该如何准备需要传输的数据? 应该如何对数据进行编码与格式化? Py程序需要提供哪些类型的错误? 5.1. 字节与字符串 PC与网卡都支持将字节作为通用传输单元.字节将8比特 ...

  9. 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 ...

随机推荐

  1. 关于WEB Service&WCF&WebApi实现身份验证之WCF篇(1)

    WCF身份验证一般常见的方式有:自定义用户名及密码验证.X509证书验证.ASP.NET成员资格(membership)验证.SOAP Header验证.Windows集成验证.WCF身份验证服务(A ...

  2. 语义化HTML:p、h1-6、q、blockquote、hr、address、code、pre、var、cite、dfn和samp

    一.元素语义 p标签 W3C草案: The p element represents a paragraph.W3C specification 语义化的 <p>元素 表示:文章中的段落. ...

  3. HTML5使用Div标签来实现表格

    当支持HTML5时,我们可以使用样式把DIV实现一个表格table. 关键样式语法:display: table,display: table-row,display: table-cell 下面例子 ...

  4. 2015暑假多校联合---Assignment(优先队列)

    原题链接 Problem Description Tom owns a company and he is the boss. There are n staffs which are numbere ...

  5. jquery.form.js不能解决连接超时(timeout)的解决方法

    最近在使用jquery.form.js提交包含文件的表单时,碰到了一个问题:当碰上网速较慢时,而我们又设置了timeout时,例如: var options = { timeout: 3000 //限 ...

  6. PHP 导出Excel 文档

    下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...

  7. Javascript单元测试Unit Testing之QUnit

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }           QUnit是一个基于JQuery的单元测试Uni ...

  8. Java经典实例:使用DateFormatter来格式化日期时间

    Java版本:1.8开始 import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; ...

  9. QRCode.js 生成二维码

    QRCode.js 是一个用于生成二维码图片的插件. github地址 在线实例 实例预览 基础示例 实例预览 API 接口 使用方法 载入 JavaScript 文件 <script src= ...

  10. Wami Map Project – 开源的 OSM API 服务

    Wami 地图项目把 OSM 数据分享给所有的人,很容易使用.他们利用 MongoDB 的潜力进行大数据管理来实现从 OSM 数据来源搜索相关的数据.它们的 API 使人们有可能检索不同格式的 POI ...