Expiration Time

// reconciler > ReactFiberExpirationTime.js

const NoWork = 0
const Never = 1
const Idle = 2
const Sync = MAX_SIGNED_31_BIT_INT
const Batched = Sync - 1
// reconciler > ReactFiberWorkLoop.js > computeExpirationForFiber()
function computeExpirationForFiber(currentTime, fiber) {
	const mode = fiber.mode;
	if ((mode & BlockingMode) === NoMode) {
		return Sync;
	}

	const priorityLevel = getCurrentPriorityLevel(); // 스케쥴러에서 이벤트의 우선순위를 참조한다
	if ((mode & ConcurrentMode) === NoMode) {
		return priorityLevel === ImmediatePriority ? Sync : Batched;
	}

	switch (priorityLevel) {
		case ImmediatePriority:
			expirationTime = Sync;
			break;
		case UserBlockingPriority:
			expirationTime = computeInteractiveExpiration(currentTime);
			break;
		case NormalPriority:
		case LowPriority:
			expirationTime = computeInteractiveExpiration(currentTime);
			break;
		case IdlePriority:
			expirationTime = Idle;
			break;
		default :
			invariant(false, 'Expected a valid priority level');
	}
}
// reconciler > ReactFiberBeginWork.js > balloutOnAlreadyFinishedWork()

const childExpirationTime = workInProgress.childExpirationTime
if (childExpirationTime < renderExpirationTime) {
	return null
} else {
	cloneChildFibers(current, workInProgress)
	return workInProgress.child
}

Lane 모델이 해결하고자 하는 것

업데이트 개념 분리