← Workflows

阅读中文版本

Bundle Size Reduction Workflow

Analyse a JavaScript bundle to find the heaviest dependencies and replace or defer them to cut shipped bytes.

intermediate~55 minperformancefrontendbundle

Objective

Reduce shipped JavaScript by removing or deferring the heaviest dependencies.

Environment

  • A bundle analyser
  • A build pipeline
  • Bundle size budgets

Steps

1. Analyse the bundle

Visualise the bundle to see which modules occupy the most bytes.

Expected state: The heaviest modules are identified.

2. Remove or replace heaviest

Swap large libraries for lighter alternatives or remove unused code.

Expected state: The top offenders shrink or disappear.

3. Defer non-critical code

Split and lazy-load code not needed for the first render.

Expected state: The initial bundle contains only critical code.

4. Enforce a budget

Add a CI budget that fails when the bundle grows beyond the threshold.

Expected state: Bundle size cannot regress unnoticed.

Decision points

Remove or lazy-load heavy code?

  • Lazy-load if genuinely needed
  • Remove if unused

Remove unused code; lazy-load what is needed but not immediately.

Budget hard or soft?

  • Hard fail on regression
  • Warn only

Hard fail so size cannot creep upward unnoticed.

Expected outcome

The shipped JavaScript shrinks by targeting the heaviest dependencies and enforcing a budget.

Verification

Confirm the bundle shrinks, the first render needs less code, and CI enforces the budget.

Cleanup

Record the new baseline and update the budget as features land.

Overview

Reduce shipped JavaScript by removing or deferring the heaviest dependencies.

This workflow is reusable across teams and environments; adapt the commands to your tooling while keeping the sequence and checkpoints intact.

Environment and prerequisites

  • A bundle analyser
  • A build pipeline
  • Bundle size budgets

Procedure

1. Analyse the bundle

Visualise the bundle to see which modules occupy the most bytes.

Expected state: The heaviest modules are identified.

2. Remove or replace heaviest

Swap large libraries for lighter alternatives or remove unused code.

Expected state: The top offenders shrink or disappear.

3. Defer non-critical code

Split and lazy-load code not needed for the first render.

Expected state: The initial bundle contains only critical code.

4. Enforce a budget

Add a CI budget that fails when the bundle grows beyond the threshold.

Expected state: Bundle size cannot regress unnoticed.

# visualise the bundle composition
npx source-map-explorer dist/assets/*.js

Verification

Confirm the bundle shrinks, the first render needs less code, and CI enforces the budget.

Decision points

Remove or lazy-load heavy code?

  • Lazy-load if genuinely needed
  • Remove if unused

Recommendation: Remove unused code; lazy-load what is needed but not immediately.

Budget hard or soft?

  • Hard fail on regression
  • Warn only

Recommendation: Hard fail so size cannot creep upward unnoticed.

Common failures

  • Heavy dependencies in the entry bundle block rendering.
  • No budget lets size creep upward.
  • Removing needed code breaks features.