Мы используем Hapijs/React/Sequelize/MySQL. Меня что-то вызывает, и я сделал некоторые исследования в этом вопросе.Обработать и отправить большой объем данных с помощью Hapijs
Установка:
Мы Реагировать компонент, который выдает AJAX вызов Хапи API. API возвращает массив объектов. Это отображается в React. Выпуск: Мы запрашиваем данные из таблицы. Эти данные возвращаются как массив сложных объектов. Каждый из этих объектов является объектом sequlize. И у него есть много дополнительных свойств, которые нам не нужны. Мы посылаем этот объект, используя hapı ответ, что-то вроде (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% прироста скорости. Но если я прав, это должно быть намного быстрее. Что происходит за кулисами с помощью функции , и как я могу ускорить это?
Попробуйте синхронизировать 'JSON.stringify()' на 'fullObjects'. Возможно, вы просто пытаетесь создать огромную структуру данных. Вам действительно нужно отправить все это клиенту? –
В текущем проекте у нас есть сетка данных, которая отображает все результаты. В этой сетке данных много фильтров, которые по дизайну дадут результаты только с полным набором данных. Возможно, нам нужно переосмыслить текущий дизайн ... просто еще ничего не знаю :( –