APP弱网络条件下,体验优化之道

APP弱网络条件下,体验优化之道

最近跟朋友聊天刚好聊到这一块,他们是在做电商业务,商品图片及其多,API接口请求频率也高。然而,他们在移动2/3G的网络环境下,APP经常会出现Loading很久的情况,这里我把我们所分析与使用到的网络优化方案与大家分享一下。

所谓的弱网络,也就是指在网络不好的条件下进行使用APP,如2G、3G网络,这类网络条件下,用户的网络速度基本维持在10K/S~60K/S。如此差的网络环境, 如果还希望给用户提供良好的用户体验,那么我们的APP就该想想如何优化了。

转载表明来源:http://blog.csdn.net/yzzst/article/details/51764909

到底慢在哪里?

需要处理在弱网络下的加载速度,那么我们要先确定一下我们的整个APP在哪个地方加载的速度如何,最长的加载路径在哪里,我们从而才有针对性的进行优化与修改。

Webview

如果是对是APP中内嵌的webview网页,针对网页体验优化已经由来已久了。我们可以使用Chrome的开发者模式,调整到Network模式下,将网络条件设置为3G去请求网页,那么我们就能够看出来一个网页加载的速度主要都好费在哪个地方,如下图所示:

当然,html的加速方式有很多种

  • 使用gulp\grunt进行打包压缩:js\css资源压缩,雪碧图合并等。
  • 使用font-awesome替换图片:字体可以很好的兼容,无限放大,常用的图片都有

APP API

当然很多情况下使我们的接口设计得不够合理,多次请求一个相同数据 or 慢查询造成的。我们也可以使用chrome://inspect插件,查看自己的device请求情况(Android 手机连接上adb)。如下图所示:

接口设计优化

接口的优化理论上不属于APP弱网络的优化,但是这个的API性能的问题,确实在网络条件不好的情况下才暴露无遗。大家都在谈论服务器的好坏,设备的性能高低,其实,对于一个良好的Server来说,绝大部分拖延请求速度的地方都是在IO上。包括,磁盘读写的IO,SQL查询的IO等等。

常用的优化点:

1 . 慢查询监控

MySQL是支持慢查询日志监控的,我们能够在日志中准确的看出那一条记录的查询读写时间。具体操作大家可以查看:http://www.tuicool.com/articles/nmmimae

2 . 多次查询优化

尽量避免在For循环里面进行SQL查询!!!这个是我们最近被外包坑的心得。能够构造出一两句通过SQL查询的语句就尽量不要在代码里面处理,也不需要进行多次查询。

3 . 常用接口cache

这个cache的机制我不多说了,各式各样的cache框架,直接避免了与SQL打交道。个人觉得是不得已而为之,对于实时性要求过高的接口,还是不能采取。


图片优化

说到网络优化,绝大部分都是对图片的优化。

可以购买CDN了

CDN 是构建在数据网络上的一种分布式的内容分发网。 CDN

的作用是采用流媒体服务器集群技术,克服单机系统输出带宽及并发能力不足的缺点,可极大提升系统支持的并发流数目,减少或避免单点失效带来的不良影响。

公司里面使用的是阿里云的CDN服务

CDN说是可以使用最近的网络节点提供服务,避免网络传输中的消耗,但是真正的试验后我们会发现,CDN的优化毕竟有限,并不能起到体验质的飞跃。

换一个更快的图片格式webp

WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook

但WebP是一种有损压缩。相较编码JPEG文件,编码同样质量的WebP文件需要占用更多的计算资源。

WebP的图片格式介绍我自己也早有耳闻,但是却没有真正的使用过。

说的再多不如我们自己手动实验一下,能够压缩多少。我们尝试将系统自带的企鹅的图片进行转化,得到如下两张图片对比:

图片从原来的760k直接变成了121k,大小仅仅为原图的 六分之一,(⊙o⊙)!!!!不敢相信。

分别打开两张图片作对比,虽然说webp是失真压缩,我们在对比查看的时候如果没有很仔细的看,确实看不出来两图的区别。细节上webp确实存在一点瑕疵,但是想到1/6的压缩,这一点点瑕疵已经无所谓了。

不同网络的不同图片下发

图片的格式更换了,我们在想想图片的精度、图片的尺寸是否也能够按照不同的情况下做下发呢?

如(对于原图是600X480的图片):

  • 2/3G使用低清晰度图片——>下发300X240,精度为80的图片
  • 4G普通清晰度图片——>下发600X480,精度为80的图片
  • WiFi高清晰度图片(最好根据网速来判断,wifi也有慢的)——>下发600X480,精度为100的图片

