繁体   English   中英

ios App通过预先请求数据来提高网络性能

[英]ios App improve network performance by requesting data up front

我正在编写一个应用程序,该应用程序从一些网络来源中提取数据:1)博客帖子列表(UITableViewController)2)视频列表(具有嵌入式UIScrollView的UIViewController)3)图像列表(具有嵌入式UIScrollView的UIViewController )

现在,有一个带有菜单的主屏幕,当您按下其中一个按钮时,destinationViewController(如上所述)是按需加载数据的工具。 我注意到这很慢,尤其是在使用蜂窝数据连接而不是wifi时。

我当时正在考虑创建一个类,该类预先请求所有数据,并在每次重新输入应用程序时将其启动。 有没有人建议可以帮助我回答以下问题?

1)我可以使用任何类,框架或现有的i代码在一个地方启动这些请求吗? 2)我的目标视图控制器(如上所述)如何获取数据? 3)如果我的目标视图控制器碰巧在数据可用之前被调用,如何通知我数据已经准备好? 4)我应该采用更好的策略吗?

感谢您的帮助。

谢谢,贾斯

1)RestKit通常被视为标准的Web交互框架之一http://restkit.org

2)RestKit提供了-[getObjectsAtPath: parameters: success: failure:]或post之类的方法,它们将提供成功的响应。 此外,它可以通过映射将响应直接转换为各个对象。

3)通常,我会发布一个对该请求唯一的通知,任何感兴趣的控制器都将收到通知,响应位于侦听器内的notification.object 另外,大多数网络请求都提供了一个回调处理程序,您可以在其中直接更新UI。

4)我建议不要先占式加载,因为您将资源用于可能不实际使用的东西。 我的建议是将您的呼叫分解到最小的级别,然后在发布通知时,将数据插入到UI中。

让我烦恼的是,将创建您提到的请求类,并在AppDelegate的applicationDidFinishLaunching中启动所有请求方法。 我可能还会为要获取的每种对象类型创建自定义NSObject,并在每个请求类方法中,将获取的数据转换为所述对象,然后在下载每个对象时将其缓存到磁盘中。 然后在您的视图控制器中,根据需要获取缓存的对象。

缓存时,请确保使用每个100%唯一的密钥缓存每个对象,因为在开始新的下载之前,您将要对当前本地缓存进行检查。 我可能会将文件类型和文件名串在一起,然后将该字符串设置为缓存对象的键。

要在请求类方法中对当前缓存进行检查,请显示“如果当前缓存包含键对象:uniqueKey ...,则不执行任何操作。否则,请开始下载并在完成后缓存对象。”

另外,还要在视图控制器中运行检查,因为您还将要处理视图控制器请求缓存对象但尚未下载的情况。 因此,类似“如果当前缓存中有key:key的对象,太好了!使用它。否则,请开始下载...缓存它...然后给我回电,以便我可以在使用时使用它向最终用户显示加载消息。”

我肯定还有其他情况需要处理,但这是我要遵循的理论方向。

编辑:

看看这个,它可能对您有很大帮助。 我认为它也使用Ego缓存(如果您不想编写自己的缓存方法): https : //github.com/Infusion-apps/Download-Manager

编辑2:我也同意@RyanDignards点#4。 如果可能,请避免获取不需要的数据。 但是,只有您真正了解您的UI / UX和应用程序功能,我的建议是假设您的最终用户很有可能将使用您的应用程序仅仅是出于消费您提供的内容的目的。 因此,他们最有可能想要阅读博客文章,观看视频等。来电取决于您,如果您认为用户有更多机会查看所有内容,我会选择预加载路线,因为没有什么比烦恼更让用户生气。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM