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的负担同时也激活了其他资源,这将导致电量更快地被损耗。对于非机密的信息比如图片资源,描述资源就完全可以不进行任何加密。
相关推荐
总的来说,《iOS Delphi 开发指南》旨在引导开发者利用Delphi XE5高效地构建iOS应用,将Delphi的优势带入移动开发领域,为那些希望在iOS平台上快速启动项目或扩展现有业务的开发者提供了宝贵的学习资料。通过深入...
由于提供的文件内容主要是关于电子书格式EPUB的介绍和版权信息,并未涉及到iOS和macOS性能调优的具体知识点,因此无法直接生成相关知识点。但我可以依据标题“iOS and macOS Performance Tuning”和描述“iOS and ...
在学习和使用NASA WorldWind iOS源码的过程中,开发者可以深入了解地理空间数据的处理、3D图形渲染原理、多线程优化、内存管理以及移动设备上的性能调优等技术。通过阅读源码,可以学习到NASA工程师们的优秀编程实践...
UMP Pro,全称为“Universal Mobile Platform Pro”,是一款专为Android和iOS平台设计的高效能、跨平台的移动应用开发框架。这款工具旨在帮助开发者轻松实现多平台应用的快速构建,通过高度集成的功能模块,提升开发...
根据给定文件的信息,我们可以提炼出关于iOS及macOS性能调优的相关知识点,涉及Cocoa、Cocoa Touch、Objective-C以及Swift等技术。下面将详细展开这些知识点。 ### iOS及macOS性能调优 #### 1. **性能调优的重要性...
- **KVM**:由SUN发布,主要用于移动设备,如手机系统(尤其是iOS和Android出现之前)。 - **JRockit**:最初由BEA拥有,后来被Oracle收购,其优秀的特性被移植到HotSpot上。 - **IBM J9 VM**:由IBM内部开发,主要...
- **主要内容**:分享关于iOS应用性能调优的经验和技巧。 - **特色亮点**:Ted 的文章技术深度高,对于追求极致性能的开发者来说非常有价值。 11. **txx's blog** - - **博主介绍**:一位专注于iOS开发的技术博...
这款iOS游戏的源代码是一个宝贵的资源,对于iOS开发者来说,它提供了深入学习和理解移动游戏开发的契机。 Canabalt是一款基于无尽跑酷概念的游戏,玩家扮演的角色在不断崩塌的城市屋顶上奔跑,试图逃离未知的灾难。...
本书深入探讨了Swift 5环境下高级iOS应用程序架构的设计理念和技术细节,旨在帮助读者构建更加高效、可维护的iOS应用程序。 #### 关键知识点 **1. iOS App 架构基础** - **架构模式**:书中详细介绍了常见的iOS...
在移动网络环境下,IM系统需要特别注意性能调优,以确保良好的用户体验。例如,在移动网络下,需要针对网络延迟、丢包等问题进行专门优化,以提高系统的稳定性和响应速度。 #### 结论 IM即时通讯技术在不同场景下...
总之,《iOS杀人游戏》作为一款开源的iOS游戏,是学习移动游戏开发的宝贵资源。通过深入研究其源码,开发者不仅可以提升编程技能,还能掌握游戏设计与实现的全过程,为未来开发自己的游戏奠定坚实基础。
通过学习《iOS和macOS性能优化:Cocoa,Cocoa Touch,Objective-C和Swift》,开发者不仅能掌握性能调优的具体技巧,还能培养出一套系统的方法论,以适应不断变化的技术环境,持续提升应用的运行效率和用户体验。...
此外,iOS平台与Android相比,有着独特的生态系统和开发环境。Objective-C和Swift是iOS的主要编程语言,它们提供了强大的类型系统和面向对象的特性。而Android主要使用Java或Kotlin,其生态系统相对更加开放,但跨...
开发者在使用OpenGL ES开发时还需要注意iOS平台支持其他的渲染目标,并且在渲染性能上需要额外的调优。 苹果指出在后台应用程序中不可使用OpenGL ES,而且OpenGL ES对多线程应用程序施加了额外的限制。为了帮助...
移动互联网产品组件库大全包含了iOS部件库、iPad部件库和Android部件库,这三类库分别针对不同操作系统的设备,提供了各种界面元素,如按钮、文本框、滑块、选项卡等,以确保设计出的原型能够真实反映不同平台的用户...
2. **Xcode IDE**:Apple的集成开发环境(Xcode)是创建iOS应用的主要工具,提供了代码编辑、调试、构建和测试等一站式服务。 3. **用户界面(UI)**:设计简洁易用的日记输入界面是关键,这可能包括文本编辑视图用于...
- **发布历史**:iOS 7是苹果公司在2013年推出的移动操作系统,它带来了全新的设计语言和平面化UI风格。 - **新特性**:包括控制中心、通知中心改进、动态壁纸等。 - **系统要求**:支持iPhone 4及以上设备,iPad 2...