美文网首页你可不能输!代码改变世界iOS开发技巧
app提速:通过预加载数据提高视图显示速度

app提速:通过预加载数据提高视图显示速度

作者: windgo | 来源:发表于2015-12-16 17:09 被阅读1285次

通过预加载数据提高视图显示速度

1. 现状

以查看用商品情为例,在商品列表视图,点击列表后,进入商品详情视图。商品详情视图加载后,请求数据,数据返回后,绘制界面。
在进入详情视图,请求数据,数据还未返回的时间里,用户看到的是一个旋转的菊花以及一个空白的视图。这个时间可能是一个较长的等待时间。


串行的视图加载的流程

从图中可以看出,整个流程是串行的。其中用户浏览列表视图和加载数据是占用时间相对较多的环节,而用户点击查看详情的事件,以及绘制商品详情视图所花费的时间是较短的。用户浏览列表视图的时间是不可能缩短的,或者说难以通过代码控制的,但是加载数据这个过程应该是可以的。理想的流程应该是这个样子:


采用了预加载的流程

2. 解决的方法

正如上一副图所示,数据加载的等待时间,可以放在用户点击进入商品详情视图的界面之前,正在浏览列表视图的时候同时进行,其中的关键是猜测用户将进入详情视图。
用户点击进入详情视图的前一个事件,应该是详情在列表里对应的cell进行了显示。只有在列表视图上可见的商品,才有可能被点击,进入详情视图。
浏览一下UITableViewDelegate的方法,可以知道,tableView(_:didEndDisplayingCell:forRowAtIndexPath:)这个方法是比较合适的,它将在某个Cell显示之后进行调用。这时候,用户也看到了商品的简介,很可能会点击。而点击之前,必然会有这个方法的调用,而且用户不会马上点击,总有一个时间(当然,可能很短,半秒钟,或者一秒钟,但是这个时间通常来说,足够加载数据了。)

从列表到详情的流程

3. 其他

对于其他的视图(非UITableView为主的),思路是一致的,提前加载可能进入的视图的数据,在用户点击的时候,直接创建控制器,设置数据。通常来说,其他的会更简单一点。一般来说,只要在前一个视图Load显示完之后立即加载可能进入的下一个视图的数据就可以了:

其他类型视图的加载流程

相关文章

网友评论

  • Will卓然:有 Demo 吗?
  • Neo_joke:如果没有用户行为分析,只有交互上捕获行为进行分析,当然是不可取的
    windgo:@Neo_joke 是的,具体问题还得具体分析。
  • 0598effcb323:你这样是为了优化而优化。
  • caiwenshu:不知道楼主是否在某一个场景中运用到了!觉得开发成本和达到效果不成正比:smile:
    windgo:最近想着优化下APP某些功能,正在用这个思路。
  • luyanpeng:这样很耗流量哦 +1
  • 爃少:这样很耗流量哦
    爃少:@itwindgo 还有一种运用比较多的预加载是在商品列表页,通过监听滚动条是否快到达屏幕底部,然后向服务器加载下一页的内容,不用每次都到底部再拉一下刷新。
    windgo:@爃少 是的,有可能会浪费流浪,具体实现的时候,有很多细节需要考虑和权衡。可以考虑按照网络环境决定是否预先加载,在蜂窝网络下,不进行预加载数据,在wifi环境下,可以预加载数据。

本文标题:app提速:通过预加载数据提高视图显示速度

本文链接:https://www.haomeiwen.com/subject/otxphttx.html