avoid program lag caused by frequent triggering of read/write operations due to Linux file system notification

This commit is contained in:
josc146 2024-03-27 10:19:35 +08:00
parent 5f637dc4c7
commit 2818700182
2 changed files with 21 additions and 15 deletions

View File

@ -9,6 +9,7 @@ import { t } from 'i18next';
import { Preset } from './types/presets'; import { Preset } from './types/presets';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { MidiMessage, MidiPort } from './types/composition'; import { MidiMessage, MidiPort } from './types/composition';
import { throttle } from 'lodash-es';
export async function startup() { export async function startup() {
initPresets(); initPresets();
@ -103,7 +104,7 @@ async function initPresets() {
} }
async function initLoraModels() { async function initLoraModels() {
const refreshLoraModels = () => { const refreshLoraModels = throttle(() => {
ListDirFiles('lora-models').then((data) => { ListDirFiles('lora-models').then((data) => {
if (!data) return; if (!data) return;
const loraModels = []; const loraModels = [];
@ -114,7 +115,7 @@ async function initLoraModels() {
} }
commonStore.setLoraModels(loraModels); commonStore.setLoraModels(loraModels);
}); });
}; }, 2000);
refreshLoraModels(); refreshLoraModels();
EventsOn('fsnotify', (data: string) => { EventsOn('fsnotify', (data: string) => {
@ -124,9 +125,12 @@ async function initLoraModels() {
} }
async function initLocalModelsNotify() { async function initLocalModelsNotify() {
const throttleRefreshLocalModels = throttle(() => {
refreshLocalModels({ models: commonStore.modelSourceList }, false); //TODO fix bug that only add models
}, 2000);
EventsOn('fsnotify', (data: string) => { EventsOn('fsnotify', (data: string) => {
if (data.includes('models') && !data.includes('lora-models')) if (data.includes('models') && !data.includes('lora-models'))
refreshLocalModels({ models: commonStore.modelSourceList }, false); //TODO fix bug that only add models throttleRefreshLocalModels();
}); });
} }

View File

@ -61,8 +61,7 @@ export async function refreshBuiltInModels(readCache: boolean = false) {
else cache.models = manifest.models.slice(); else cache.models = manifest.models.slice();
commonStore.setModelSourceList(cache.models); commonStore.setModelSourceList(cache.models);
await saveCache().catch(() => { saveCache();
});
return cache; return cache;
} }
@ -120,8 +119,7 @@ export async function refreshLocalModels(cache: {
commonStore.setModelSourceList(cache.models); commonStore.setModelSourceList(cache.models);
if (initUnfinishedModels) if (initUnfinishedModels)
initLastUnfinishedModelDownloads(); initLastUnfinishedModelDownloads();
await saveCache().catch(() => { saveCache();
});
} }
function initLastUnfinishedModelDownloads() { function initLastUnfinishedModelDownloads() {
@ -240,14 +238,18 @@ export const saveConfigs = throttle(async () => {
trailing: true trailing: true
}); });
export const saveCache = async () => { export const saveCache = throttle(async () => {
const data: Cache = { const data: Cache = {
version: manifest.version, version: manifest.version,
models: commonStore.modelSourceList, models: commonStore.modelSourceList,
depComplete: commonStore.depComplete depComplete: commonStore.depComplete
}; };
return SaveJson('cache.json', data); return SaveJson('cache.json', data);
}; }, 1000,
{
leading: true,
trailing: true
});
export const savePresets = async () => { export const savePresets = async () => {
return SaveJson('presets.json', commonStore.presets); return SaveJson('presets.json', commonStore.presets);