热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

了解AWSAppSyncJavaScriptSDK中的Apollo客户端缓存和开放式UI

如何解决《了解AWSAppSyncJavaScriptSDK中的Apollo客户端缓存和开放式UI》经验,为你挑选了1个好方法。

我正在尝试使用AWS AppSync Javascript SDK在Apollo客户端中实现缓存,但我一直在努力了解首先要使用缓存的最佳方法,其次是如果需要进行任何更改以适应Apollo V2教程以与AppSync配合使用,该如何做? SDK。

关于使用缓存,我有一个对象列表,然后我想从该列表中查看和修改单个对象。关于如何更新列表中的某些内容的教程很多,但是我宁愿运行第二个查询,该查询通过其ID获取单个对象,以便该页面始终可以工作,而不必先浏览列表。

缓存是否足够聪明,以至于知道通过查询Y和Z获得的对象X是同一个对象,并且将同时进行更新?如果没有,是否有任何文档说明如何编写将同时更新列表中的对象和本身的更新?

如果没有文档,那么我将自己尝试并发布代码(因为它很可能无法工作)。

关于第二个问题,我已使应用程序正常运行,并使用Amplify进行身份验证来查询API,但不确定如何正确实现缓存。创建客户端时是否需要指定缓存,或者SDK具有内置缓存?如何访问缓存?是否只是像这些教程中那样通过查询客户端?https://www.apollographql.com/docs/react/advanced/caching.html



1> Jclangst..:

我将首先回答你的第二个问题:

关于第二个问题,我已使应用程序正常运行,并使用Amplify进行身份验证来查询API,但不确定如何正确实现缓存。创建客户端时是否需要指定缓存,或者SDK具有内置缓存?如何访问缓存?是否只是像这些教程中那样通过查询客户端?

好。所以这里有点毛茸茸的-似乎是在GraphQL的主要客户端库(Apollo,Relay等)进行全面检查的时候部署了AppSync,因此AWS实际上围绕Apollo Client创建了一个包装器(可能出于稳定的API目的),然后公开自己的处事方式。只需快速浏览一下代码,就好像它们具有处理Websocket,其身份验证协议,redux存储,脱机功能,ssr等的专有和未记录的处理方式。因此,如果此处或此处未明确说明,则您处于未知领域。

幸运的是,他们提供的所有东西(以及更多东西)现在已经以文档记录的方式在基础Apollo客户端中实现。更幸运的是,看起来AppSync客户端将大多数与GraphQL实际相关的东西直接转发到内部Apollo缓存,并允许您在下传递config选项cacheOptions,因此您可以使用Apollo Client进行的大多数配置AppSync客户端(更多信息请参见下文)。

不幸的是,您无法直接使用AppSync客户端访问缓存(它们已将其隐藏以确保其公共API在瞬息万变的生态系统中保持稳定)。但是,如果您确实需要更多控制权,则可以轻松地在自己的Apollo客户端实例中复制在AppSync客户端中实现的大多数内容,从而可以完全控制(您可以使用开源的AppSync代码作为基础)。由于GraphQL前端和后端是解耦的,因此没有理由不能使用自己的Apollo Client与AppSync服务器连接(对于大型,严肃的项目,这就是我要做的,因为Apollo Client有很多文档记录并处于积极发展中)。

缓存是否足够聪明,以至于知道通过查询Y和Z获得的对象X是同一个对象,并且将同时进行更新?如果没有,是否有任何文档说明如何编写将同时更新列表中的对象和本身的更新?

第一部分与Apollo客户端和AppSync客户端有关。

是! 那是Apollo客户端的一大优点-每次查询时,它都会尝试更新缓存。高速缓存是规范化的键值存储,其中所有对象都存储在顶层,该键是对象的__typenameid属性的组合。Apollo客户端将自动添加__typename到您的所有查询中(尽管您将不得不id手动添加到您的查询中-否则,它会退回到查询路径本身作为关键字[这不是很可靠])。

该文档提供了对该机制的很好的概述。

现在,您可能需要做一些更高级的工作。例如,如果您的GraphQL模式使用以外的一些唯一对象标识符id,则必须向dataIdFromObject映射到它的函数提供一些功能。

此外,有时在进行查询时,缓存很难在发出网络请求之前准确地知道您要查询的内容以检查缓存。为了缓解此问题,它们提供了缓存重定向机制。

最后,也许是最复杂的,是如何处理分页查询中的东西顺序(例如,有序列表中的任何东西)。为此,您必须使用@connection指令。由于这是基于中继连接规范的,因此建议您略读一下。

奖励:要查看运行中的缓存,我建议使用Apollo客户端开发工具。这是个小问题,但至少可以使您了解本地缓存实际发生的情况-如果使用AppSync,则无法使用。


因此,除了以上所有有关设置和配置缓存的信息外,您还可以在应用程序运行期间控制数据和对缓存的访问(如果直接使用Apollo Client而不是AppSyncClient)。

该直接高速缓存访问文档指定的可用方法。但是,由于大多数更新仅根据您进行的查询自动发生,因此您不必经常使用这些更新。但是,它们的一种用途是进行复杂的UI更新。例如,如果进行突变以从列表中删除一个项目,而不是重新查询整个列表(这更新缓存,但是会花费更多的网络数据,解析和规范化),则可以定义一个自定义缓存使用readQuery/ writeQueryupdatemutation选项进行更新。这与optimisticResponse配合使用也很不错,如果您正在寻找开放式UI,则应该使用它。

此外,您可以使用fetchPolicy或errorPolicy选项之一选择是使用还是绕过缓存(或更高级的策略)。


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
author-avatar
yeszio
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有