Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用本地数据库是减少云数据库数据读写的好方法吗?_Javascript_Reactjs_React Native_Google Cloud Firestore_Local Storage - Fatal编程技术网

Javascript 使用本地数据库是减少云数据库数据读写的好方法吗?

Javascript 使用本地数据库是减少云数据库数据读写的好方法吗?,javascript,reactjs,react-native,google-cloud-firestore,local-storage,Javascript,Reactjs,React Native,Google Cloud Firestore,Local Storage,我在React本机应用程序中使用Cloud Firestore,并试图将读/写操作降至最低。我只是想使用一个本地数据库,这样从云端获取的所有数据都保存在本地存储中,但我会添加一个快照侦听器,以便在用户启动应用程序时侦听更改 这是实现我目标的好方法吗?若否,原因为何?如果是,您对其实施有何建议?没有,这不是一个好方法 缓存数据通常是一个好主意,但是在DBMS层实现这一点需要编写大量代码来实现尚未定义的缓存机制。这是一个坏主意的原因是,在客户端上运行的JavaScript已经可以访问一个数据层,该数

我在React本机应用程序中使用Cloud Firestore,并试图将读/写操作降至最低。我只是想使用一个本地数据库,这样从云端获取的所有数据都保存在本地存储中,但我会添加一个快照侦听器,以便在用户启动应用程序时侦听更改


这是实现我目标的好方法吗?若否,原因为何?如果是,您对其实施有何建议?

没有,这不是一个好方法


缓存数据通常是一个好主意,但是在DBMS层实现这一点需要编写大量代码来实现尚未定义的缓存机制。这是一个坏主意的原因是,在客户端上运行的JavaScript已经可以访问一个数据层,该数据层具有在运行时环境中已经实现的定义非常好的缓存语义-http

我不得不指出,这里的另一个(目前被接受的)答案完全不正确,或者至少有几个原因会让人产生误解

首先,Firestore不使用HTTP,查询结果永远不会由典型的浏览器缓存维护。答案中关于HTTP缓存语义的说法根本不适用

其次,Firestore SDK使用内部缓存,这在Android和iOS上是默认启用的,因为它的缓存感几乎总是对最终用户有利。Web应用程序也可以很好地启用此缓存。它需要一行代码。客户端脱机时将查询此缓存,如果需要缓存结果,可以直接查询

第三,对于必须完全脱机可用的应用程序,添加额外的缓存或持久性层实际上是非常必要的。Firestore并非设计为完全脱机使用,因此对于某些应用程序,有一个本地首选选项是必要的。额外的缓存可以作为一种云备份与Firebase同步


总而言之,这个问题在技术上对于堆栈溢出来说太宽泛了,需要通过对话来了解启用Firstore的缓存是否值得,或者在其上添加一个额外的缓存。但是,客户机缓存是个坏主意这一点并不明显是错误的。

对于非现场产品和库的意见和建议对于堆栈溢出来说是离题的。@DougStevenson的建议是最后一件事,第一件是其他人对本地DB的意见,用于云读/写简化编程问题。您是否有代码无法按预期方式进行共享?公平地说,这是一个系统设计问题,这里没有足够的信息给出“正确”的答案。我们不知道你打算如何衡量“好”。您试图解决或优化的具体用例是什么?您是否打算对您的解决方案进行基准测试?怎么用?到目前为止,您所编写的代码是否遇到了任何具体问题?阅读本文可能会有帮助,以便提出一个更具体的问题,但这个问题不是很广泛,也不是征求意见:您如何确定这个答案?Firestore客户端SDK实际上维护来自服务器的数据的本地缓存。如果这是一个如此糟糕的想法,为什么您认为它提供了默认启用的内部缓存?甚至有理由在上面维护另一个缓存,但这并不总是一个好主意。这在很大程度上取决于应用程序的特定需求,我们在这里不知道。离线缓存的文档在这里。我建议看一看Firebase提供了什么,了解一下本地云数据缓存的用例:再次感谢Doug!我曾经尝试过这样的查询:firebase.firestore().enablePersistence()。。。。但是它没有工作,它只是没有查询任何东西并继续加载。不过,我没有深入研究,我可能以后再做。这个enablePersistence()是持久化用户身份验证的一个好方法,这样用户就不必每次登录了吗?身份验证是一个完全不同的问题,auth SDK会自动持久化登录。