sotashimozono_obsidian-remo.../plugin
Souta 0c9f3a523b perf(vault): chunk the connect-time populate so large vaults don't freeze the UI
Dogfooding beta.14 (RPC daemon finally up): a profile pointed at a large
remote vault (~/work with tens of thousands of files) froze Obsidian for tens
of seconds on connect and the File Explorer stayed empty. Root cause:
VaultModelBuilder.build materialised every walked entry and fired a
vault.trigger('create') for each in ONE synchronous JS tick — 30k+ inserts +
30k+ events block the main thread.

- VaultModelBuilder: extract the per-entry insert into `insertBuildEntry`
  (shared by buildSync); add `buildChunked(entries, chunkSize=500)` that
  processes the folders-first list in chunks and yields to the event loop
  between them, so the tree fills in progressively and the window stays
  responsive. Ordering is preserved (parents before children) and inserts are
  idempotent, so a live fs.changed insert landing between chunks can't
  double-add.
- populateVaultFromRemote uses buildChunked.

Structure-only caching (persist the walked tree to skip the cold re-walk on
reconnect) and lazy per-folder loading are follow-ups; this alone removes the
freeze. tsc/lint/vitest green (1196). Ships as beta.15.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 19:43:22 +09:00
..
e2e test(e2e): quarantine flaky reflect modify/large-image tests (#376) (#377) 2026-06-08 17:59:44 +09:00
scripts fix(daemon): sha-verify on the fast path + keep the dev-daemon marker in E2E 2026-07-02 19:07:38 +09:00
src perf(vault): chunk the connect-time populate so large vaults don't freeze the UI 2026-07-02 19:43:22 +09:00
tests perf(vault): chunk the connect-time populate so large vaults don't freeze the UI 2026-07-02 19:43:22 +09:00
esbuild.config.mjs fix(plugin): resolve Obsidian reviewer findings (CSS / disclosure / dynamic-exec) — 1.1.1-beta.2 (#373) 2026-06-08 17:17:41 +09:00
eslint.config.mjs chore(lint): tighten local config to mirror more of ObsidianReviewBot's checklist (0.4.76) 2026-04-29 20:50:14 +09:00
manifest.json perf(vault): chunk the connect-time populate so large vaults don't freeze the UI 2026-07-02 19:43:22 +09:00
package-lock.json perf(vault): chunk the connect-time populate so large vaults don't freeze the UI 2026-07-02 19:43:22 +09:00
package.json perf(vault): chunk the connect-time populate so large vaults don't freeze the UI 2026-07-02 19:43:22 +09:00
styles.css release: 1.1.2 (stable) — validator-clean (#395) 2026-06-09 15:28:18 +09:00
tsconfig.json fix(plugin): add node types to tsconfig to resolve unsafe-member warnings (#380) 2026-06-08 21:48:02 +09:00
versions.json release: 1.1.5 (stable) 2026-06-16 10:16:04 +09:00
vitest.config.ts fix(tests): repair 6 CI failures + bump 1.0.36 (#278) 2026-05-09 23:26:01 +09:00
vitest.integration.config.ts chore(plugin): satisfy ObsidianReviewBot's stricter ruleset, round 2 (0.4.75) 2026-04-29 20:19:10 +09:00
vitest.replay.config.ts ci(replay): replay previous release tag's tests against current source 2026-04-30 17:54:22 +09:00
vitest.setup.ts chore(deps-dev): integrate dev-deps group + prefer-window-timers fix (1.1.1-beta.1) (#371) 2026-06-08 13:18:07 +09:00