Use non-async function for cache lookups

This commit is contained in:
toasted-nutbread 2019-08-30 19:38:36 -04:00
parent a4f8a459de
commit 664a318d7f
2 changed files with 31 additions and 24 deletions

View File

@ -166,23 +166,30 @@ class Database {
return results; return results;
} }
findTagForTitleCached(name, title) {
if (this.tagCache.hasOwnProperty(title)) {
const cache = this.tagCache[title];
if (cache.hasOwnProperty(name)) {
return cache[name];
}
}
}
async findTagForTitle(name, title) { async findTagForTitle(name, title) {
if (!this.db) { if (!this.db) {
throw 'Database not initialized'; throw 'Database not initialized';
} }
this.tagCache[title] = this.tagCache[title] || {}; const cache = (this.tagCache.hasOwnProperty(title) ? this.tagCache[title] : (this.tagCache[title] = {}));
let result = this.tagCache[title][name]; let result = null;
if (!result) {
await this.db.tagMeta.where('name').equals(name).each(row => { await this.db.tagMeta.where('name').equals(name).each(row => {
if (title === row.dictionary) { if (title === row.dictionary) {
result = row; result = row;
} }
}); });
this.tagCache[title][name] = result; cache[name] = result;
}
return result; return result;
} }

View File

@ -298,14 +298,12 @@ class Translator {
const tags = []; const tags = [];
for (const name of names) { for (const name of names) {
const base = Translator.getNameBase(name); const base = Translator.getNameBase(name);
const meta = await this.database.findTagForTitle(base, title); let meta = this.database.findTagForTitleCached(base, title);
if (typeof meta === 'undefined') {
meta = await this.database.findTagForTitle(base, title);
}
const tag = {name}; const tag = Object.assign({}, meta !== null ? meta : {}, {name});
for (const prop in meta || {}) {
if (prop !== 'name') {
tag[prop] = meta[prop];
}
}
tags.push(dictTagSanitize(tag)); tags.push(dictTagSanitize(tag));
} }
@ -317,15 +315,17 @@ class Translator {
const stats = {}; const stats = {};
for (const name in items) { for (const name in items) {
const base = Translator.getNameBase(name); const base = Translator.getNameBase(name);
const meta = await this.database.findTagForTitle(base, title); let meta = this.database.findTagForTitleCached(base, title);
if (typeof meta === 'undefined') {
meta = await this.database.findTagForTitle(base, title);
if (meta === null) {
continue;
}
}
const group = stats[meta.category] = stats[meta.category] || []; const group = stats[meta.category] = stats[meta.category] || [];
const stat = {name, value: items[name]}; const stat = Object.assign({}, meta, {name, value: items[name]});
for (const prop in meta || {}) {
if (prop !== 'name') {
stat[prop] = meta[prop];
}
}
group.push(dictTagSanitize(stat)); group.push(dictTagSanitize(stat));
} }