Переглянути джерело

prefech wasm + JS by default

Evan Almloff 2 роки тому
батько
коміт
5ffdb4dbed

+ 6 - 9
packages/server/examples/axum-router/src/main.rs

@@ -41,15 +41,12 @@ fn main() {
                             // If the path is unknown, render the application
                             .fallback(
                                 move |uri: http::uri::Uri, State(ssr_state): State<SSRState>| {
-                                    let rendered = ssr_state.render(
-                                        &ServeConfig::new(
-                                            App,
-                                            AppProps {
-                                                route: Some(format!("http://{addr}{uri}")),
-                                            },
-                                        )
-                                        .head(r#"<title>Hello World!</title>"#),
-                                    );
+                                    let rendered = ssr_state.render(&ServeConfig::new(
+                                        App,
+                                        AppProps {
+                                            route: Some(format!("http://{addr}{uri}")),
+                                        },
+                                    ));
                                     async move { axum::body::Full::from(rendered) }
                                 },
                             )

+ 21 - 10
packages/server/src/render.rs

@@ -20,25 +20,36 @@ fn dioxus_ssr_html<P: 'static + Clone>(cfg: &ServeConfig<P>, renderer: &mut Rend
     let mut vdom = VirtualDom::new_with_props(*app, props.clone());
     let _ = vdom.rebuild();
     let base_path = base_path.unwrap_or(".");
-    let head = head.unwrap_or(
-        r#"<title>Dioxus Application</title>
-        <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
-        <meta name="viewport" content="width=device-width, initial-scale=1" />
-        <meta charset="UTF-8" />"#,
-    );
 
     let mut html = String::new();
 
-    if let Err(err) = write!(
-        &mut html,
-        r#"
+    let result = match head {
+        Some(head) => {
+            write!(
+                &mut html,
+                r#"
         <!DOCTYPE html>
         <html>
         <head>{head}
         </head>
         <body>
         <div id="main">"#
-    ) {
+            )
+        }
+        None => {
+            write!(
+                &mut html,
+                r#"<title>Dioxus Application</title>
+        <link rel="preload" href="/{base_path}/assets/dioxus/{application_name}_bg.wasm" as="fetch" type="application/wasm" crossorigin="" />
+        <link rel="modulepreload" href="/{base_path}/assets/dioxus/{application_name}.js" />
+        <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
+        <meta name="viewport" content="width=device-width, initial-scale=1" />
+        <meta charset="UTF-8" />"#
+            )
+        }
+    };
+
+    if let Err(err) = result {
         eprintln!("Failed to write to html: {}", err);
     }