LearnNewsExamplesServices
Frontmatter
id9331
titleStore: Prevent soft hydration for inactive/null filters in Turbo Mode
stateClosed
labels
enhancementai
assigneestobiu
createdAtFeb 27, 2026, 12:22 PM
updatedAtFeb 27, 2026, 12:25 PM
githubUrlhttps://github.com/neomjs/neo/issues/9331
authortobiu
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtFeb 27, 2026, 12:25 PM

Store: Prevent soft hydration for inactive/null filters in Turbo Mode

Closed v12.0.0 enhancementai
tobiu
tobiu commented on Feb 27, 2026, 12:22 PM

In "Turbo Mode" (autoInitRecords: false), the Store#filter and Store#isFilteredItem methods perform "Soft Hydration" to resolve missing fields on raw data objects.

Currently, they hydrate properties for all filters in the store.filters array, even if the filter has value: null (meaning it's effectively inactive).

For complex calculated fields (like commitRatio in DevIndex, which triggers 100k+ reduce calls), this causes a massive, multi-second performance penalty when a user changes a completely unrelated, simple filter (like Country).

Fix: Update src/data/Store.mjs so that filter() and isFilteredItem() only hydrate properties for filters where !filter.disabled && filter.value !== null. This ensures we only pay the heavy calculation penalty when a user actually activates that specific filter.

tobiu added the enhancement label on Feb 27, 2026, 12:22 PM
tobiu added the ai label on Feb 27, 2026, 12:22 PM
tobiu referenced in commit 10c6488 - "perf(Store): Prevent soft hydration for inactive/null filters in Turbo Mode (#9331)" on Feb 27, 2026, 12:24 PM
tobiu assigned to @tobiu on Feb 27, 2026, 12:24 PM
tobiu
tobiu Feb 27, 2026, 12:25 PM

Input from Gemini 3.1 Pro:

✦ I have implemented the optimization in src/data/Store.mjs.

Both filter() and isFilteredItem() now check for !f.disabled && f.value !== null before performing Soft Hydration. This prevents executing heavy calculate loops (like commitRatio in DevIndex) for 50,000 items when those filters aren't actively being used.

Changes have been committed and pushed to dev. Closing this ticket.

tobiu closed this issue on Feb 27, 2026, 12:25 PM