Node JS、Express JS、Mongoose、D3 JSでWebページを作成しました。Node JSでの大規模なMongoDBデータベースの読み込みが遅い
ウェブページには、Department、Employee、Weekの3つのプルダウンメニューがあります。 次のようにWebページの使用法は次のとおりです。
- 「課」が選択されている場合は、「従業員」メニューはのみ選択された「部門」からを表示するようにフィルタリングされます。 「従業員」が選択された後も「週」になります。
- 3つのメニューが選択され、 'PLOT'ボタンがクリックされると、月の従業員の勤務時間を示す折れ線グラフ(d3.jsを使用)がプロットされます。ここで
MongoDBはJSON
{ dep: '1',
emp: 'Mr A',
week: 1,
hrs: [{
{1,8},
{2,10},
...
}]
}
私のコードの抜粋です:
routes.js
// Connect the required database and collection
var dataAll = require('./models/dataModel');
module.exports = function(app) {
app.get('/api/data', function(req, res) {
dataAll.find({}, {}, function(err, dataRes) {
res.json(dataRes);
});
}
app.get('*', function(req,res) {
res.sendfile('./index.html');
}
}
index.htmlを
... // More codes
<div id="menuSelect1"></div>
<div id="menuSelect2"></div>
<div id="menuSelect3"></div>
...
<script src="./display.js" type='text/javascript'></script>
... // More codes
display.js
//Menu (Department,Employee,Week) Information is gathered here
queue()
.defer(d3.json, "/api/data")
.await(createPlot);
function createPlot(error, plotData) {
var myData = plotData;
var depData = d3.nest()
.key(function(d) {return d.dep;})
.rollup(function(v) {return v.length;})
.entries(myData);
selectField1 = d3.select('#menuSelect1')
.append("select")
.on("change", menu1change)
.selectAll(depData)
.enter()
.append("option")
.attr("value", function(d) {return d.key;})
.text(function(d) {return d.key;});
function menu1Change() {
//Filter Next Menu with the option chosen in this menu
... // More codes
var selectedVal = this.options[this.selectedIndex].value;
var empData = dataSet.filter(function(d) { return d.emp = selectString; });
... // More codes
}
... // More codes
}
問題: 機能的には、期待どおりに動作しています。問題は、データベースが大きくなったり大きくなったりすると、ページの読み込みが非常に遅くなる(読み込みに要する時間)。私はそれがすべてのデータ(.find({}、{})を取得するルーティングが原因でなければならないと思うが、私は 'display.js'でメニューオプションをフィルタリングするために使用しているので、
これを実行してパフォーマンスの問題を解決する方法がありますか?
申し訳ありませんが、JSONデータの例を追加しました。はい、私は既にブラウザでデバッガを使用しました。ボトルネックは実際にデータベース全体を返しています。 – ISee
データベース全体を取得できない場合、必要なDep、Emp、Mthデータをプルダウンメニューに挿入する他の方法はありますか? – ISee