fix(core): don't schedule timer triggers on the server (#55605)

Fixes that even though we weren't rendering the deferred block the server, we were still triggering the timeout which can delay the response.

Fixes #55475.

PR Close #55605
This commit is contained in:
Kristiyan Kostadinov
2024-05-01 10:19:43 +02:00
committed by Andrew Kushnir
parent c9f27b434a
commit 3818436ebc
+21 -11
View File
@@ -424,9 +424,14 @@ function scheduleDelayedTrigger(
const tNode = getCurrentTNode()!;
renderPlaceholder(lView, tNode);
const cleanupFn = scheduleFn(() => triggerDeferBlock(lView, tNode), lView);
const lDetails = getLDeferBlockDetails(lView, tNode);
storeTriggerCleanupFn(TriggerType.Regular, lDetails, cleanupFn);
// Only trigger the scheduled trigger on the browser
// since we don't want to delay the server response.
if (isPlatformBrowser(lView[INJECTOR]!)) {
const cleanupFn = scheduleFn(() => triggerDeferBlock(lView, tNode), lView);
const lDetails = getLDeferBlockDetails(lView, tNode);
storeTriggerCleanupFn(TriggerType.Regular, lDetails, cleanupFn);
}
}
/**
@@ -437,15 +442,20 @@ function scheduleDelayedTrigger(
function scheduleDelayedPrefetching(
scheduleFn: (callback: VoidFunction, lView: LView) => VoidFunction) {
const lView = getLView();
const tNode = getCurrentTNode()!;
const tView = lView[TVIEW];
const tDetails = getTDeferBlockDetails(tView, tNode);
if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
const lDetails = getLDeferBlockDetails(lView, tNode);
const prefetch = () => triggerPrefetching(tDetails, lView, tNode);
const cleanupFn = scheduleFn(prefetch, lView);
storeTriggerCleanupFn(TriggerType.Prefetch, lDetails, cleanupFn);
// Only trigger the scheduled trigger on the browser
// since we don't want to delay the server response.
if (isPlatformBrowser(lView[INJECTOR]!)) {
const tNode = getCurrentTNode()!;
const tView = lView[TVIEW];
const tDetails = getTDeferBlockDetails(tView, tNode);
if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
const lDetails = getLDeferBlockDetails(lView, tNode);
const prefetch = () => triggerPrefetching(tDetails, lView, tNode);
const cleanupFn = scheduleFn(prefetch, lView);
storeTriggerCleanupFn(TriggerType.Prefetch, lDetails, cleanupFn);
}
}
}