Я использую песочницу mlab для моего сервера и использую node.js express для бэкэнда. проблема заключается в времени получения данных от mlab к клиенту. основанный на executeStats на mongoDB, было 0 executeTimemills, но когда я пытаюсь получить данные через почтальона, это в среднем 500 мс времени и 600 B размера. Я пытался отследить, откуда приходит задержка. и это обещание на бэкэнде, в основном тест состоял в том, чтобы опубликовать текущее время до того, как запрос сработает (pp_query) , и сравнить его со временем возвращенного обещания (pp_res), я использовал асинхронную функцию и жду. нормально ли иметь такую задержку, даже если у нас есть 0 минут выполнения на MongoDb? Если это так, то слишком ли длинно 500 мс для данных размером 600 В? спасибо
Это моя асинхронная функция:
async function suggestedPrice(itemCode,customerId,qty){
var priceCatega = priceCateg(itemCode);
var aitemHis = itemHistory_c(itemCode,customerId);
var apriceCat = priceCategoryHistory_c(customerId, await priceCatega)
var itemHis = await aitemHis;
var priceCat = await apriceCat;
return {itemHis,priceCat};
}
Это методы:
const itemHistory_c = (itemCode,customerId) =>{
var pp_query = speedTest(); //states the current timestamp
var x = deploySalesOrders.find({itemCode,customerId})
x.select('date discount price offer');
x.limit(1);
x.sort({date:-1})
//x.explain("executionStats");
return x.exec()
.then((itemHis) => {
var pp_res = speedTest();
// return itemHis;
var g;
if(!isEmpty(itemHis)){
var date_IH = itemHis[0].date;
var disc_IH = itemHis[0].discount;
var unitPrice_IH = itemHis[0].price;
var offer = itemHis[0].offer;
var origin = "itemHis";
g = {date : date_IH,unitPrice : unitPrice_IH,disc : disc_IH,offer,origin}
}
var post_res= speedTest();
g = {...itemHis,pp_query,pp_res,post_res}
return g;
})
}
const priceCategoryHistory_c = (customerId,priceCategory) =>{
var x;
if(priceCategory != ''){
var pp_query = speedTest();
var y = deploySalesOrders.find({$and:[{priceCategory},{customerId}]})
y.select('date discount price offer itemCode controlNo_DSI')
y.sort("-date")
y.limit(1)
return y.exec()
.then((priceCatHis) =>{
var pp_res = speedTest();
if(!isEmpty(priceCatHis)){
var date_IH = priceCatHis[0].date;
var disc_IH = priceCatHis[0].discount;
var unitPrice_IH = priceCatHis[0].price;
var offer = priceCatHis[0].offer;
var itemCode = priceCatHis[0].itemCode;
var controlNo_DSI = priceCatHis[0].controlNo_DSI
var origin = "priceCat";
x = {date : date_IH,unitPrice : unitPrice_IH,disc : disc_IH, priceCategory,offer,itemCode,controlNo_DSI,origin}//,purchase}
}
var post_res= speedTest();
x = {...x,pp_query,pp_res,post_res}
return x;
// return priceCatHis
})
}
}
const priceCateg = (itemCode) =>{
var x = ItemTrial.find({itemCode})
x.select('price.priceCategory')
x.sort('-date')
x.limit(1)
return x.exec()
.then((price) =>{
if (price.length > 0){
return price[0].price.priceCategory;
}
else{
return '';
}
});
}
Маршрутизатор
router.use('/suggestions',(req,res)=>{
try{
suggestedPrice(req.query.itemCode, req.query.customerId,req.query.totalQty)
.then((a) => {
res.status(200).send(a)
})
}
catch(err){
res.json({err});
}
})
Результат от почтальона
{
"itemHis": {
"0": {
"_id": "5bd6bc275d7de933b4ecb4b6",
"date": "2019-10-29T16:21:00.000Z",
"price": 0,
"discount": "L-12%",
"offer": ""
},
"pp_query": "13:25:34:587",
"pp_res": "13:25:34:873",
"post_res": "13:25:34:873"
},
"priceCat": {
"date": "2019-06-21T16:21:00.000Z",
"unitPrice":0,
"disc": "L-12%",
"priceCategory": "abc",
"offer": "",
"itemCode": "abc_code",
"controlNo_DSI": "abc-0357-2",
"origin": "priceCat",
"pp_query": "13:25:34:863",
"pp_res": "13:25:35:115",
"post_res": "13:25:35:115"
}
}