用户手机设备复杂度高
或许大家都知道,做国际市场,你面临的是更复杂的设备属性,习惯了国内的环境,大家觉得还有人在用低于512M Ram的机器不可思议,但是这批用户,正是国际的主力军,尤其是针对东南亚市场,那么如何来针对这批机器来做优化呢?
当年积累了一定海外用户群体数据的时候,你会发现不管是崩溃率还是卡顿率都会很受打击,本来UI给出的酷炫效果,到用户手里就是个渣渣,还造成了各种卡顿或者anr,吐槽不断,另外东南亚用户设备还偏低,当然,近些年一直在发展,设备都在不断降低成本,很多廉价机器的推出也让设备性能不断往前,但是毕竟需要一个过渡期。
回到主题,我们做某些酷炫动画,比如某些下拉回弹,页面切换,粒子效果绘制的时候,我们需要评估用户设备的承受度,该不该用高清图绘制,该不该去除部分复杂动画效果?
可能你会说,我们可以给出一个标准,让一批用户来开启,一批用户关闭,甚至我们给出一个设置开关项,来让用户自由选择。确实,我们也这样干过,但是,这样真的够智能了吗? 难道用户需要体验完,还要寻寻觅觅到你设置开关项,找到关闭动画,才能摆脱卡顿。难道我们不可以运行时,检测到设备的场景吗?
答案是可以的,当时我们有相关自己定义的性能参数,比如内存,分辨率大小等来定义我们是否开启关闭AC渲染等,另外其实facebook内部也有类似的,那就是device-year-class
what is device year class?
它是facebook官方推出的开源工具,主要用于通过检测手机上面的各种参数,来评估当前设备的‘上市年份’
github地址
what can this do?
- 检测出不同设备的上市年份,比如2009 2012 2013 2014等
- 利用年份参数。来形象映射描述出设备的性能,大家都知道,越早上市的手机,性能也差,反之越好,这是社会规律,我们可以用统计字段来收集,进而评估我们用户群体收集的性能情况
下面是fb提供的条件参数:
Mappings as of this writing (RAM is a ceiling):
RAM | condition | Year Class |
---|---|---|
768MB | 1 core | 2009 |
2+ cores | 2010 | |
1GB | <1.3GHz | 2011 |
1.3GHz+ | 2012 | |
1.5GB | <1.8GHz | 2012 |
1.8GHz+ | 2013 | |
2GB | 2013 | |
3GB | 2014 | |
more | 2015 |
- 针对不同年份的手机,来开启关闭某些动画效果等
how to use
- compile in your project
|
|
- set up in your code
|
|
- stat your device year data
|
|
整体下来,接入非常简单,快捷,大家也可以进入sample版来体验试玩,不过,目前来,year-class也存在一些缺陷:
- [维度缺乏] 仅仅采取了cpu核数,时钟频率,内存维度,对于某些情况,我们可能还需要分辨率大小,比如耗电 渲染等
- [非动态参数] 这个更多的也是静态设备分析,并不能很好的衡量用户app当前运行的实时状态,比如可用内存过低,cpu时间片给切割严重等实时场景
- [缺乏直观描述] 其实这个lib更多的用于评估机器性能,而fb给出year维度,可能还不够直观,我们无非想知道机器的高中低情况或者占比,我们可以修改源码,定义某些参数维度是高端机,中端,低端,这样做性能交流也更直观了。
用户网络复杂度高
在做资讯类app时,比较头痛的是国外用户的网络, 国外的运营商带宽和时延场景更加复杂,包括国外里面虽然显示用户是wifi连接,但速度却比蜗牛还慢,你会发现网络报表里面wifi速度可能赶不上3g. Fxck.
一方面分析是由于连接了各种公共免费wifi或者个人热点. 一种是在wifi不稳定或者信号比较差的环境,比如电梯等,那么按照我们惯常的思维去评判一个用户的网络性能,就不能仅仅依赖于 NetworkUtil.isWifiNetwork() 这可能确实会颠覆我们之前的思维,但国外确实如此。
1 具备实时网络质量衡量的标准
有一个实时衡量用户网络状态的工具,除了network.isConnected(),而是网络质量,那我们该如何来评估呢?
facebook提供了一个网络质量检测sdk:network-connection-class
它可以通过采样来识别到当前网络的质量好坏,定义出几种级别:
Poor/Moderate/Good/Excellent/Unknown
|
|
我们可以利用不同的网络级别来做不同的策略:
- 加载不同size或者质量的新闻图片
- 在网络好的场景进行文章预加载操作
- 预测是否需要自动播放视频,而不单单是wifi下条件
如何接入?
- compile class
|
|
- 在需要关注网络质量的地方实现网络变化接口,并且注册到fb的ConnectionClassManager
|
|
如果不需要监听变化,则可直接:
|
|
- 定义网络质量采样器来采集数据
|
|
- 执行采样后,我们就可以知道网络质量数据了
具体教程查看-> (https://github.com/facebook/network-connection-class)
2 针对复杂网络来实时体验优化产品
除非监控实时的网络连接质量,我们在需求初期也需要在复杂环境下进行产品体验和测试,比如,我们利用fb提供的著名的ATC工具,来模拟各种2G/3G等自定义延时的网络,进而来应对调整不同的体验。fb内部也是通过在实验室利用ATC工具来做测试产品。
ATC工具使用教程:[ATC](http://facebook.github.io/augmented-traffic-control/)
3 其他维度:
利用大数据来分析,比如假设用户的生活情况规律是固定的,用户大部分的网络情况是高中低,我们有个算法值,下次根据这个来做差异化。
总结
接入device-year-class,分析出目前我们产品机型的优劣,形象并及时了解到机型优劣变化,从而针对性的定制需求,减少卡顿和崩溃率,
接入network-connection-class,了解线上用户访问网络的质量好坏,定义出/good/excellent级别,优化产品体验,进而预加载或者压缩,提升用户加载内容等网络体验。
- 其实fb这些工具并没有用到很黑科技的东西,都是通过基本标准的定义来规范出机器好坏,而网络质量是通过采样来计算,定义出网络标准
- 该sdk目前我还没有试过线上效果,不确定实际情况如何
https://github.com/facebook/network-connection-class
https://github.com/facebook/device-year-class
转载声明: 本文转载前需与作者联系并标明文章出处