GoogleChrome/lighthouse · error · LighthouseError

NO_TTI_NETWORK_IDLE_PERIOD

NO_TTI_NETWORK_IDLE_PERIOD

Error message

Your page took too long to load. Please follow the opportunities in the report to reduce your page load time, and then try re-running Lighthouse. ({errorCode})

What it means

Thrown as a LighthouseError with code NO_TTI_NETWORK_IDLE_PERIOD when findOverlappingQuietPeriods() cannot find a 5-second window where fewer than 2 concurrent network requests are active, after the CPU is also quiet. This specific code fires when cpuCandidate is truthy (a CPU quiet period was found) but no matching network quiet period overlaps it. It means the page never reached network idleness, making Time to Interactive uncomputable.

Source

Thrown at core/computed/metrics/interactive.js:134

        } else {
          networkCandidate = networkQueue.shift();
        }
      } else {
        // Network starts later than CPU, window must be contained by CPU or we check the next
        if (cpuCandidate.end >= networkCandidate.start + REQUIRED_QUIET_WINDOW) {
          return {
            cpuQuietPeriod: cpuCandidate,
            networkQuietPeriod: networkCandidate,
            cpuQuietPeriods,
            networkQuietPeriods,
          };
        } else {
          cpuCandidate = cpuQueue.shift();
        }
      }
    }

    throw new LighthouseError(
      cpuCandidate
        ? LighthouseError.errors.NO_TTI_NETWORK_IDLE_PERIOD
        : LighthouseError.errors.NO_TTI_CPU_IDLE_PERIOD
    );
  }

  /**
   * @param {LH.Artifacts.NavigationMetricComputationData} data
   * @param {LH.Artifacts.ComputedContext} context
   * @return {Promise<LH.Artifacts.LanternMetric>}
   */
  static computeSimulatedMetric(data, context) {
    const metricData = NavigationMetric.getMetricComputationInput(data);
    return LanternInteractive.request(metricData, context);
  }

  /**
   * @param {LH.Artifacts.NavigationMetricComputationData} data

View on GitHub (pinned to 9515cd4e58)

Solutions

  1. Reduce the number of long-running network connections (websockets, long-polling, server-sent events)
  2. Defer or batch analytics/telemetry requests so they don't run continuously
  3. Follow the performance opportunities Lighthouse suggests to reduce overall page load time, then re-run
  4. If this is expected behavior for the page, accept that TTI cannot be measured for this URL
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-check network activity before TTI computation
const networkRecords = await NetworkRecords.request(devtoolsLog, context);
const hasContinuousTraffic = checkForLongPolling(networkRecords);
if (hasContinuousTraffic) {
  // TTI may not be computable — warn the user
  console.warn('Continuous network activity may prevent TTI computation');
}

Try / catch

try {
  const tti = await Interactive.request(metricData, context);
} catch (e) {
  if (e instanceof LighthouseError && e.code === 'NO_TTI_NETWORK_IDLE_PERIOD') {
    // Page never reached network idle — report TTI as N/A
    return { notApplicable: true, reason: 'NO_TTI_NETWORK_IDLE_PERIOD' };
  }
  throw e;
}

Prevention

When it happens

Trigger: The Interactive metric computation (TTI) iterates CPU quiet periods and tries to find overlapping network quiet periods. If all CPU quiet windows have continuous network activity (e.g., long-polling, websockets, infinite preloads), the loop exhausts cpuCandidate without finding a match and throws with NO_TTI_NETWORK_IDLE_PERIOD.

Common situations: Pages with long-polling connections, constant analytics beacons, service workers making endless fetch calls, or very slow loading pages that never settle. Also common on pages with heavy resource preloading that extends well beyond FCP.

Related errors


AI-assisted analysis of GoogleChrome/lighthouse@9515cd4e58 (2026-08-13). Data as JSON: /api/errors/4d43a76b87e23c7e. Report an issue: GitHub.