mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Add config, increase cache TTL, use async file reads
This commit is contained in:
@ -140,6 +140,8 @@ performance:
|
|||||||
lazyLoadCharacters: false
|
lazyLoadCharacters: false
|
||||||
# The maximum amount of memory that parsed character cards can use. Set to 0 to disable memory caching.
|
# The maximum amount of memory that parsed character cards can use. Set to 0 to disable memory caching.
|
||||||
memoryCacheCapacity: '100mb'
|
memoryCacheCapacity: '100mb'
|
||||||
|
# Enables disk caching for character cards. Improves performances with large card libraries.
|
||||||
|
useDiskCache: false
|
||||||
|
|
||||||
# Allow secret keys exposure via API
|
# Allow secret keys exposure via API
|
||||||
allowKeysExposure: false
|
allowKeysExposure: false
|
||||||
|
@ -81,14 +81,14 @@ export const read = (image) => {
|
|||||||
* Parses a card image and returns the character metadata.
|
* Parses a card image and returns the character metadata.
|
||||||
* @param {string} cardUrl Path to the card image
|
* @param {string} cardUrl Path to the card image
|
||||||
* @param {string} format File format
|
* @param {string} format File format
|
||||||
* @returns {string} Character data
|
* @returns {Promise<string>} Character data
|
||||||
*/
|
*/
|
||||||
export const parse = (cardUrl, format) => {
|
export const parse = async (cardUrl, format) => {
|
||||||
let fileFormat = format === undefined ? 'png' : format;
|
let fileFormat = format === undefined ? 'png' : format;
|
||||||
|
|
||||||
switch (fileFormat) {
|
switch (fileFormat) {
|
||||||
case 'png': {
|
case 'png': {
|
||||||
const buffer = fs.readFileSync(cardUrl);
|
const buffer = await fs.promises.readFile(cardUrl);
|
||||||
return read(buffer);
|
return read(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ const memoryCache = new MemoryLimitedMap(memoryCacheCapacity);
|
|||||||
const isAndroid = process.platform === 'android';
|
const isAndroid = process.platform === 'android';
|
||||||
// Use shallow character data for the character list
|
// Use shallow character data for the character list
|
||||||
const useShallowCharacters = !!getConfigValue('performance.lazyLoadCharacters', false, 'boolean');
|
const useShallowCharacters = !!getConfigValue('performance.lazyLoadCharacters', false, 'boolean');
|
||||||
const useDiskCache = true; // !!getConfigValue('performance.useDiskCache', false, 'boolean');
|
const useDiskCache = !!getConfigValue('performance.useDiskCache', false, 'boolean');
|
||||||
|
|
||||||
const diskCache = {
|
const diskCache = {
|
||||||
/**
|
/**
|
||||||
@ -48,7 +48,8 @@ const diskCache = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const cacheDir = path.join(globalThis.DATA_ROOT, '_cache', 'characters');
|
const cacheDir = path.join(globalThis.DATA_ROOT, '_cache', 'characters');
|
||||||
this._instance = storage.create({ dir: cacheDir, ttl: true });
|
const ttl = 7 * 24 * 60 * 60 * 1000; // 7 days
|
||||||
|
this._instance = storage.create({ dir: cacheDir, ttl: ttl });
|
||||||
await this._instance.init();
|
await this._instance.init();
|
||||||
return this._instance;
|
return this._instance;
|
||||||
},
|
},
|
||||||
@ -73,7 +74,7 @@ async function readCharacterData(inputFile, inputFormat = 'png') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = parse(inputFile, inputFormat);
|
const result = await parse(inputFile, inputFormat);
|
||||||
!isAndroid && memoryCache.set(cacheKey, result);
|
!isAndroid && memoryCache.set(cacheKey, result);
|
||||||
if (useDiskCache) {
|
if (useDiskCache) {
|
||||||
await diskCache.instance().then(i => i.setItem(cacheKey, result));
|
await diskCache.instance().then(i => i.setItem(cacheKey, result));
|
||||||
|
Reference in New Issue
Block a user