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;
}
findTagForTitleCached(name, title) {
if (this.tagCache.hasOwnProperty(title)) {
const cache = this.tagCache[title];
if (cache.hasOwnProperty(name)) {
return cache[name];
}
}
}
async findTagForTitle(name, title) {
if (!this.db) {
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];
if (!result) {
let result = null;
await this.db.tagMeta.where('name').equals(name).each(row => {
if (title === row.dictionary) {
result = row;
}
});
this.tagCache[title][name] = result;
}
cache[name] = result;
return result;
}

View File

@ -298,14 +298,12 @@ class Translator {
const tags = [];
for (const name of names) {
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};
for (const prop in meta || {}) {
if (prop !== 'name') {
tag[prop] = meta[prop];
}
}
const tag = Object.assign({}, meta !== null ? meta : {}, {name});
tags.push(dictTagSanitize(tag));
}
@ -317,15 +315,17 @@ class Translator {
const stats = {};
for (const name in items) {
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 stat = {name, value: items[name]};
for (const prop in meta || {}) {
if (prop !== 'name') {
stat[prop] = meta[prop];
}
}
const stat = Object.assign({}, meta, {name, value: items[name]});
group.push(dictTagSanitize(stat));
}