我们同样的实验了一下,得到的结果如下所示:

理论上,在网络条件不怎么好的情况下,我们能够适应情况的降低图片的大小,从而加快整个APP的加载速度。

配合七牛使用不同的图片格式

Ok,可能很多朋友会跟我说,我艹,这么复杂的处理,不同尺寸、不同精度、不同格式的图片,我们得怎么存?我们是否每次产品方上传产品的时候都需要对图片处理,那么图床的压力得多大啊。有没有成套的解决方案?

答案是有的, 也就是我公司现在所采用的解决方案。七牛云存储(我不是广告,真心好用):

七牛云存储为企业提供图片云存储、音频云存储、视频云存储等非结构化静态文件的高速稳定安全云存储平台,快速拥有专属文件服务集群,七牛云存储用户免费享有CDN特权。

对于我们的研发来说,它们所提供的图片处理功能缺失不错。

如,我们可以在自己的仓库中设置需要处理的图片类型,如下图所示:

选择需要产生的不同图片格式,尺寸,精度模板。模板生成后,我们根据模板的内容就会得到一个参数,如下所示:

imageView2/1/w/640/h/300/format/webp/interlace/0/q/100

怎么使用呢?

如,我们在七牛上存储了一个我们自己的图片,得到的图片外链为:

http://7xujx4.com1.z0.glb.clouddn.com/o_1ank7b5fsm56af1js61g1e7js7.jpg

当然,这个图片是存储的是原图。

这个时候我们处于不同的网络条件下,希望更换尺寸、格式到上述描述的条件,我们只需要在连接上加上参数

http://7xujx4.com1.z0.glb.clouddn.com/o_1ank7b5fsm56af1js61g1e7js7.jpg?imageView2/1/w/640/h/300/format/webp/interlace/0/q/100

就将原图转化为宽度640,高度300,格式为webp,精度为100的图片了。(⊙o⊙)!!!!!


让用户感觉到快

网络条件不好的条件下,我们做再多的优化也是如同治标不治本,很难达到与WiFi环境下一样的体验。既然,网络请求、缓存、压缩的方案都采取了,那么你可以想一下,是否是自己的交互,让用户感觉到卡顿、慢?

具体怎么让用户感到快,针对不同种类的APP操作不一样,这里我举几个例子:

  1. 不从0开始的进度条

    如下图所示,不管网页的加载进度如何,不管网络条件如何,uc浏览器的加载进度始终是从50%起,并且停留在大约98%进度左右的地方。给予用户一种,网页马上就要加载完了的感觉。

  2. 先显示文字在加载图片

    同样是在Webview之中,图片或者多媒体的加载速度肯定是远远慢过文字的加载速度的。由于不同的webview显示和渲染效果不同,我们可以先让webview先显示文字,在显示图片。给用户一种可以先预览整个网页概况的感觉。

    即:

//本身含义阻止图片网络数据
webSettings.setBlockNetworkImage(true);

// 网页载入完成后,将阻塞的图片加载放开。

//解除数据阻止
webSettings.setBlockNetworkImage(false);

当然,如果是在非webview中,为了避免网络资源的消耗,也可以模仿类似的操作。

3 . 常用信息加入缓存机制、增量更新

对于APP来说,没有网络就不可用是一个硬伤,如果客户端的业务与整个公司的业务对时效性要求没有这么强烈。那么,我们是可以做到一些缓存的机制的。

如,对于今日头条APP来说,如下图所示,它们首页新闻列表,每次进入都是先从缓存中拿去出来的。每一次的刷新取得的数据,都是与服务端所推送的数据的差值(增量更新),而不是整个listview刷新。

