javascript - node.js:昂贵的请求
问题描述
大家好!我的第一个应用程序需要一些帮助:
我正在创建一个以 express+node.js 为背景的应用程序。没有数据库。我正在使用具有某些功能的 3rd-party 解决方案,而不是进行计算。
正面
50 个对象。每个对象都有一个唯一值:随机数。一开始我有所有这些对象,我需要为每个对象计算一些值并根据计算结果将其放置在表单上。
每个对象发送:axios.get('/calculations?value=uniqueValue')
我将结果累积在一个数组中。何时array.length
等于 50 我将相互比较数组元素并定义每个对象的 (x, y) 坐标。之后,对象将出现在表单上。
后退
let value = uniqueValue; // an unique value received from an object
let requests = [];
for (let i = 0; i < 1500; i++) { // this loop is necessary due to application idea
requests.push(calculateData(value)); // 3rd-party function
value += 1250;
}
let result = await Promise.all(requests);
let newData = transform(result); // here I transform the calculated result and then return it.
return newData
一个对象的计算需要 700 毫秒。所有 50 个对象的所有计算花费 ≈10 秒。3rd-party 函数同时只接收一个值,但运行速度非常快。但是循环for (let i = 1; i < 1500; i++) {…}
非常昂贵。
问题
- 10秒不是一个好结果,用户不能等那么久。可能我应该改变计算方法吗?
- 服务器在计算时非常忙,并且其他请求(例如
axios.get('/getSomething?params=something')
待处理)。
任何建议将不胜感激!
解决方案
You can make the call in chunks of data using async.eachLimit
var values = [];
for (let i = 0; i < 1500; i++) { // this loop is necessary due to application idea
values.push(value);
value += 1250;
}
var arrayOfItemArrays = _.chunk(values, 50);
async.eachLimit(arrayOfItemArrays, 5, eachUpdate, function(err, result){let
newData = transform(result);
return newData ;
});
function eachUpdate(req_arr, cb){
var result = []
req_arr.forEach(fucntion(item){
calculateData(item).then((x){
result.push(x);
});
cb(result);
}
推荐阅读
- javascript - Mongodb无法连接服务器错误
- html - 悬停时更改后内容的颜色和背景
- angular - Angular(ng 测试)调试 - VS Code 不在断点处停止
- javascript - 如何使用 PHP 从 MySql 数据库中获取索引页面上的文本、图像和视频等数据?
- java - 如何将类别集合转换为树结构
- python - Python:无法使用 vs 代码进行调试
- angular - 在不同的组件中触发相同的功能
- sql-server - Tomcat 找不到 Microsoft SQL 驱动程序类
- html - 响应式设计中的复杂弹性菜单
- android - 回收站视图 xamarin 中未处理的异常