Skip to content

Commit

Permalink
fix(core): don't schedule timer triggers on the server (#55605)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
crisbeto authored and AndrewKushnir committed May 1, 2024
1 parent c9f27b4 commit 3818436
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions packages/core/src/defer/instructions.ts
Expand Up @@ -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);
}
}

/**
Expand All @@ -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);
}
}
}

Expand Down

0 comments on commit 3818436

Please sign in to comment.