diff options
author | Alex Yatskov <alex@foosoft.net> | 2017-09-13 17:26:02 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2017-09-13 17:26:02 -0700 |
commit | 4d4b819d6c197df6e0f91ba170d0ee909dfcb5c9 (patch) | |
tree | cb6446be836483d1f961ead28c06c932de444261 | |
parent | 13961e6a10554fdc43c5b1b66f28ea72d2fc21b6 (diff) |
tag caching
-rw-r--r-- | ext/bg/js/database.js | 22 | ||||
-rw-r--r-- | ext/bg/js/dictionary.js | 10 | ||||
-rw-r--r-- | ext/bg/js/translator.js | 8 |
3 files changed, 19 insertions, 21 deletions
diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js index 6ae36db2..1b171b03 100644 --- a/ext/bg/js/database.js +++ b/ext/bg/js/database.js @@ -20,6 +20,7 @@ class Database { constructor() { this.db = null; + this.tagCache = {}; } async prepare() { @@ -51,6 +52,7 @@ class Database { this.db.close(); await this.db.delete(); this.db = null; + this.tagCache = {}; await this.prepare(); } @@ -131,17 +133,23 @@ class Database { return results; } - async findTag(name, titles) { + async findTag(name, title) { if (!this.db) { throw 'database not initialized'; } - let result = null; - await this.db.tagMeta.where('name').equals(name).each(row => { - if (titles.includes(row.dictionary)) { - result = row; - } - }); + this.tagCache[title] = this.tagCache[title] || {}; + + let result = this.tagCache[title][name]; + if (!result) { + await this.db.tagMeta.where('name').equals(name).each(row => { + if (title === row.dictionary) { + result = row; + } + }); + + this.tagCache[title][name] = result; + } return result; } diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index e749390f..1cd1a846 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -148,16 +148,6 @@ function dictTagBuildSource(name) { return dictTagSanitize({name, category: 'dictionary', order: 100}); } -function dictTagBuild(name, meta) { - const tag = {name}; - const symbol = name.split(':')[0]; - for (const prop in meta[symbol] || {}) { - tag[prop] = meta[symbol][prop]; - } - - return dictTagSanitize(tag); -} - function dictTagSanitize(tag) { tag.name = tag.name || 'untitled'; tag.category = tag.category || 'default'; diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 99147618..5de99e8e 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -60,7 +60,7 @@ class Translator { let definitions = []; for (const deinflection of deinflections) { for (const definition of deinflection.definitions) { - const tags = await this.buildTags(definition.tags, titles); + const tags = await this.buildTags(definition.tags, definition.dictionary); tags.push(dictTagBuildSource(definition.dictionary)); let frequencies = await this.database.findTermFreq(definition.expression, titles); @@ -124,7 +124,7 @@ class Translator { } for (const definition of definitions) { - const tags = await this.buildTags(definition.tags, titles); + const tags = await this.buildTags(definition.tags, definition.dictionary); tags.push(dictTagBuildSource(definition.dictionary)); definition.tags = dictTagsSort(tags); @@ -134,10 +134,10 @@ class Translator { return definitions; } - async buildTags(names, titles) { + async buildTags(names, title) { const results = []; for (const name of names) { - const meta = await this.database.findTag(name.split(':')[0], titles); + const meta = await this.database.findTag(name.split(':')[0], title); const result = {name}; for (const prop in meta || {}) { |