2017-01-23 18 views
1

流星の公開と購読の方法を使ってクライアントとサーバーと対話しています。今私のシナリオによると、私は棒グラフを生成するためにD3 jsを使用しています。データがmongo dbコレクションに入力されると、私は棒グラフを生成するためにクライアント側の関数を使用しています。私の問題は、出版と購読が反応が遅すぎるということです。 mongodbが返す文書の数を制限しても、問題は依然として続きます。それはまた、一貫していない、すなわち1秒未満で反応し、他の時には4~5秒間反応する。何をすべきか、実装上何が問題なのかを教えてください。ここでMeteor js publishとsubscribeは非常に反応が遅い

は、サーバー側のコードである

Test = new Mongo.Collection("test") 

Meteor.publish('allowedData', function() { 
    return Test.find({}); 
}) 

、ここでは、クライアント側のコードで、

Test = new Mongo.Collection("test") 
Meteor.subscribe('allowedData'); 
Meteor.setTimeout(function() { 
    Test.find().observe({ 
    added: function(document){ 
     //something 
    }, 
    changed:function(){ 
     //something 
    }, 
    removed:function(){ 
     //something 
    }, 
    }) 
+0

一般的なファイルから 'Test'をインポートする方がよりエレガントだと思います。 – API

+0

操作ごとの読み込み時間を確認するには、ChromeブラウザのTimeLineをチェックしましたか? – API

+0

コメントありがとうございます。いいえ、私はタイムラインをチェックしませんでした。 "一般的なファイルからTestをインポートする方がよりエレガントだと思う" – LearningNew

答えて

1

あなたのコメントから、私はあなたが反応性のあるレポートのチャートを必要とすることを参照してください。それはあなたの要件ですが、このようなグラフを持つには高価です。実際、システムが大きくなったときに、1つのチャートに対して約10000のドキュメントがあるとすると、この種のチャートはサーバを頻繁にクラッシュさせます。

  • は、グラフのデータを返すメソッドを定義します。

    この問題を回避するために、私は2つの提案があります。そのメソッドを定期的に呼び出すために、クライアントにジョブ/インターバルタイマーを設定します。間隔の値は必要に応じて決まります。グラフの場合は10秒で十分です。この方法では完全に反応的ではなく、間隔を置いてから最新のデータを取得するだけですが、速度が遅く、頻繁に発生するシステムよりも優れています。あなたはジョブ/タイマーhereを管理するための良いモジュールを見つけることができます。
  • このMeteorパッケージmeteor-publish-join(免責事項:私は著者)を使用して、問題の種類を解決するようにしました。大きなデータセットで反応性の高い集計/結合を行う必要がありますが、依然として全体的なパフォーマンスは良好です
+0

ありがとうございました。あなたの最初の選択肢がある限り、私は同じ考えをしましたが、私はそうすることは許されていません。しかし、私は間違いなくあなたの第二の選択肢を見ていきます。 – LearningNew

関連する問題