A static asset can be built ahead of time and delivered as a file. A dynamic response is generated or changed when a request arrives. Many useful websites combine both approaches.

Images, styles, and public scripts often fit static delivery well. Content that depends on a hostname, a signed-in user, or current data may need request-time logic.

The boundary is a design choice. Keep frequently reused assets simple to deliver, and use dynamic work where it produces a meaningful difference for the visitor.

An example to consider.

Imagine a publication whose articles can be prepared ahead of a visit. A separate search interaction can add usefulness without changing how the prose is delivered.

Put it in perspective.

Look at the information that outlives a single operation. Its owner, meaning, and recovery path deserve as much attention as the operation that created it.
A few starting points
  1. Separate shared assets from request-specific content.
  2. Build ahead where the content permits it.
  3. Use runtime work for a clear requirement.

Follow a related question

Define the understood inputs.

Where automation should hand back

Inspect the source and measurement method.

An outlier is a question first

Keep learning

Related background to continue exploring this subject.

Cloudflare: serving static pages with Functions MDN: learn web development
Make room for ideas