CSR, SSR, and SSG: how to choose rendering with system-level tradeoffs | Jake Lee