{"record":{"id":"4d43a76b87e23c7e","repo":"GoogleChrome/lighthouse","slug":"no-tti-network-idle-period","errorCode":"NO_TTI_NETWORK_IDLE_PERIOD","errorMessage":"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})","messagePattern":"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\\. \\((.+?)\\)","errorType":"exception","errorClass":"LighthouseError","httpStatus":null,"severity":"error","filePath":"core/computed/metrics/interactive.js","lineNumber":134,"sourceCode":"        } else {\n          networkCandidate = networkQueue.shift();\n        }\n      } else {\n        // Network starts later than CPU, window must be contained by CPU or we check the next\n        if (cpuCandidate.end >= networkCandidate.start + REQUIRED_QUIET_WINDOW) {\n          return {\n            cpuQuietPeriod: cpuCandidate,\n            networkQuietPeriod: networkCandidate,\n            cpuQuietPeriods,\n            networkQuietPeriods,\n          };\n        } else {\n          cpuCandidate = cpuQueue.shift();\n        }\n      }\n    }\n\n    throw new LighthouseError(\n      cpuCandidate\n        ? LighthouseError.errors.NO_TTI_NETWORK_IDLE_PERIOD\n        : LighthouseError.errors.NO_TTI_CPU_IDLE_PERIOD\n    );\n  }\n\n  /**\n   * @param {LH.Artifacts.NavigationMetricComputationData} data\n   * @param {LH.Artifacts.ComputedContext} context\n   * @return {Promise<LH.Artifacts.LanternMetric>}\n   */\n  static computeSimulatedMetric(data, context) {\n    const metricData = NavigationMetric.getMetricComputationInput(data);\n    return LanternInteractive.request(metricData, context);\n  }\n\n  /**\n   * @param {LH.Artifacts.NavigationMetricComputationData} data","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/GoogleChrome/lighthouse/blob/9515cd4e58ebed69f78742d932b501c2cab8ad8f/core/computed/metrics/interactive.js#L116-L152","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Reduce the number of long-running network connections (websockets, long-polling, server-sent events)","Defer or batch analytics/telemetry requests so they don't run continuously","Follow the performance opportunities Lighthouse suggests to reduce overall page load time, then re-run","If this is expected behavior for the page, accept that TTI cannot be measured for this URL"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Pre-check network activity before TTI computation\nconst networkRecords = await NetworkRecords.request(devtoolsLog, context);\nconst hasContinuousTraffic = checkForLongPolling(networkRecords);\nif (hasContinuousTraffic) {\n  // TTI may not be computable — warn the user\n  console.warn('Continuous network activity may prevent TTI computation');\n}","typeGuard":null,"tryCatchPattern":"try {\n  const tti = await Interactive.request(metricData, context);\n} catch (e) {\n  if (e instanceof LighthouseError && e.code === 'NO_TTI_NETWORK_IDLE_PERIOD') {\n    // Page never reached network idle — report TTI as N/A\n    return { notApplicable: true, reason: 'NO_TTI_NETWORK_IDLE_PERIOD' };\n  }\n  throw e;\n}","preventionTips":["Reduce long-polling, websocket, and SSE connections that prevent network idle","Batch or throttle analytics beacons to avoid continuous network activity","Accept that some pages (chat apps, dashboards) may never reach network idle","Handle the NO_TTI_NETWORK_IDLE_PERIOD error in your metric pipeline as a soft failure"],"tags":["tti","network","performance","metrics"],"backgroundTag":null,"analyzedSha":"9515cd4e58ebed69f78742d932b501c2cab8ad8f","analyzedAt":"2026-08-13T06:28:10.346Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}