您现在的位置是:主页 > news > 云南 网站建设网站/合肥seo优化排名公司
云南 网站建设网站/合肥seo优化排名公司
admin2025/5/7 14:29:43【news】
简介云南 网站建设网站,合肥seo优化排名公司,网站定制开发费用多少,iis建多个网站我们在Web应用程序中使用apollo客户端,并正在寻找提高缓存使用率的方法 .我们有一个查询,它将一个id数组作为参数,带有ids foo 和 bar 的示例查询将如下所示:query routes {routes(routeNames: ["foo", "bar"…
我们在Web应用程序中使用apollo客户端,并正在寻找提高缓存使用率的方法 .
我们有一个查询,它将一个id数组作为参数,带有ids foo 和 bar 的示例查询将如下所示:
query routes {
routes(routeNames: ["foo", "bar"]) {
items {
name
route
defaults
}
}
}
缓存设置如下所示:
export const cacheRedirects = {
Query: {
routes: (_: any, args: RoutesArgs, { getCacheKey }: Resolver): Array =>
args.routeNames.map(name => getCacheKey({ __typename: 'Route', name })),
},
};
export const dataIdFromObject = (object: QueryResult): ?string => {
switch (object.__typename) {
case 'Route':
return `${object.__typename}:${object.name}`;
default: return defaultDataIdFromObject(object);
}
};
export function newCache(): InMemoryCache {
return new InMemoryCache({ dataIdFromObject, cacheRedirects });
}
现在,当我们在客户端的几个地方使用查询时,我们只想获取未通过网络缓存的routeNames的数据,并通过缓存检索其余的数据 .
所以问题可以归结为:当有一个查询缓存 routeNames: ["foo", "bar"] 的结果时,后来另一个查询出现请求 routeNames: ["bar", "baz"] 的路由,我们很乐意从缓存中获取对应于 "bar" 的结果并发送 routeNames: ["baz"] 的查询 .
我不确定是否以及如何用Apollo完成这项工作,因为与cacheRedirect example相比,我们处理多个ID而不是单个ID .
现在,如果我们无法对每个数组项进行缓存,那么我们可以做的另一件好事就是将id转换为公共缓存键,以便 ["foo", "bar"] 和 ["bar", "foo"] 最终使用相同的缓存键,但 ["foo", "baz"] 将使用不同的缓存键 .
当然,最理想的是只将 "baz" 作为我们场景中缺失的项目 .