zoukankan      html  css  js  c++  java
  • app优化之流量节省

    前言:“客户端上传时间戳”的玩法,你玩过么?一起聊聊时间戳的奇技淫巧!,其实这个类似于数据版本号的东西。

    缘起:无线时代,流量敏感。APP在登录后,往往要向服务器同步非常多的数据,很费流量,技术上有没有节省流量的方法呢?这是本文要讨论的问题。

    问题一:APP登录时需要拉取什么数据?
    答:APP登陆时,一般要拉取两类数据,一类是“id列表型数据”,一类是“信息详情型数据”,以微信为例,需要拉取
    (1)好友列表List<user-id>,即所有好友的id(id+name)
    user_frined{uid, friend-uid, friend-name}
    (2)群组列表List<group-id>,即所有加入群的id(id+name)
    (3)群友列表Map<group-id, List<group-user-id>>,所有群友的id(id+name)
    (4)好友详情Map<user-id, User>,所有好友的详情(昵称,备注,标签,地区,相册等)
    user{uid, nick-name, memo, locate, tag}
    (5)群组详情Map<group-id, Group>,所有群组的详情(二维码,公告,是否免打扰等)
    (6)群友详情Map<group-id, Map<user-id, User>>,所有群友的详情(昵称,备注,标签,地区,相册等)
    (7)其他,例如离线消息…

    问题二:能不能在登录的过程中不拉取这些数据,而在登录后拉取?
    答:如果登录时不拉取,登陆后刷好友列表,刷群列表,群成员会很慢。
    如果登录时拉取,登陆过程可能会很慢(微信的“大月亮背景”要等多长时间?QQ登录要等30s?)。
    为了保证登录后的体验,一般是在登录过程中拉取。

    问题三:能不能直接复用客户端本地的数据?
    答:不能直接复用客户端本地的数据,因为不能确保本地的数据是最新的。

    核心问题:每次登录都需要拉取,太费流量了,有没有优化方法?
    答:常用优化方法有两种
    (1)延迟拉取,按需拉取
    (2)时间戳

    问题五:延迟拉取,按需拉取为什么有效?为什么能够减少拉取流量?
    答:用户在使用APP的过程中,有些数据是一定会使用到的,有些数据是不一定会使用到的。对于一定会使用到的数据,登录时拉取可以提升后续用户体验。对于不一定会使用到的数据,登录时拉取可能浪费流量,这些数据如果进行“延迟拉取”,可以节省流量。

    问题六:哪些数据不登录后不一定会使用,可以延迟拉取?
    答:这个问题的答案和业务紧密相关,以微信为例
    一定会使用到的数据:好友列表(主页面要展示user-name),群组列表(主界面要展示group-name)
    不一定会使用到的数据:好友详情,群组详情,群友列表,群友详情
    故,对于微信,登录时只需要拉取好友列表(id+name)与群组列表(id+name)即可,而其他数据,等用户真正点击和使用时再拉取即可,这样就可以大大减少拉取流量。

    问题七:时间戳为什么有效?为什么能够减少拉取流量?
    答:本地数据不能直接使用的原因是,不确定数据是否最新,拉取服务器时间戳与本地时间戳进行比对,如果本地是最新的数据,就能避免重新拉取。id列表数据的变化频度是比较低的(增加id,减少id),时间戳机制非常的有效。

    问题八:加入时间戳机制后,数据拉取流程有什么变化?
    答:假设有100个好友,以好友详情数据的拉取为例,没有时间戳之前,直接向服务器拉取这100个好友的详情数据。
    在有了时间戳之后,数据拉取流程变为:
    (1)先拉取100个好友的时间戳
    (2)客户端将100个好友的时间戳与本地时间戳对比,找出差异,假设有10个好友的信息发生了变化,时间戳改变了
    (3)拉取10个有变化的好友的信息
    优点是:大大减少了数据传输量(由拉取100个好友,降低到拉取10个好友)
    缺点是:增加了一次网络交互(原来直接拉取,现在需要分别拉取时间戳与差异数据)

    问题九:使用时间戳的同时,能否降低网络交互次数呢?
    答:可以!
    客户端对时间戳的使用,往往采取“客户端拉取时间戳”+“客户端比对时间戳”+“客户端再次拉取差异数据”的方式进行,“时间戳比对”的的CPU计算发生在客户端,其实,这个计算可以转嫁到服务器,步骤为:
    (1)客户端上传100个好友的时间戳
    (2)服务端收到客户端上传的时间戳,与最新时间戳对比,找出差异,假设有10个好友的信息发生了变化,服务端可以直接将有差异的10个好友的数据返回
    优点是:客户端减少了一次网络请求
    缺点是:比对时间戳差异的CPU计算由“端”转嫁到了“云”

    问题十:你怎么知道微信是这么做的?
    答:我不知道微信是怎么做的,微信比较出名,所以标题党了一把,抱歉。“客户端上传时间戳”的方法,58帮帮APP是这么做的,希望对业界同仁有启示作用。

     转自:http://www.habadog.com/2015/10/23/wechat-use-less-data/

  • 相关阅读:
    HDU2027 统计元音 一点点哈希思想
    湖南工业大学第一届ACM竞赛 数字游戏 字符串处理
    湖南工业大学第一届ACM竞赛 我素故我在 DFS
    HDU3293sort
    HDU2082 找单词 母函数
    HDU1018 Big Number 斯特林公式
    湖南工业大学第一届ACM竞赛 分糖果 位操作
    UVA 357 Let Me Count The Ways
    UVA 147 Dollars
    UVA 348 Optimal Array Multiplication Sequence
  • 原文地址:https://www.cnblogs.com/duhuo/p/9728934.html
Copyright © 2011-2022 走看看