Skip to content

perf: explore bundle optimisations with route-based code splittins - #6

Draft
AFOJ wants to merge 1 commit into
mainfrom
perf/route-code-splitting
Draft

AFOJ wants to merge 1 commit into
mainfrom
perf/route-code-splitting

Conversation

@AFOJ

@AFOJ AFOJ commented Aug 21, 2026

Copy link
Copy Markdown
Owner

Description

Explores (mild) performance optimisations for bundle delivery:

  • Route-based code splitting: each page is now lazy-loaded, so the browser only downloads the code for the page being visited instead of one monolithic bundle.
  • Vendor chunk splitting: react/react-router (framework), @base-ui/react (ui), and dexie (db) are split into stable named chunks so they stay cached across deploys.

This is intentionally a first pass, further optimisation will be explored later as the app grows to avoid premature optimisation.

Summary by Sourcery

Improve bundle delivery by adding route-based code splitting and cache-friendly vendor chunks.

Enhancements:

  • Lazy-load route pages so visitors download only the code required for the page they visit.
  • Split framework, UI, and database dependencies into stable vendor chunks to improve caching across deployments.

Build:

  • Configure Vite bundle grouping for named vendor chunks.

@AFOJ AFOJ self-assigned this Aug 21, 2026
@sourcery-ai

sourcery-ai Bot commented Aug 21, 2026

Copy link
Copy Markdown

Reviewer's Guide

Implements route-based lazy loading for all page components and configures Vite’s build to split vendor code into stable, named chunks for framework, UI, and DB libraries.

Sequence diagram for route-based lazy loading with RouteSuspense

sequenceDiagram
  actor User
  participant Browser
  participant ReactRouter
  participant RouteSuspense
  participant CreateResumePage

  User->>Browser: navigate /resumes/create
  Browser->>ReactRouter: render route element
  ReactRouter->>RouteSuspense: render RouteSuspense
  RouteSuspense-->>User: render fallback spinner
  RouteSuspense->>CreateResumePage: import()
  CreateResumePage-->>RouteSuspense: module loaded
  RouteSuspense-->>User: render CreateResumePage
Loading

File-Level Changes

Change Details Files
Introduce route-level lazy loading with Suspense-wrapped page components to enable route-based code splitting.
  • Replace static imports of page components with React.lazy dynamic imports for each route page.
  • Add a reusable RouteSuspense wrapper component that provides a full-page loading spinner using React.Suspense fallback.
  • Wrap each route element (setup, resumes list/create/upload/view/edit, profile) in RouteSuspense so pages are loaded lazily per route.
src/routes.tsx
Configure Vite/Rolldown to emit stable, named vendor chunks for framework, UI, and DB dependencies.
  • Add build.rolldownOptions.output.codeSplitting configuration to vite.config to define code splitting groups.
  • Group React, React DOM, React Router, and scheduler into a framework chunk.
  • Group @base-ui/react into a ui chunk, and dexie/dexie-react-hooks into a db chunk so these vendor bundles can be cached across deploys.
vite.config.ts

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant