簡體   English   中英

在 Meteor 中跨鐵路由器路由緩存客戶端數據的最佳方法

[英]Best way to cache client-side data across iron-router routes in Meteor

我正在構建一個 Cordova 應用程序,它圍繞一個票證列表顯示 CRUD 操作。 主頁顯示列表,您可以單擊任何列表項以獲取有關特定票證的更多詳細信息。

主頁位於/並提供tickets模板。 票務頁面位於/ticket/:_id並提供ticket模板。

/路由訂閱與當前用戶相關的所有票證(即將推出分頁)。 我假設這些數據在 minimongo 中緩存在客戶端。

當用戶單擊以查看有關票證的更多信息時,我嘗試通過Tickets.findOne(Router.current().params._id)獲取新數據。 如果我向這條路線添加單票訂閱,它會起作用。 如果我取消訂閱,它就不起作用。

這沒有多大意義,因為初始票證訂閱應該在 minimongo 中緩存客戶端的所有可見票證。 當做Tickets.findOne(Router.current().params._id)不應該在不需要新訂閱的情況下尋找 minimongo 來獲取該數據嗎?

即使應用程序處於離線狀態,我也在使用GroundDB來處理集合和方法。 它可以工作,但不能解決跨路由的訂閱問題。

關於如何最好地跨路由緩存數據以使應用程序快速並減少數據庫行程的任何建議?

聽起來您需要使用subs-manager

為什么?

當您在 Tracker.autorun 計算中訂閱時,所有在前一個計算中啟動的訂閱都將停止。

Iron Router 在 Tracker.autorun 計算中運行所有訂閱,因此這也會影響 Iron Router:當您導航到新路由時,所有以前的訂閱都將停止。 即使他們之前訪問過該路線,用戶也必須稍等片刻。 那是用戶體驗問題。

此外,這將強制 Meteor 服務器重新發送您在客戶端中已有的數據。 它會浪費您服務器的 CPU 和網絡帶寬。

解決方案

Subscriptions Manager 會緩存您的訂閱,並在路由更改時運行所有已緩存的訂閱。 這意味着在路由之間切換時,用戶將不再需要等待。 此外,Meteor 不需要重新發送客戶端中已有的數據。

在技​​術方面,訂閱管理器在內部運行它自己的 Tracker.autorun 計算。 它不會干擾 Iron Router 並獨立工作。

Subscriptions Manager 不會緩存您的個人數據。 它告訴 Meteor 緩存整個訂閱。 因此,您的數據將像往常一樣在后台更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM