讨论移动程序的性能时候,我们非常关心的就是应用在糟糕网络环境下的表现。多少次我们改变网络策略,是因为客户抱怨程序太慢。对客户端来说,网络并非可控,涉及到的因素太多啦:代理,web服务器,服务提供商,dns,等等。当问题出现时,开发者,也不能准确知道是哪个因素引起的。
用户不知道问题在哪,他们只是单纯的给出评判——app垃圾。接着他们会卸载应用程序。尽管如此,我们仍然可以通过应用程序的行为控制,改善用户对应用程序的体验,包括使用先进的技术,减少网络加载。等等。
请求方:
- 协议
- 方法
- 头部
- 超时
响应方: - 响应码
- 容类型
- 内容编码类型
- 压缩
基础知识
请求一个基础知识——header
将header添加到请求中:URLConnection.setRequestProperty();
从响应中得到header: URLConnection.getHeaderFields();
超时
超时有两种:
-
Connect timeout : 连接超时
通过URLConnection.setConnectTimeout()方法设置超时时间 -
Read timeout: 读取超时
通过URLConnection.setReadTimeout()方法设置
两个方法的默认值都是0,客户端本身是没有设置超时时间的,因此,超时时间是交由TCP传输层处理的。默认情况下是没有控制的。
内容
响应中,有三个header控制着如何读取。
- content length 内容的字节长度,URLConnection.getContentLength()方法获取
- Content type 内容的mime类型,可以通过URLConnection.getContentType()方法来获取
- content encoding 内容的编码类型,比如:gzip 通过URLConnection.getContentEncoding()方法来获取
参考链接
具体策略
减少链接次数
为了链接网络,开启无线电,大约会消耗20s的电量。从用户的角度看,不进耗电量大,而且性能低,因此尽可能减少网络链接的次数非常重要。
所以,将客户端和服务端将要交换的数据搜集起来,数量足够多的时候,才进行链接。简而言之,就是减少链接次数,增加每次连接所传输的数据量。
网友评论