`

iOS移动网络环境调优那些事[转]

 
阅读更多

 http://xiangwangfeng.com/2013/10/16/ios%E7%A7%BB%E5%8A%A8%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%A2%83%E8%B0%83%E4%BC%98%E9%82%A3%E4%BA%9B%E4%BA%8B/

 

App发布后收到了很多关于网络传输慢和连接有问题的反馈,吓得科学家直接从广州跑到杭州救急,针对各方面的问题都做了不同程度的调整和改进,效果还不错。顺带自己最近也在看《Professional iOS Network Programming》,理论结合实践,可以好好地总结一把App在移动网络下的调优的那些事。

       相对于有线网络,移动网络有如下的特性:带宽低,延迟高,丢包率高,稳定性差。3G网络的带宽一般为下行100-200KB/S,上行10-100KB/S,延迟0-400ms,带宽方面基本逼近2M有线网络,但延迟较高,稳定性不够。而2G更是惨不忍睹:一般只有10KB/S下行和1KB/S左右的上行速度,延迟基本不低于400ms,网络环境不好时甚至有数秒的延迟。下面针对这些情况给出个人总结的八条网络优化的小贴士。

        1.在有条件的情况下尽量使用IP而非域名进行连接:对于有线网络来说DNS查询可能是一件不费吹灰之力的事,但是对于移动网络来说却不是这样,一次DNS查询的耗时甚至都能赶得上一次连接的耗时。于是在有条件的情况下,缓存服务器IP地址和端口,并尽量使用IP进行连接是个好的选择。另一个原因是中国移动的DNS服务相当不靠谱,错误率极高(传闻出错率在60%以上)。我们就碰到过几次某个地段的童鞋使用移动2G总是无法解析域名的情况。

        2.减少不必要的连接请求:大多数的移动网络(3G)并不允许一个给定IP地址超过两个的并发HTTP请求,既当你有两个针对同一个地址的连接时,再发起的第三个连接总是会超时。而2G网络下这个限定为1个。(详见这里)同一时间发起过多的网络请求不仅不会起到加速的效果,反而有副作用。另一方面,由于网络连接很是费时,保持和共享某一条连接就是一个不错的选择:比如短时间内多次的HTTP请求。像ASIHttpRequest就提供setShouldAttemptPersistentConnection的方法:By default, ASIHTTPRequest will attempt to keep connections to a server open so that they can be reused by other requests to the same server (this generally results in significant speed boost, especially if you have many small requests). Persistent connections will be used automatically when connecting to an HTTP 1.1 server, or when the server sends a keep-alive header. Persistent connections are not used if the server explicitly sends a ‘Connection: close’ header.

 

 

        3.设置合理的超时时间。过短的超时容易导致连接超时的事情频频发生,甚至一直无法连接,而过长的超时则会带来等待时间过长,体验差的问题。就目前来看,对于普通的TCP连接30秒是个不错的超时值,而Http请求可以按照重要性和当前网络情况动态调整超时,尽量将超时控制在一个合理的数值内,以提高单位时间内网络的利用率。

        4.减少网络请求。使用一种有效的传输格式和压缩网络请求/反馈是两种行之有效的方法。前者主要应用于使用自定义协议的场景:用protobuf明显会比json/xml更省流量;而后者多出现在Http相关的场景,比如使用gzip对Http请求和反馈进行压缩。

        5.使用缓存。其实这也算是对贴士4的补充:在本地有有效数据的情况下直接不发起网络请求。配置文件,资源文件,描述文件,几乎所有的文件都可以成为我们缓存的对象,而大部分涉及到网络相关的iOS第三方库都提供了极其方便的缓存方法,程序员唯一需要考虑的就只有缓存容量和过期时间的问题。

        6.使用断点续传和分段上传。由于移动网络的不稳定性,使得断点续传和分段上传变得极其重要,一方面可以在重新传输时省去已传输数据的流量,而另一方面将文件分成几个请求上传可以尽量减少传输中的包大小,避免高丢包率环境导致TCP包丢包重传甚至失败,保证传输的成功率(当然也减低了效率)。

        7.平衡网络延迟和带宽的影响。对于移动网络这种高延迟低带宽的情况,需要综合考虑进行平衡配置:在一个固定网络下,当包大小小于1500字节时(一个TCP的Payload),网络延迟的影响基本是一个常数,此时网络延迟的影响主要体现在请求次数上,所以合并多个小请求到一个包内是一个合理且有效的做法。而在包大小超过1500字节后,随着包大小的增加,延迟的影响会越来越小,但相应的带宽的影响会越来越大。

        8.合理地选择加密。对于信息安全来说,最理想的状态是所有的请求都是通过加密的。这对于PC来说并不是一个问题,但是对于电量资源有限的移动端来说却是一个需要好好权衡的问题:网络传输中加密的使用增加了CPU的负担同时也激活了其他资源,这将导致电量更快地被损耗。对于非机密的信息比如图片资源,描述资源就完全可以不进行任何加密。

分享到:
评论

相关推荐

    Axure元件集合和移动端WEB调优

    1,Axure移动互联网产品组件库大全ios部件库ipad部件库Android部件库 2,AXURE 元件库 3,移动端web调优 4,iOS8和iPhone6部件库

    2018第四届中国移动互联网测试开发大会PPT-3

    太大了,分开上传。这是第3部分。 为期两天的大会将涵盖如下方向: 质量管理专题 持续集成、持续交付、...白盒测试:静态分析、代码审计、Android Hook技术、iOS Hook技术、字节码插桩技术 质量监控与质量数据分析

    2018第四届中国移动互联网测试开发大会PPT-1

    太大了,分开上传。这是第1部分。 为期两天的大会将涵盖如下方向: 质量管理专题 持续集成、持续交付、...白盒测试:静态分析、代码审计、Android Hook技术、iOS Hook技术、字节码插桩技术 质量监控与质量数据分析

    2018第四届中国移动互联网测试开发大会PPT-2

    太大了,分开上传。这是第2部分。 为期两天的大会将涵盖如下方向: 质量管理专题 持续集成、持续交付、...白盒测试:静态分析、代码审计、Android Hook技术、iOS Hook技术、字节码插桩技术 质量监控与质量数据分析

    iOS高级程序员进阶——页面开发核心技术篇

    一款优秀的iOS应用,除了业务逻辑都需要通过界面来呈现外,用户体验上的优化、性能与动画的调优等也都需要扎实的界面开发技术作为基础。 在面试中,界面开发技术与性能优化通常会结合进行考察。iOS应用页面渲染原理...

    EC+(ecjia)到家是一款可开展O2O业务的移动电商系统.zip

    首先,运维工作包括基础设施的部署与配置,如服务器、网络设备、存储设备等硬件资源的安装调试与监控,同时还需要安装操作系统、数据库和其他应用软件,并进行性能调优以满足业务需求。 其次,运维人员承担着日常...

    iPhone应用程序开发指南.中文.pdf

    应用程序运行环境 12 启动过程快,使用时间短 12 应用程序沙箱 13 虚拟内存系统 13 自动休眠定时器 14 应用程序的程序包 14 信息属性列表 16 应用程序图标和启动图像 21 Nib文件 21 处理关键的应用程序任务 22 初始...

    东软集团的java笔试题-users:一些技术牛的blog或者整理的东东

    这个移动开发资源整理的不错: 自定义view android性能调优 android 常见问题 android图片显示相关 500px UltimateAndroid awesome-android-ui 知乎整理的大牛 trinea整理的开源 换肤 热修复 View绘制流程 android...

    Z-Blog博客系统asp版v2.2PrismBuild140101

    系统核心 [功能新增] [主要更新] WAP插件独立,新增PAD(Android\iOs)模式 [功能新增] 主题检查依赖... 全部系统文件性能调优,防止ADO\FSO重复创建 [修改优化] 移动风声无组件上传的位置 [修改优化] [主要更新] 验证码插

    Z-Blog博客系统 2.2 Prism Build 130801

    [修改优化] 全部系统文件性能调优,防止ADOFSO重复创建 [修改优化] 移动风声无组件上传的位置 [修改优化] [主要更新] 验证码插件化. [问题修正] [影响:低] 同一天发布文章过多导致发布过慢的问题 系统外围 后台设置 -...

Global site tag (gtag.js) - Google Analytics