mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 17:51:24 +01:00
perf(obsidian): add caching to vault file scanning
The recursive directory scan was running every time the user opened the note browser, rescanning 13k+ files repeatedly. This was slow and wasteful. Changes: - Add vaultFilesCache object with files, timestamp, and TTL (5 min) - Check cache before scanning in getVaultFiles() - Cache results after successful scan - Add clearVaultCache() function for manual refresh - Add forceRefresh parameter to bypass cache - Log cache hits vs misses for debugging Performance: - First load: Scans vault (slow, but only once) - Subsequent loads: Instant (uses cache) - Cache expires after 5 minutes (auto-refresh) - User can manually clear cache if needed This makes opening the note browser instant on subsequent uses.
This commit is contained in:
parent
91bd678535
commit
a22b40e7ca
1 changed files with 34 additions and 3 deletions
|
|
@ -13,6 +13,13 @@ const ObsidianBridge = (() => {
|
||||||
vaultName: ""
|
vaultName: ""
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Cache for vault file list
|
||||||
|
let vaultFilesCache = {
|
||||||
|
files: null,
|
||||||
|
timestamp: null,
|
||||||
|
ttl: 5 * 60 * 1000 // 5 minutes cache
|
||||||
|
};
|
||||||
|
|
||||||
// Initialize from localStorage
|
// Initialize from localStorage
|
||||||
function init() {
|
function init() {
|
||||||
const stored = localStorage.getItem("obsidianConfig");
|
const stored = localStorage.getItem("obsidianConfig");
|
||||||
|
|
@ -94,19 +101,42 @@ const ObsidianBridge = (() => {
|
||||||
return mdFiles;
|
return mdFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all markdown files from vault (recursively)
|
// Clear the vault files cache
|
||||||
async function getVaultFiles() {
|
function clearVaultCache() {
|
||||||
|
vaultFilesCache.files = null;
|
||||||
|
vaultFilesCache.timestamp = null;
|
||||||
|
INFO && console.log("Vault file cache cleared");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all markdown files from vault (recursively, with caching)
|
||||||
|
async function getVaultFiles(forceRefresh = false) {
|
||||||
if (!config.enabled) {
|
if (!config.enabled) {
|
||||||
throw new Error("Obsidian not connected");
|
throw new Error("Obsidian not connected");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check cache
|
||||||
|
const now = Date.now();
|
||||||
|
const cacheValid = vaultFilesCache.files !== null &&
|
||||||
|
vaultFilesCache.timestamp !== null &&
|
||||||
|
(now - vaultFilesCache.timestamp) < vaultFilesCache.ttl;
|
||||||
|
|
||||||
|
if (cacheValid && !forceRefresh) {
|
||||||
|
INFO && console.log(`getVaultFiles: Using cached list (${vaultFilesCache.files.length} files)`);
|
||||||
|
return vaultFilesCache.files;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
TIME && console.time("getVaultFiles");
|
TIME && console.time("getVaultFiles");
|
||||||
|
INFO && console.log("getVaultFiles: Scanning vault (cache miss or expired)...");
|
||||||
|
|
||||||
// Recursively scan all directories
|
// Recursively scan all directories
|
||||||
const mdFiles = await scanDirectory("");
|
const mdFiles = await scanDirectory("");
|
||||||
|
|
||||||
INFO && console.log(`getVaultFiles: Found ${mdFiles.length} markdown files (recursive scan)`);
|
// Update cache
|
||||||
|
vaultFilesCache.files = mdFiles;
|
||||||
|
vaultFilesCache.timestamp = now;
|
||||||
|
|
||||||
|
INFO && console.log(`getVaultFiles: Found ${mdFiles.length} markdown files (recursive scan, cached)`);
|
||||||
DEBUG && console.log("Sample files:", mdFiles.slice(0, 10));
|
DEBUG && console.log("Sample files:", mdFiles.slice(0, 10));
|
||||||
|
|
||||||
TIME && console.timeEnd("getVaultFiles");
|
TIME && console.timeEnd("getVaultFiles");
|
||||||
|
|
@ -520,6 +550,7 @@ Add your lore here...
|
||||||
saveConfig,
|
saveConfig,
|
||||||
testConnection,
|
testConnection,
|
||||||
getVaultFiles,
|
getVaultFiles,
|
||||||
|
clearVaultCache,
|
||||||
getNote,
|
getNote,
|
||||||
updateNote,
|
updateNote,
|
||||||
createNote,
|
createNote,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue