2012-12-25 8 views
10

ありがとうございました! は最近、私は流星の小さなCMSを構築したいのですが、いくつかの疑問を持っているメテオでどのようにデータをキャッシュできますか?

1、キャッシュ、ページキャッシュ、データキャッシュ、など。人々は、いくつかの記事

内を検索たとえば

、サーバ側:クライアントで

Meteor.publist('articles',function(keyword){ 
    return Articles.find({keyword:keyword}); 
}); 

Meteor.subscribe('articles',keyword); 

それは大丈夫ですが...... ...... 質問は、毎回の人がそうしているので、モンゴークエリを呼び出してパフォーマンスを低下させます。 は他のフレームワークでは一般的なhttpやhttpsを使用しています。あなたがURLにたどり着くたびに、ページやデータをキャッシュしてキャッシュサーバーからデータを読み込みます。しかし、Meteorはsocket.jsやwebsocketで構築されています。そして、キャッシュをキャッシュする方法はわかりません.... ...私はニスを飲みましたが、効果は見られませんでした。 それはwebsocketを無視することがありますか?mongodbのデータをキャッシュする方法がいくつかありますが、サーバーにキャッシュサーバーを追加できますか?

2、私はhttps://github.com/zquestz/simplechat でチャットルームの例を参照してください。しかしsocket.jsを使用してimplymentとは異なり、この例では、MongoDBの中にチャットメッセージを保存し、そのデータフローがメッセージです

チャット - > mongo-> query- >人々は、これもmongoクエリを呼び出す! とsocket.jsでは、ソケット(またはサーバーサイドのキャッシュ)をソケットに保存するだけで、データはdbを通過しません。 私の質問は、Meteorにソケットインターフェイスがあるので、メッセージ - >ソケット - >人ですか?そしてもしできないのであれば、チャットルームの例が行っているように、生産環境でのパフォーマンスはどうですか(私は遅いですね...)

答えて

10

Mongodbのクエリをキャッシュすることを心配する必要はありません。流星はあなたのためにそれを行います。 Per the docs on data and security

すべてのMeteorクライアントには、メモリー内データベース・キャッシュが含まれています。クライアントキャッシュを管理するために、サーバーはJSON文書のセットを公開し、クライアントはそれらのセットをサブスクライブします。設定変更の文書として、サーバーは各クライアントのキャッシュにパッチを当てます。

[...]

購読すると、クライアントは劇的にクライアントコードを簡素化し、高速なローカルデータベースとしてそのキャッシュを使用しています。読み取りは、サーバーへのコストのかかる往復を必要としません。そして、それらはキャッシュの内容に制限されています。クライアント上のコレクション内のすべてのドキュメントのクエリは、そのクライアントに公開されているドキュメントのみを返します。

流星は、クライアントのキャッシュがパッチ適用必要かどうかを確認するためにしょっちゅうサーバーをポーリングしているので、あなたはおそらく、これらの世論調査は、すべての今して起こって見ています。しかし、おそらくそれほど大きなリクエストではありません。さらに、Meteorのレイテンシ補正と呼ばれる機能により、データソースを更新すると、クライアントは最初にサーバーを待たずに変更を即座に反映します。これにより、ユーザーのパフォーマンス低下の外観が減少します。

mongoに多数のドキュメントがある場合は、autopublishパッケージを有効にしておけば、すべてが取得されることもあります。meteor remove autopublishでそれを削除して修正でき、データベース全体ではなく関連するデータのみを公開するコードを書くことができます。あなたが本当に手動でキャッシュを管理する必要がある場合

、ドキュメントもその入る:

洗練されたクライアントはキャッシュに保存されるデータの量を制御し、ネットワークトラフィックを管理するために、オフにサブスクリプションを有効にしてすることができます。サブスクリプションがオフになると、同じ文書が別のアクティブなサブスクリプションからも提供されない限り、すべての文書がキャッシュから削除されます。

「非常に多数のクライアント」をサポートするDDPレベルのプロキシを含む、Meteorの追加のパフォーマンス改善が現在進められています。詳しくはthe Meteor roadmapでご覧になれます。

+0

非常に感謝!!!! – user1208300

+0

しかし、質問は、例えば私はサイトを持っていて、毎回ホームページに来て、流星のサーバーからすべてのデータを読み込まなければなりません!しかし、他の言語やフレームワークを使っているならば、ワニスやイカを使ってキャッシュできますキャッシュサーバーが流星のDDP(またはWebSocket)を理解できるかどうかは、キャッシュサーバーからデータをロードすることです。私は、何かをキャッシュするために流星またはイカまたはnginxを持つことができますか? – user1208300

+0

これは現時点では不可能ですが、開発中ですので、数か月後に確認して、流星ロードマップに注目してください。 – Rahul

0

私は、私はアプリを再起動するたびに、今データベースがローカルで常に流星https://github.com/raix/Meteor-GroundDBのGroundDBパッケージを使用し、したがって働いていなかったモバイルアプリとデータベースのキャッシュを作成して、 はまた、あなたは流星のappcacheパッケージにして見てする必要がありますアプリ全体をローカルにキャッシュします。

関連する問題