Performance
StateMesh is designed for performance. This guide covers the built-in optimizations and best practices.
Built-in Optimizations
Path-Scoped Subscriptions
Subscriptions are equality-checked and path-scoped. Only relevant subscribers re-render:
// Updating cart.items does NOT trigger subscribers reading theme
mesh.setPath("cart.items", [...items, newItem]);Batch Operations
Group multiple updates into one notification:
mesh.batch(() => {
mesh.setPath("a", 1);
mesh.setPath("b", 2);
mesh.setPath("c", 3);
});
// Subscribers fire onceAction Skip
Actions that produce the same state (checked via shallowEqual) skip the clone-and-commit cycle entirely.
Resource Deduplication
Multiple components fetching the same resource with the same params share a single network request.
Computed Caching
Computed values cache until their dependencies change. Multiple reads return the same cached result.
Path Tokenization Cache
Repeated path.split('.') calls are cached per path string.
Stable Status References
getResourceStatus, getTransactionStatus, and getMutationStatus return the same object reference when the underlying state hasn't changed.
createSelector
Use createSelector for expensive selectors:
import { createSelector } from "statemesh-core";
const selectFilteredProducts = createSelector(
(state) => state.products,
(state) => state.filters,
(products, filters) => {
// Expensive filtering/sorting
return products.filter(/* ... */).sort(/* ... */);
}
);Only recomputes when products or filters changes.
Profiler
Record performance samples:
const slowOps = mesh.getProfilerSamples({
slowOnly: true,
minDuration: 16 // ms
});Best Practices
TIP
Use path-based subscriptions. useMeshState("cart.count") is more efficient than useMeshSelector(s => s.cart.count) for simple paths.
TIP
Batch related updates. If you update 5 paths in response to one event, wrap them in mesh.batch().
TIP
Use staleTime on resources. Prevent unnecessary refetches when data is still fresh.
TIP
Use maxCacheEntries on resources. Bound memory usage for list/search resources.
WARNING
Avoid deep-cloning large state. Undo/redo and time travel store deep clones. Use paths to limit what's tracked.
TIP
Use keepPreviousData on resources. Prevent loading spinners during pagination/filter changes.
Next Steps
- Batch Operations — Group updates
- Selectors & Computed — Derived state
- Resources — Cache options
