perf(ivy): improve NaN checks in change detection (#32212)
This commit drops our custom, change-detection specific, equality comparison util in favour of the standard Object.is which has desired semantics. There are multiple advantages of this approach: - less code to maintain on our end; - avoid NaN checks if both values are equal; - re-write NaN checks so we don't trigger V8 deoptimizations. PR Close #32212
This commit is contained in:

committed by
Andrew Kushnir

parent
53f33c1cec
commit
53bfa7c6d6
@ -12,8 +12,6 @@ import {throwErrorIfNoChangesMode} from './errors';
|
||||
import {LView} from './interfaces/view';
|
||||
import {getCheckNoChangesMode} from './state';
|
||||
import {NO_CHANGE} from './tokens';
|
||||
import {isDifferent} from './util/misc_utils';
|
||||
|
||||
|
||||
|
||||
// TODO(misko): consider inlining
|
||||
@ -36,9 +34,11 @@ export function bindingUpdated(lView: LView, bindingIndex: number, value: any):
|
||||
ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
|
||||
ngDevMode &&
|
||||
assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);
|
||||
|
||||
const oldValue = lView[bindingIndex];
|
||||
if (isDifferent(oldValue, value)) {
|
||||
|
||||
if (Object.is(oldValue, value)) {
|
||||
return false;
|
||||
} else {
|
||||
if (ngDevMode && getCheckNoChangesMode()) {
|
||||
// View engine didn't report undefined values as changed on the first checkNoChanges pass
|
||||
// (before the change detection was run).
|
||||
@ -50,8 +50,6 @@ export function bindingUpdated(lView: LView, bindingIndex: number, value: any):
|
||||
lView[bindingIndex] = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Updates 2 bindings if changed, then returns whether either was updated. */
|
||||
|
Reference in New Issue
Block a user