#javascript #mongodb #vue.js #electron #realm
Вопрос:
Вот один из моих вопросов
async function getCatlogEntities (articleId) {
// fetch catalog entities
let catalogEntities = await realm.objects('catalogentity')
// stringify
catalogEntities = JSON.parse(JSON.stringify(catalogEntities))
// fetch taxanomies
let taxonomies = await publicRealm.objects('taxonomy')
// stringify
taxonomies = JSON.parse(JSON.stringify(taxonomies))
// fetch catalog article entities
let catalogArticleEntities = await realm.objects('catalogarticleentity')
// stringify
catalogArticleEntities = JSON.parse(JSON.stringify(catalogArticleEntities))
console.log('catalogEntities', catalogEntities)
// create the required response
const articleEntities = _.map(catalogEntities, entity => {
// find taxonomies
const findTaxonomy = .find(taxonomies, {id: entity.taxonomy_id})
entity.taxonomy = !.isEmpty(findTaxonomy) ? findTaxonomy : {}
console.log('present catalog entity', entity)
if (!.isEmpty(entity.article_entity)) {
entity.article_entity = _.filter(entity.article_entity, articleEntity => {
const findArticleEntity = _.find(catalogArticleEntities, {id: articleEntity})
console.log('findArticleEntity', findArticleEntity)
// filter out the entities if not found OR article id present and didn't matched with current article id
if (!.isEmpty(findArticleEntity) amp;amp; ((articleId amp;amp; findArticleEntity.article_id === articleId) || (!articleId))) return findArticleEntity
})
}
return entity
})
return articleEntities
}
Могу ли я улучшить его таким образом, чтобы он не блокировал поток пользовательского интерфейса?
Я сталкиваюсь с блокировкой пользовательского интерфейса на 7-8 секунд, когда данные слишком тяжелые или когда мы делаем несколько запросов и сопоставляем их вместе(поскольку Realm не поддерживает объединения(агрегацию)).
Комментарии:
1. Вопрос немного широк — Область быстра — очень быстра — запросы, которые мы выполняем, по набору данных объемом 2 ГБ возвращают результаты (почти) мгновенно. Не копаясь в коде, вы каким-то образом обрабатываете возвращенные данные? Вы передаете возвращенные результаты в массивы? Если это так, то узкое место в обработке существует и не связано с областью. Тем не менее, часто рекомендуется выполнять задачи с интенсивным использованием процессора в фоновом потоке, чтобы оставить пользовательский интерфейс плавным. Кроме того, хотя область не «присоединяется», есть много способов выполнить эту задачу, денормализация ваших данных-один из вариантов.
2. @Jay Спасибо за ответ. Что вы подразумеваете под денормализацией данных? Не могли бы вы поподробнее, пожалуйста?
3. Денормализация данных является обычной практикой в базах данных NoSQL; дисковое пространство дешево, поэтому часто имеет смысл хранить дубликаты копий данных, чтобы обеспечить более широкие и быстрые запросы. Это еще не все, но такова общая идея. Проверьте: эта и другая, и, вероятно, моя любимая денормализация-нормальная