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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user