11

みんな、ありがとう!最近、流星に小さなcmsを構築したいのですが、いくつか質問があります

1、キャッシュ、ページキャッシュ、データキャッシュなど。

たとえば、人々がいくつかの記事を検索するとき

サーバー側:

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

クライアントで:

Meteor.subscribe('articles',keyword);

それは大丈夫ですが......問題は、そうするたびに、mongoクエリを呼び出してパフォーマンスを低下させることです。他のフレームワークでは、一般的なhttpまたはhttpsを使用します。人々は、squidやvarnishなどに依存してキャッシュできます。ページまたはデータなので、URLにルーティングするたびに、キャッシュサーバーからデータを読み取りますが、Meteorはsocket.jsまたはwebsocketに基づいて構築されており、ソケットを介してキャッシュする方法がわかりません......。ニスを試しましたが、効果は見られませんでした。だから、それはウェブソケットを無視するかもしれませんか?mongodb、サーバーにデータをキャッシュする方法はありますか?キャッシュサーバーを追加できますか?

2、チャット

https://github.com/zquestz/simplechatにチャットルームの例があります が、socket.jsを使用した実装とは異なり、この例ではチャットメッセージをmongodbに保存するため、データフローはmessage-> mongo->query->peopleです。 、これもmongoクエリを呼び出します!また、socket.jsでは、ソケットをコンテキスト(またはサーバー側のキャッシュ)に保存するだけで、データがデータベースを通過しないようになります。私の質問は、Meteorにソケットインターフェイスがあるので、メッセージ->ソケット->人にメッセージを送信できますか?できない場合は、チャットルームの例のように生産的な環境でのパフォーマンスはどうですか(実行速度が遅いようです...)

4

3 に答える 3

10

Meteorを使用すると、Mongodbクエリのキャッシュについて心配する必要はありません。Meteorはあなたのためにそれをします。データとセキュリティに関するドキュメントによると:

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

[...]

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

Meteorは、クライアントのキャッシュにパッチを適用する必要があるかどうかを確認するためにサーバーを頻繁にポーリングするため、これらのポーリングが時々行われているのを目にする可能性があります。しかし、それらはおそらくそれほど大きな要求ではありません。さらに、レイテンシー補正と呼ばれるMeteorの機能により、データソースを更新すると、クライアントは最初にサーバーで待機することなく、変更を即座に反映します。これにより、ユーザーにとってパフォーマンスが低下しているように見えます。

mongoに多数のドキュメントがある場合、autopublishパッケージをまだ有効にしていると、それらすべてがフェッチされることもあります。meteor remove autopublishデータベース全体ではなく、関連するデータのみを公開するようにコードを記述して削除することで、これを修正できます。

本当にキャッシュを手動で管理する必要がある場合は、ドキュメントもその中に入ります。

高度なクライアントは、サブスクリプションのオンとオフを切り替えて、キャッシュに保持されるデータの量を制御し、ネットワークトラフィックを管理できます。サブスクリプションがオフになっている場合、同じドキュメントが別のアクティブなサブスクリプションによっても提供されていない限り、そのすべてのドキュメントがキャッシュから削除されます。

「非常に多数のクライアント」をサポートするためのDDPレベルのプロキシなど、Meteorの追加のパフォーマンス改善が現在行われています。これについての詳細は、Meteorロードマップで確認できます。

于 2012-12-25T09:19:53.153 に答える
4

流星のミニモンゴの理解が不足しているためではなく、今のところ不要になったサブスクリプションをキャッシュする方法に興味がある場合は、この質問に遭遇します(ただし、将来的には、余分なものを保持したくない場合があります)クライアントサーバーのDDPオーバーヘッド)2つのパッケージオプションがあります。

https://github.com/ccorcos/meteor-subs-cache

https://github.com/kadirahq/subs-manager

于 2016-01-11T18:38:53.707 に答える
0

モバイルアプリを作成していて、データベースのキャッシュが機能していなかったため、meteor https://github.com/raix/Meteor-GroundDBのGroundDBパッケージを使用しました。これで、アプリを再起動するたびにデータベースが常にローカルになります。また、次のことを行う必要があります。 meteorのappcacheパッケージを調べて、アプリ全体をローカルにキャッシュします。

于 2013-09-11T07:04:32.037 に答える