サーバーサイドレンダリング (Server-Side Rendering)
デフォルトでは、Yewコンポーネントはクライアントサイドでレンダリングされます。ユーザーがウェブサイトにアクセスすると、サーバーは実際のコンテンツを含まない骨組みのHTMLファイルとWebAssemblyパッケージをブラウザに送信します。すべてのコンテンツはクライアントサイドでWebAssemblyパッケージによってレンダリングされます。これをクライアントサイドレンダリングと呼びます。
この方法はほとんどのウェブサイトにとって有効ですが、いくつかの注意点があります:
- ユーザーはWebAssemblyパッケージがダウンロードされ、初期レンダリングが完了するまで何も表示されません。これにより、ネットワークが遅い場合にユーザーエクスペリエンスが悪化する可能性があります。
- 一部の検索エンジンは動的にレンダリングされたウェブページのコンテンツをサポートしておらず、サポートしている検索エンジンでも通常は動的なウェブサイトのランキングが低くなります。
これらの問題を解決するために、ウェブサイトをサーバーサイドでレンダリングすることができます。
動作原理
Yewはページをサーバ ーサイドでレンダリングするための ServerRenderer
を提供しています。
Yewコンポーネントをサーバーサイドでレンダリングするには、ServerRenderer::<App>::new()
を使用してレンダラーを作成し、renderer.render().await
を呼び出して <App />
を String
としてレンダリングします。
use yew::prelude::*;
use yew::ServerRenderer;
#[function_component]
fn App() -> Html {
html! {<div>{"Hello, World!"}</div>}
}
// この例が CI の WASM 環境で動作することを保証するために `flavor = "current_thread"` を使用しています。
// マルチスレッドを使用したい場合は、デフォルトの `#[tokio::main]` マクロを使用できます。
#[tokio::main(flavor = "current_thread")]
async fn no_main() {
let renderer = ServerRenderer::<App>::new();
let rendered = renderer.render().await;
// プリント: <div>Hello, World!</div>
println!("{}", rendered);
}