fix: replace slow deep-equal with fastDeepEqual to resolve CPU bottleneck (#19771)

## Summary

- Replaced the `deep-equal` npm package with the existing
`fastDeepEqual` from `twenty-shared/utils` across 5 files in the server
and shared packages
- `deep-equal` was causing severe CPU overhead in the record update hot
path (`executeMany` → `formatTwentyOrmEventToDatabaseBatchEvent` →
`objectRecordChangedValues` → `deepEqual`, called **per field per
record**)
- `fastDeepEqual` is ~100x faster for plain JSON database records since
it skips unnecessary prototype chain inspection and edge-case handling
- Removed the now-unnecessary `LARGE_JSON_FIELDS` branching in
`objectRecordChangedValues` since all fields now use the fast
implementation
This commit is contained in:
Charles Bochet
2026-04-16 17:23:50 +02:00
committed by GitHub
parent d3df58046c
commit 4103efcb84
5 changed files with 16 additions and 36 deletions
@@ -1,5 +1,6 @@
import { isDefined } from '@/utils/validation';
import deepEqual from 'deep-equal';
import { fastDeepEqual } from './json/fast-deep-equal';
type Diff<T extends { id: string }> = {
toCreate: T[];
@@ -67,7 +68,9 @@ export const computeDiffBetweenObjects = <
propertiesToCompare,
);
if (!deepEqual(comparableExistingEntity, comparableReceivedEntity)) {
if (
!fastDeepEqual(comparableExistingEntity, comparableReceivedEntity)
) {
toUpdate.push(receivedObject);
}
}