avoid program lag caused by frequent triggering of read/write operations due to Linux file system notification
This commit is contained in:
parent
5f637dc4c7
commit
2818700182
@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user