乐闻世界logo
搜索文章和话题

How does SolidJS implement Server-Side Rendering (SSR)? What rendering modes are available?

2月21日 15:22

SolidJS supports Server-Side Rendering (SSR) with multiple rendering modes:

Basic SSR Setup:

javascript
// entry-server.jsx import { renderToString } from 'solid-js/web'; import App from './App'; export function render(url) { return renderToString(() => <App url={url} />); } // entry-client.jsx import { hydrate } from 'solid-js/web'; import App from './App'; hydrate(() => <App />, document);

Rendering Modes:

  1. Static Site Generation (SSG):
javascript
import { renderToStringAsync } from 'solid-js/web'; export async function getStaticPaths() { return ['/about', '/contact']; } export default async function Page({ params }) { return renderToStringAsync(() => <Component />); }
  1. Server-Side Rendering (SSR):
javascript
import { StartServer, createHandler } from '@solidjs/start/server'; export default createHandler(() => ( <StartServer document={({ assets, children }) => ( <html> <head>{assets}</head> <body>{children}</body> </html> )} /> ));
  1. Streaming Rendering:
javascript
import { renderToStream } from 'solid-js/web'; app.get('*', async (req, res) => { const stream = renderToStream(() => <App />); stream.pipe(res); });

Data Fetching:

javascript
// Using createResource for async data const [data] = createResource(fetchData, { initialValue: null, deferStream: true // Supports streaming }); // Server-side data prefetch export async function getData() { return await fetchData(); }

Isomorphic Application:

javascript
// Code that runs on both server and client function Component() { const isServer = useIsServer(); return ( <div> {isServer() ? 'Server' : 'Client'} </div> ); }

Performance Optimization:

  • Use deferStream for lazy loading
  • Prefetch critical data
  • Optimize hydration process
  • Use Suspense boundaries
标签:SolidJS