后端交互如何在像 iOS Activity 应用程序这样的应用程序中工作,其中需要向用户显示多天的数据?
Posted
技术标签:
【中文标题】后端交互如何在像 iOS Activity 应用程序这样的应用程序中工作,其中需要向用户显示多天的数据?【英文标题】:How does backend interaction work in an app like iOS Activity app where there is multiple days of data to be shown to the user? 【发布时间】:2020-01-06 21:24:37 【问题描述】:我有一个应用程序通过外部设备收集用户数据一段时间,然后将其保存到后端。用户登录后,该应用程序会从后端获取该数据并将其显示给用户。
用户可以滑动以在几天、几周、几个月之间切换。 它具有类似于活动应用程序或日历应用程序的功能。
数据的后端单位是一天。例如,一个月的数据每天会有 30 个 JSON 对象。
从后端获取应用中数据的正确方法是什么?
我在考虑两种方法。
当用户滑动时,从后端获取数据。 我还在考虑设置一些阈值,例如,如果用户滚动/滑动超过某一天,则将获取下一个天块。
在本地保存数据。 这里的想法是应用程序将获取数据并将其存储在 Core Data 中,然后应用程序从本地存储中提取数据并将其显示给用户。我不确定这一点,因为这会继续占用手机上的大量存储空间。
我认为它与无限滚动应用程序有关,但在这种情况下,可用的数据来自前几天。
我不知道用什么正确的技术术语来描述这个,我偶然发现了一些提到“分页”这个词的帖子。
我想知道的是如何处理这个问题。 1. API 调用需要多久发生一次后端? 2. 有必要将这些数据存储在Core Data中吗? 3. API 调用何时应该碰巧获取数据以使应用感觉响应?
【问题讨论】:
【参考方案1】:如何以及是否缓存您的数据以及如何以及何时更新缓存实际上是一个复杂的问题,它取决于很多因素,例如数据更改的速度以及检索的成本。通过为您提供最终的一致性和来自服务器的更新(即 firebase 或 graphQL watch),存在许多技术来为您解决这个问题。如果您想手动实现它,在您的情况下,数据会上传一次并且永远不会更改。在这种情况下,直截了当地说您可能应该在本地缓存它,并且仅在它丢失时才获取它(即您登录到新设备)。这很容易做到:
-
当您显示数据时,请检查您距列表中最后一项的距离是否为 n 项或更少,服务器是否有更多数据以及您当前是否未加载。如果是这样,请获取更多项目并将 isLoading 设置为 true。
如果您有更多项目,请更新您的缓存和显示,将 isLoading 设置为 false。如果您没有获得更多项目,因为服务器说没有,那么 set has more data 为 false 并将 isLoading 设置为 false。
【讨论】:
嗨乔希,感谢您的回复。前几天的数据没有变化,对于当天,数据可能每小时都在变化。我们有一个现有的 django 后端可以接收 API 请求。仍在定义我们要如何获取数据。例如,是否将日期范围作为参数来接收每天的数据数组。假设核心数据是我的本地缓存。那么在后端和本地缓存之间建立同步机制然后视图只从本地缓存中获取数据是正确的方法吗? 在这样的用例中,数据是一次获取一天,还是分块获取多天? 您绝对希望有一个日期范围(或一个开始记录和一个计数),以便以后可以轻松更改页面大小。缓存永远是真相的来源;即,您有一个订阅缓存的 fetchedResultsController,当 api 调用返回时,它会更新缓存,因此 viewController(或 viewModel)会自动更新 tableView。您需要与后端团队讨论创意页面大小是多少。如果有效负载非常小,一次获取很多天可能是有意义的。无论页面大小如何,您的分页逻辑都是相同的,因此您可以随时更改它。以上是关于后端交互如何在像 iOS Activity 应用程序这样的应用程序中工作,其中需要向用户显示多天的数据?的主要内容,如果未能解决你的问题,请参考以下文章