2

我正在构建一个 Cordova 应用程序,它围绕门票列表呈现 CRUD 操作。主页显示列表,您可以单击任何列表项以获取有关特定工单的更多详细信息。

到达主页/并显示一个tickets模板。到达工单页面/ticket/:_id并显示一个ticket模板。

/路由订阅了与当前用户相关的所有票证(即将推出分页)。我假设这些数据缓存在 minimongo 的客户端。

当用户单击以查看有关票证的更多信息时,我尝试通过Tickets.findOne(Router.current().params._id). 如果我向这条路线添加单票订阅,它会起作用。如果我摆脱订阅,它就不起作用。

这没有多大意义,因为初始票证订阅应该在 minimongo 中缓存所有可见票证客户端。当做一个Tickets.findOne(Router.current().params._id)-- Meteor 不应该在不需要新订阅的情况下寻找 minimongo 的数据吗?

即使应用程序处于脱机状态,我也会使用GroundDB来处理集合和方法。它可以工作,但不能解决跨路由的订阅问题。

关于如何最好地跨路线缓存数据以使应用程序快速运行并减少数据库行程的任何建议?

4

1 回答 1

2

听起来您需要使用subs-manager

为什么?

当您在 Tracker.autorun 计算中订阅时,所有在前一次计算中启动的订阅都将停止。

Iron Router 在 Tracker.autorun 计算中运行所有订阅,因此这也会影响 Iron Router:当您导航到新路由时,所有先前的订阅都将停止。即使他们以前访问过该路线,用户也必须稍等片刻。这是一个用户体验问题。

此外,这将强制 Meteor 服务器重新发送您在客户端中已有的数据。它会浪费您服务器的 CPU 和网络带宽。

解决方案

订阅管理器缓存您的订阅并在路由更改时运行所有已缓存的订阅。这意味着当在路线之间切换时,用户将不再需要等待。此外,Meteor 不需要重新发送已经在客户端中的数据。

在技​​术方面,订阅管理器在内部运行它自己的 Tracker.autorun 计算。它不干扰 Iron Router 并且独立工作。

订阅管理器不会缓存您的个人数据。它告诉 Meteor 缓存整个订阅。因此,您的数据将照常在后台更新。

于 2015-10-06T03:06:50.637 回答