/*

* @author zhoushengtao(周圣韬)

* @since 2016年7月16日 下午16:47:20

* @weixin stchou_zst

* @blog http://blog.csdn.net/yzzst

/

时间: 2024-10-25 20:57:30

APP弱网络条件下,体验优化之道的相关文章

webrtc native app 在 低带宽下的优化

本文原创自 http://blog.csdn.net/voipmaker  转载注明出处. 当采用webrtc 底层库开发android,ios 原生应用时,由于移动端不像pc端,在带宽稳定性,系统性能上都相差很大,所以针对移动设备的webrtc需要做一些优化以提高通话效果, 比如 webrtc中ice的keep alive包发送过于频繁,在2g/3g网络时带宽有限,而webrtc的ice keep-alive包在通话过程中的频率过高(480毫秒一次),导致大概占用1kb的带宽, 所以可以通过修

GPRS网络条件下TCP、UDP的比较

使用场景:使用GPRS的场合. 名词解释:NAT(Network Address Translation,网络地址转换) 中国移动的GPRS网络是使用的虚拟IP地址,需要通过移动的虚拟地址转换路由器进行与internet之间消息的转发,具体实现过程: 1.NAT路由器得到从内网IP地址发来的请求: 2.把该请求的IP源地址,端口号替换成一个真实的internet IP地址和一个空闲端口号,并在内部表格中添加相应翻译信息的表项: 3.把信息传递给远端 今后NAT 路由器将维护该表格中的表项,如果从

使用热点模拟弱网络环境

在测试手机app的时候,我们经常需要测试一下app在弱网络条件下是否有问题,下面一个方法是通过使用macbook 分享热点,然后通过软件限速来模拟弱网络. 1. macbook通过网线上网,然后wifi分享做热点. System Preferences -> sharing,选择“internet sharing”,“share your connection from”选择“ethernet”,“to computers using”选择“wi-fi”. 2. 如需使用密码,可在wi-fi o

fiddler扩展模拟弱网络环境设置

今天在qq群中有人问到怎么模拟app弱网络环境,我查了下资料,记得之前做测试的时候是设置fiddler断点,app请求后止于fiddler断点,app一直拿不到响应结果就应该要给出网络请求失败的提示,这种方式太麻烦,对每个接口每次请求都要独立去打个断点,其实fiddler中有个ruler菜单,里面可以扩展修改fiddler的配置,例如现在app有处理10秒接口无返回就提示网络请求失败,可以在fiddler中设置响应时间延迟模拟网络差的情况,做如下设置,那直接上图, 首先我的fiddler版本如下

Network Emulator for Windows Toolkit(模拟弱网络环境的软件)

前言和下载地址 用户会在各种网络环境下使用我们的app,pc应用,我们决不能祈求用户的网络环境都是稳定的,因此我们需要模拟出弱网络的情况,用来测试我们的APP在弱网络环境下的表现如何. Network Emulator for Windows Toolkit(NEWT),简称NEWT.模拟移动端应用,在pc端创建wifi热点,使用方式为独占式,手机连接这个热点,既可以开始测试. 下载地址:https://blog.mrpol.nl/2010/01/14/network-emulator-tool

用户体验优化--20190802

一.产品设计除了易用性以外,需要考虑用户的使用场景 用户的使用场景,涉及到很多具体的条件 从用户打开应用开始使用,我们需要考虑,各种客观因素,如:用户的网络情况.用户上一次关闭应用时候的情况,根据不同的类型来考虑进入应用时候的展现方式 前置条件一(是否有网络的情况) 音乐类,视频类的应用,是一种可以在网络和无网络条件下都是用的产品 当用户有网络的时候,目前主流的三大音乐应用都选择进入首页,即展示最重要的音乐信息及内容 当没有网络的情况下,三大应用都进入用户的“我的”界面,因为用户可以选择使用本地

弱网络下通讯研究

导读:本文介绍了常见的移动网络以及弱网络出现的场景,然后针对即时通讯APP的网络通讯方案进行了解,在此基础上,对互联网APP网络通讯的优化方案给出一定的建议. 1    移动网络 1.1 手机网络 运营商 手机网络 含义 理论峰值 移动 G GSM 114Kbps E EDGE 384Kbps T/H TD-SCDMA R4, 378.2Kbps 4G TD-LTE 80M~1Gbps 联通 G GSM 114Kbps E EDGE 384Kbps 3G/H HSDPA, 3~3.5G 7.2M

App的网络环境测试和性能优化

1. 网络环境测试一般是先用网络损伤模拟仪或mock工具模拟常见的七种损伤和5种网络环境,然后再国内外城市采样的方式(带宽和延时)组合测试生成报告, 下面是一些统计图 2. 采样点的选择一般都是根据自己server收集的用户信息.如果新app就要参考近品/竞品或第三方的统计数据拍脑袋 3. 从测试的角度,应该建立实时监控的web portal.其实测试的目的除了保证产品发布的质量.更重要的是为优化提供依据,所以report最后一部分都是issue list 和optmize advice,当然测

携程App的网络性能优化实践

本文转载至 http://kb.cnblogs.com/page/519824/ 作者: 陈浩然  来源: InfoQ  发布时间: 2015-04-29 23:42  阅读: 4018 次  推荐: 16   原文链接   [收藏] 摘要:在4月23日~25日举行的QCon全球软件开发大会(北京站)上,携程无线开发总监陈浩然分享了<移动开发网络性能优化实践>,总结了携程在App网络性能优化方面的一些实践经验.在2014年接手携程无线App的框架和基础研发工作之后,陈浩然面对的首要工作就是Ap