gpt4 book ai didi

android - (Xamarin)应用程序中 REST 调用的本地预加载和缓存层以减少等待?

转载 作者:行者123 更新时间:2023-11-29 11:41:39 25 4
gpt4 key购买 nike

我对移动开发和 Xamarin 比较陌生。我正在制作一个完全依赖于 REST API 的应用程序,很明显,尽管速度非常快,但在应用程序周围单击是一种非常糟糕的体验,因为负载持续不断。

我提出的解决方案是在用户加载应用程序时异步调用许多 get 端点,然后缓存一小段时间。

我自己可以很容易地实现这一点,但我最终会重新投入轮子来解决我认为每个使用 REST API 的应用程序都会遇到的问题。

所以我的问题是:

在 (Xamarin) 应用程序中预加载和缓存 REST 数据的最常见方法是什么?

是不是在app本地服务区之间做一个缓存层,然后启动一个异步任务缓存我们期望用户打开的端点?

最佳答案

你可以制作一个基于缓存的图层。您需要考虑是希望它仅保留在内存中还是同时保留在内存和磁盘中。

我展示了一个多级(内存、磁盘、网络)缓存系统。我已经成功地使用了这个架构。它适用于单例类和 C# 事件。可以有很多订阅者给处理人员。因此,当数据可用时,UI 屏幕可以订阅接收,并且可以多次回调每个请求。其设计是它尽可能快地返回数据(首先从内存中返回),但仍会调用磁盘和网络来刷新数据。UI 可能会被回调多次,因为它会使用内存中的数据快速回调,然后在网络请求完成后再次回调。为了帮助线程安全,您可以使用锁或使用线程安全集合,如 ConcurrentDictionary 或 ConcurrentQueue。还有很多边缘情况需要考虑,但这是具有事件的多级缓存系统的基本架构。

// pseudo code
class CacheHelper
{

// todo: create singleton

RequestData()
{

if ( data in memory)
{
// this quickly gets the app some data
Fetch data from dictionary/list/etc
NotifySubscribers( this, data)
}

if ( data in disk )
{
// this gets data persisted after user force closes app then reopens
Fetch data from sqlite, file storage, etc
NotifySubscribers( this, data)

copy data from disk to memory
}

// always request data from server too to keep it fresh
RequestLatestDataFromServer(); // you can put a cap on this to limit network requests
}

HandleRequestLatestDataFromServerComplete( obj, args)
{
// this is the data returned from server
ALSO copy server result to memory and copy to disk

NotifySubscribers( this, data);

}



/// To use this in a UI class
ViewDidAppear()
{
CacheHelper.Instance.HandleRequestLatestDataFromServerComplete += ReceivedData;
}

ViewWillDisappear()
{
CacheHelper.Instance.HandleRequestLatestDataFromServerComplete -= ReceivedData;
}


void ReceivedData(Object obj, EventArgs args )
{
// update your UI
// This may get called a few times, for each level of cache retrieved
}

关于android - (Xamarin)应用程序中 REST 调用的本地预加载和缓存层以减少等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46196813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com