Allow index.preloadInitial to preload the full static closure of the initial bundle (number or "all")

Offen
#34,396 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
58/100
Issue-Typ
Feature
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
angular, typescript

Rechercherichtung

Start by reading the implementation and tests for the existing index.preloadInitial boolean option, along with the CLI configuration schema and generated index.html behavior. Trace how the current shallow limit of 10 is applied, then check the option's documentation and tests. Done means numeric values and "all" are accepted, while true keeps its current behavior and generated preload hints match the requested static closure.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

area: @angular/build
Command

build

Description

#27581 limited modulepreload hints to a shallow set of 10 initial chunks, as a safe default for all applications (#27490). For an application with a deep initial import graph that default costs one network round trip per depth level: the browser only discovers the chunks at depth N after the chunks at depth N-1 have arrived and been parsed.

Our main has a static closure of 45 chunks across six depth levels. We post-process index.html after ng build to preload all of them. Measured in production RUM over three weeks (roughly a million initial loads per week), weekdays before versus after:

Segment LCP p75 before LCP p75 after
all initial loads 2.00 s 1.84 s
effective connection type 4g, desktop 2.07 s 1.91 s
effective connection type 3g, desktop 7.0 s 5.3 s
effective connection type 2g, desktop 22.8 s 14.7 s

The slowest connections gained the most, which is the opposite of what the HTTP Archive correlation cited in #27490 would predict. That correlation covers preloads of any resource. Chunks in the entry point's static closure are all required before the application can execute at all, so preloading them does not compete with anything more critical than the stylesheet.

Describe the solution you'd like

Let index.preloadInitial accept a number or "all" in addition to the current boolean, keeping true as today's shallow-10 behaviour. That would let us delete a post-build script that has to track the CLI's index.html output, and which broke on the integrity attributes added in 22.x.

Describe alternatives you've considered

Post-processing index.html (what we do now); setting preloadInitial: false and writing every hint ourselves (same fragility); eager-loading the landing route into the main bundle (adds 330 KB gzipped to every first load for the 70% of visits that land elsewhere).

Vorherrschende Sprache
TypeScript
Sterne
27k
Forks
11.8k
Ø Merge
1 T. 52 Min.
Gemergte PRs (30 T.)
268

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus angular/angular-cli

Alle Issues in angular/angular-cli

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.