用户在使用APP的过程中,网络条件比较复杂,如WiFi,4G,3G,2G;并且,当前有三大运营商,所提供的网络制式不太相同。同时,用户使用的场景也各不相同,比如室内,户外,电梯或者停车场等。因为不做任何处理的话很可能会崩溃闪退,很影响用户的使用。所以对客户端要求就比较高了,需要做容错处理,比如异常提示,超时处理,重连机制,以及缓存机制。
1.异常处理
当网络异常时,未正常收到服务端的数据,需要做容错处理,不然很可能应用会出现崩溃或闪退
2.超时处理
网络加载需要时间,由于人类的心理反应,如果等待的过程中给用户进度条反馈或者loading,比页面一片空白要好过很多,因为用户有期待目标(是不是稍微跟产品挂钩了)。如果服务端一直没有返回,时间过长而没有给用户反馈的话,会把用户的耐心磨完。调查显示:用户所能忍受的最佳响应时间是2s,一般情况下超时时间设置为5 s,如果时间超出要给用户一个反馈。
当然了,超时时间统一设置为T,这是不是太傻了 。如果当前是2G网络,超时时间设置为5s是不是稍微有点短了,如果当前为4G网络,且网络状态良好,超时时间设置为5s是不是过长了,所以是不是可以根据不同的网络制式来设置超时时间呢
3.重连机制是否有重连机制,需要根据具体需求来定,比如聊天功能,网络较差导致网络断开,当网络连接后,一般情况下都需要重连机制,因为用户在聊天页面时想收到及时的信息。
4.缓存机制是否有缓存机制,也需根据需求而定,比如资讯内容类,并不是所有的都需要做缓存机制。就资讯类模块而言,如果网络不好或者断开时,页面显示的是之前加载过的内容,用户就可以浏览之前的动态,而不是一直在等待。
怎么来模拟弱网环境呢
1. 使用代理服务器,如Fiddler,Charles
charles中可在proxy->Throttle setting弹窗中设置,打开后如下图:
使用Fiddler的用户可以在Rules->Customize Rules修改代码,在文件中搜索Simulate,可以看到如下代码行:
英文的意思为:没发送/接收1KB延时T,所以我们可以修改延时的时间,可以为固定值,也可以为固定区间的随机值,这样比较贴近用户真实使用的场景
oSession["request-trickle-delay"] = ""+randInt(100,300);
oSession["response-trickle-delay"] = ""+randInt(100,300);
2. 使用其他工具,Network Emulator for windows Toolkit
3. 部分Android用户可在设置->运营商网络->网络模式中设置2G,3G,4G
如果是IOS设备,可以直接在开发者模式-Networking-Network Link Conditioner,选择网络类型后并打开上方开关即可
下方是不同网络环境下速度的图片,测试时可参照设置: