对于数据共享,我应该选择 Provider 还是 Local Storage

Posted

技术标签:

【中文标题】对于数据共享,我应该选择 Provider 还是 Local Storage【英文标题】:For data sharing either Provider or Local Storage should I select 【发布时间】:2018-07-23 14:55:27 【问题描述】:

由于LocalStorage 的速度慢,我想使用Providers 进行数据共享。那么您能否告诉我,由于 Ionic 3 移动应用程序中的这种方法,我是否必须面对任何问题?

注意:提供者是singleton

这样声明:

project.ts

@Injectable()
export class ProjectProvider 

project: Project

constructor(()


在我需要时在任何其他页面上使用:

home.ts

constructor(private projectProvider: ProjectProvider) 

    ionViewDidEnter() 
       this.projectProvider.project = val;//after this I can use this anywhere
    

我用上面的方法代替了这个:

 const project: Project = await this.storage.get('project');

在这里你可以看到我必须等到它检索到。这是我的应用程序的一个问题,因为我的客户需要开发一个页面上几乎没有加载器图标的应用程序。那么我是否必须面对这种方法的任何问题?

【问题讨论】:

为什么不在 Storage 调用中使用 promise?而你使用 SQLLite 代替 localstorage,对吗? 自从我来自C#世界以来,我真的很喜欢这种模式:)。以及我需要立即使用该数据的用例。 @Pterrat 是的SQLLite. 好的,我认为您的代码是正确的。你不会有任何问题。也许你可以提高你的 ProjetProvider 关于初始化项目的价值 我今天实现了完全相同的模式,并且我也意识到任何意想不到的问题。即使有承诺,localstorage 的性能也太差了。 【参考方案1】:

如果用户将刷新页面(向下推页面将刷新),提供程序将丢失数据,您可以将提供程序用作单例,但它们不适合持久数据。使用提供程序在组件之间共享数据。

【讨论】:

我的应用无法刷新页面。不,拉动刷新。我也将提供者用作单例。现在,你的想法是什么?还是这样不好?因为我的用例不同。我不喜欢在页面上使用加载图标。 (即我喜欢。但我的客户不喜欢:D) 您可以从本地存储预加载并将其放在提供程序上,一种“缓存”。 希望你不理解我的用例。我不喜欢等到数据来自缓存或本地存储。那么我有哪些选择呢?感谢您的反馈。

以上是关于对于数据共享,我应该选择 Provider 还是 Local Storage的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Provider实现简单的购物车

Flutter Provider框架实现简单的购物车

Reg共享内存设计

Flutter状态管理-Provider的使用和源码解析

对于通过 HTTP 对公共地理位置数据进行可扩展的频繁读取/写入,我应该选择哪种解决方案?

对于我的 iOS 笔记应用程序来说,这是最好的 iCloud 方法,其中包含文本、照片、音频和绘图笔记。我应该选择文档存储还是 CloudKit?