【发布时间】:2016-10-20 01:24:45
【问题描述】:
我们正在使用 Hapijs/React/Sequelize/MySQL。有件事让我很困惑,我对此进行了一些研究。
设置:
我们有向 Hapi API 发出 AJAX 调用的 React 组件。 API 返回一个对象数组。这是由 React 显示的。 问题: 我们从表中请求数据。该数据作为复杂对象数组返回。这些对象中的每一个都是一个 sequlize 对象。它还有许多我们不需要的附加属性。 我们使用 HAPI 回复发送该对象,例如(40k 个对象):
flattenedParts.forEach(function(item) {
item.dataValues.Product = productsMap[item.dataValues.ProductId] || [];
item.dataValues.PartModule = partModulesMap[item.dataValues.PartModuleId] || [];
fullObjects.push(item);
});
reply(fullObjects).code(200);
当代码到达回复语句时,需要 14 秒才能将其作为 JSON 对象的简单数组发送。
对我来说,这些对象的序列化似乎需要很长时间。所以我想制作一个普通对象数组,只包含我需要的数据。我做了这样的事情(40k 个对象)::
flattenedParts.forEach(function(item) {
item.Product = productsMap[item.dataValues.ProductId] || [];
item.PartModule = partModulesMap[item.dataValues.PartModuleId] || [];
var flat = new partCreator(item);
newParts.push(flat);
});
reply(fullObjects).code(200);
零件创建功能很简单:
function partCreator(part){
this.Product = {};
this.id = part.dataValues.id;
this.PartNumber = part.dataValues.PartNumber;
...
}
所以最后我得到了包含我需要的数据的简单对象的数组。速度现在约为 7 秒。速度提高了近 50%。 但如果我是正确的,它应该会快得多。 回复功能在幕后发生了什么,如何加快速度?
【问题讨论】:
-
尝试在
fullObjects上计时JSON.stringify()。也许您只是想对一个巨大的数据结构进行字符串化。您真的需要将所有内容发送给客户吗? -
按照目前的设计,我们有一个显示所有结果的数据网格。该数据网格有许多过滤器,根据设计,这些过滤器只会给出完整数据集的结果。可能是我们需要重新考虑当前的设计......只是还什么都不知道:(
标签: javascript node.js hapijs