我正在构建一个Cordova应用程序,它围绕一个Tickets列表呈现CRUD操作。主页显示列表,您可以单击任何列表项以获取有关特定故障单的更多详细信息。
主页位于/
,并显示tickets
模板。
故障单页面位于/ticket/:_id
,并显示ticket
模板。
/
路由订阅与当前用户相关的所有门票(即将推出分页)。我假设这个数据在minimalongo中缓存在客户端。
当用户点击查看有关故障单的更多信息时,我尝试通过Tickets.findOne(Router.current().params._id)
获取新数据。如果我向此路线添加单个订票,则可以使用它。如果我摆脱订阅,它就不起作用。
这没有多大意义,因为初始票证订阅应该在minimongo中缓存客户端的所有可见票证。在进行Tickets.findOne(Router.current().params._id)
时 - Meteor不应该在不需要新订阅的情况下查看该数据的最小值吗?
即使应用处于离线状态,我也会使用GroundDB来收集集合和方法。它可以工作,但不会解决跨路线的订阅。
有关如何最佳地跨路线缓存数据以使应用程序快速运行并减少数据库迁移的任何建议?
答案 0 :(得分:2)
听起来你需要使用subs-manager。
<强>为什么吗
当您在Tracker.autorun计算中订阅时,将停止在先前计算中启动的所有订阅。
Iron Router会在Tracker.autorun计算中运行所有订阅,因此这也会影响Iron Router:当您导航到新路由时,所有以前的订阅都将停止。即使他们之前访问过该路线,用户也必须等待一段时间。这是一个用户体验问题。
此外,这将强制Meteor服务器重新发送您在客户端中已有的数据。它会浪费你的服务器的CPU和网络带宽。
<强>解决方案强>
订阅管理器缓存您的订阅并运行更改路由时已缓存的所有订阅。这意味着当在路由之间切换时,用户将不再需要等待。此外,Meteor还不需要重新发送已经在客户端中的数据。
在技术方面,Subscriptions Manager在内部运行它自己的Tracker.autorun计算。它不会干扰Iron Router并且可以独立工作。
订阅管理器不会缓存您的个人数据。它告诉Meteor缓存整个订阅。因此,您的数据将照常在后台更新。