From e0265252d7bb48e07d4cfa379a5cde38ec4fc5fd Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Fri, 22 Sep 2023 15:41:44 -0400 Subject: [PATCH] fix: broken benchmarks (closes #1763) (#1771) --- benchmarks/Cargo.toml | 8 +- benchmarks/src/lib.rs | 4 +- benchmarks/src/reactive.rs | 248 +++++++++------------------------- benchmarks/src/ssr.rs | 16 +-- benchmarks/src/todomvc/mod.rs | 5 +- 5 files changed, 77 insertions(+), 204 deletions(-) diff --git a/benchmarks/Cargo.toml b/benchmarks/Cargo.toml index e03d6c3c7..6c6ecd2bd 100644 --- a/benchmarks/Cargo.toml +++ b/benchmarks/Cargo.toml @@ -4,12 +4,11 @@ version = "0.1.0" edition = "2021" [dependencies] -l021 = { package = "leptos", version = "0.2.1" } -leptos = { path = "../leptos", features = [ - "ssr", +l0410 = { package = "leptos", version = "0.4.10", features = [ "nightly", - "experimental-islands", + "ssr", ] } +leptos = { path = "../leptos", features = ["ssr", "nightly"] } sycamore = { version = "0.8", features = ["ssr"] } yew = { version = "0.20", features = ["ssr"] } tokio-test = "0.4" @@ -24,7 +23,6 @@ strum_macros = "0.24" serde = { version = "1", features = ["derive", "rc"] } serde_json = "1" tera = "1" -reactive-signals = "0.1.0-alpha.4" [dependencies.web-sys] version = "0.3" diff --git a/benchmarks/src/lib.rs b/benchmarks/src/lib.rs index 44242204d..2d6802282 100644 --- a/benchmarks/src/lib.rs +++ b/benchmarks/src/lib.rs @@ -2,6 +2,6 @@ extern crate test; -//åmod reactive; -//mod ssr; +mod reactive; +mod ssr; mod todomvc; diff --git a/benchmarks/src/reactive.rs b/benchmarks/src/reactive.rs index d283a2396..2e54d2783 100644 --- a/benchmarks/src/reactive.rs +++ b/benchmarks/src/reactive.rs @@ -7,19 +7,16 @@ fn leptos_deep_creation(b: &mut Bencher) { let runtime = create_runtime(); b.iter(|| { - create_scope(runtime, || { - let signal = create_rw_signal(0); - let mut memos = Vec::>::new(); - for _ in 0..1000usize { - let prev = memos.last().copied(); - if let Some(prev) = prev { - memos.push(create_memo(move |_| prev.get() + 1)); - } else { - memos.push(create_memo(move |_| signal.get() + 1)); - } + let signal = create_rw_signal(0); + let mut memos = Vec::>::new(); + for _ in 0..1000usize { + let prev = memos.last().copied(); + if let Some(prev) = prev { + memos.push(create_memo(move |_| prev.get() + 1)); + } else { + memos.push(create_memo(move |_| signal.get() + 1)); } - }) - .dispose() + } }); runtime.dispose(); @@ -31,20 +28,17 @@ fn leptos_deep_update(b: &mut Bencher) { let runtime = create_runtime(); b.iter(|| { - create_scope(runtime, || { - let signal = create_rw_signal(0); - let mut memos = Vec::>::new(); - for _ in 0..1000usize { - if let Some(prev) = memos.last().copied() { - memos.push(create_memo(move |_| prev.get() + 1)); - } else { - memos.push(create_memo(move |_| signal.get() + 1)); - } + let signal = create_rw_signal(0); + let mut memos = Vec::>::new(); + for _ in 0..1000usize { + if let Some(prev) = memos.last().copied() { + memos.push(create_memo(move |_| prev.get() + 1)); + } else { + memos.push(create_memo(move |_| signal.get() + 1)); } - signal.set(1); - assert_eq!(memos[999].get(), 1001); - }) - .dispose() + } + signal.set(1); + assert_eq!(memos[999].get(), 1001); }); runtime.dispose(); @@ -56,16 +50,12 @@ fn leptos_narrowing_down(b: &mut Bencher) { let runtime = create_runtime(); b.iter(|| { - create_scope(runtime, || { - let sigs = (0..1000).map(|n| create_signal(n)).collect::>(); - let reads = sigs.iter().map(|(r, _)| *r).collect::>(); - let writes = sigs.iter().map(|(_, w)| *w).collect::>(); - let memo = create_memo(move |_| { - reads.iter().map(|r| r.get()).sum::() - }); - assert_eq!(memo(), 499500); - }) - .dispose() + let sigs = (0..1000).map(|n| create_signal(n)).collect::>(); + let reads = sigs.iter().map(|(r, _)| *r).collect::>(); + let writes = sigs.iter().map(|(_, w)| *w).collect::>(); + let memo = + create_memo(move |_| reads.iter().map(|r| r.get()).sum::()); + assert_eq!(memo(), 499500); }); runtime.dispose(); @@ -77,16 +67,13 @@ fn leptos_fanning_out(b: &mut Bencher) { let runtime = create_runtime(); b.iter(|| { - create_scope(runtime, || { - let sig = create_rw_signal(0); - let memos = (0..1000) - .map(|_| create_memo(move |_| sig.get())) - .collect::>(); - assert_eq!(memos.iter().map(|m| m.get()).sum::(), 0); - sig.set(1); - assert_eq!(memos.iter().map(|m| m.get()).sum::(), 1000); - }) - .dispose() + let sig = create_rw_signal(0); + let memos = (0..1000) + .map(|_| create_memo(move |_| sig.get())) + .collect::>(); + assert_eq!(memos.iter().map(|m| m.get()).sum::(), 0); + sig.set(1); + assert_eq!(memos.iter().map(|m| m.get()).sum::(), 1000); }); runtime.dispose(); @@ -97,145 +84,36 @@ fn leptos_narrowing_update(b: &mut Bencher) { use leptos::*; let runtime = create_runtime(); - b.iter(|| { - create_scope(runtime, || { - let acc = Rc::new(Cell::new(0)); - let sigs = (0..1000).map(|n| create_signal(n)).collect::>(); - let reads = sigs.iter().map(|(r, _)| *r).collect::>(); - let writes = sigs.iter().map(|(_, w)| *w).collect::>(); - let memo = create_memo(move |_| { - reads.iter().map(|r| r.get()).sum::() - }); - assert_eq!(memo(), 499500); - create_isomorphic_effect({ - let acc = Rc::clone(&acc); - move |_| { - acc.set(memo()); - } - }); - assert_eq!(acc.get(), 499500); - - writes[1].update(|n| *n += 1); - writes[10].update(|n| *n += 1); - writes[100].update(|n| *n += 1); - - assert_eq!(acc.get(), 499503); - assert_eq!(memo(), 499503); - }) - .dispose() - }); - - runtime.dispose(); -} - -#[bench] -fn leptos_scope_creation_and_disposal(b: &mut Bencher) { - use leptos::*; - let runtime = create_runtime(); - b.iter(|| { let acc = Rc::new(Cell::new(0)); - let disposers = (0..1000) - .map(|_| { - create_scope(runtime, { - let acc = Rc::clone(&acc); - move || { - let (r, w) = create_signal(0); - create_isomorphic_effect({ - move |_| { - acc.set(r()); - } - }); - w.update(|n| *n += 1); - } - }) - }) - .collect::>(); - for disposer in disposers { - disposer.dispose(); - } - }); - - runtime.dispose(); -} - -#[bench] -fn rs_deep_update(b: &mut Bencher) { - use reactive_signals::{ - runtimes::ClientRuntime, signal, types::Func, Scope, Signal, - }; - - let sc = ClientRuntime::new_root_scope(); - b.iter(|| { - let signal = signal!(sc, 0); - let mut memos = Vec::, ClientRuntime>>::new(); - for i in 0..1000usize { - let prev = memos.get(i.saturating_sub(1)).copied(); - if let Some(prev) = prev { - memos.push(signal!(sc, move || prev.get() + 1)) - } else { - memos.push(signal!(sc, move || signal.get() + 1)) - } - } - signal.set(1); - assert_eq!(memos[999].get(), 1001); - }); -} - -#[bench] -fn rs_fanning_out(b: &mut Bencher) { - use reactive_signals::{ - runtimes::ClientRuntime, signal, types::Func, Scope, Signal, - }; - let cx = ClientRuntime::new_root_scope(); - - b.iter(|| { - let sig = signal!(cx, 0); - let memos = (0..1000) - .map(|_| signal!(cx, move || sig.get())) - .collect::>(); - assert_eq!(memos.iter().map(|m| m.get()).sum::(), 0); - sig.set(1); - assert_eq!(memos.iter().map(|m| m.get()).sum::(), 1000); - }); -} - -#[bench] -fn rs_narrowing_update(b: &mut Bencher) { - use reactive_signals::{ - runtimes::ClientRuntime, signal, types::Func, Scope, Signal, - }; - let cx = ClientRuntime::new_root_scope(); - - b.iter(|| { - let acc = Rc::new(Cell::new(0)); - let sigs = (0..1000).map(|n| signal!(cx, n)).collect::>(); - let memo = signal!(cx, { - let sigs = sigs.clone(); - move || sigs.iter().map(|r| r.get()).sum::() - }); - assert_eq!(memo.get(), 499500); - signal!(cx, { + let sigs = (0..1000).map(|n| create_signal(n)).collect::>(); + let reads = sigs.iter().map(|(r, _)| *r).collect::>(); + let writes = sigs.iter().map(|(_, w)| *w).collect::>(); + let memo = + create_memo(move |_| reads.iter().map(|r| r.get()).sum::()); + assert_eq!(memo(), 499500); + create_isomorphic_effect({ let acc = Rc::clone(&acc); - move || { - acc.set(memo.get()); + move |_| { + acc.set(memo()); } }); - assert_eq!(acc.get(), 499500); - sigs[1].update(|n| *n += 1); - sigs[10].update(|n| *n += 1); - sigs[100].update(|n| *n += 1); + writes[1].update(|n| *n += 1); + writes[10].update(|n| *n += 1); + writes[100].update(|n| *n += 1); assert_eq!(acc.get(), 499503); - assert_eq!(memo.get(), 499503); + assert_eq!(memo(), 499503); }); + + runtime.dispose(); } #[bench] -fn l021_deep_creation(b: &mut Bencher) { - use l021::*; +fn l0410_deep_creation(b: &mut Bencher) { + use l0410::*; let runtime = create_runtime(); b.iter(|| { @@ -257,8 +135,8 @@ fn l021_deep_creation(b: &mut Bencher) { } #[bench] -fn l021_deep_update(b: &mut Bencher) { - use l021::*; +fn l0410_deep_update(b: &mut Bencher) { + use l0410::*; let runtime = create_runtime(); b.iter(|| { @@ -282,8 +160,8 @@ fn l021_deep_update(b: &mut Bencher) { } #[bench] -fn l021_narrowing_down(b: &mut Bencher) { - use l021::*; +fn l0410_narrowing_down(b: &mut Bencher) { + use l0410::*; let runtime = create_runtime(); b.iter(|| { @@ -305,8 +183,8 @@ fn l021_narrowing_down(b: &mut Bencher) { } #[bench] -fn l021_fanning_out(b: &mut Bencher) { - use leptos::*; +fn l0410_fanning_out(b: &mut Bencher) { + use l0410::*; let runtime = create_runtime(); b.iter(|| { @@ -325,8 +203,8 @@ fn l021_fanning_out(b: &mut Bencher) { runtime.dispose(); } #[bench] -fn l021_narrowing_update(b: &mut Bencher) { - use l021::*; +fn l0410_narrowing_update(b: &mut Bencher) { + use l0410::*; let runtime = create_runtime(); b.iter(|| { @@ -339,11 +217,11 @@ fn l021_narrowing_update(b: &mut Bencher) { let memo = create_memo(cx, move |_| { reads.iter().map(|r| r.get()).sum::() }); - assert_eq!(memo(), 499500); + assert_eq!(memo.get(), 499500); create_isomorphic_effect(cx, { let acc = Rc::clone(&acc); move |_| { - acc.set(memo()); + acc.set(memo.get()); } }); assert_eq!(acc.get(), 499500); @@ -353,7 +231,7 @@ fn l021_narrowing_update(b: &mut Bencher) { writes[100].update(|n| *n += 1); assert_eq!(acc.get(), 499503); - assert_eq!(memo(), 499503); + assert_eq!(memo.get(), 499503); }) .dispose() }); @@ -362,8 +240,8 @@ fn l021_narrowing_update(b: &mut Bencher) { } #[bench] -fn l021_scope_creation_and_disposal(b: &mut Bencher) { - use l021::*; +fn l0410_scope_creation_and_disposal(b: &mut Bencher) { + use l0410::*; let runtime = create_runtime(); b.iter(|| { @@ -376,7 +254,7 @@ fn l021_scope_creation_and_disposal(b: &mut Bencher) { let (r, w) = create_signal(cx, 0); create_isomorphic_effect(cx, { move |_| { - acc.set(r()); + acc.set(r.get()); } }); w.update(|n| *n += 1); diff --git a/benchmarks/src/ssr.rs b/benchmarks/src/ssr.rs index a652b1b94..7fe755569 100644 --- a/benchmarks/src/ssr.rs +++ b/benchmarks/src/ssr.rs @@ -2,15 +2,14 @@ use test::Bencher; #[bench] fn leptos_ssr_bench(b: &mut Bencher) { + use leptos::*; + let r = create_runtime(); b.iter(|| { - use leptos::*; - leptos_dom::HydrationCtx::reset_id(); - _ = create_scope(create_runtime(), |cx| { + leptos::leptos_dom::HydrationCtx::reset_id(); #[component] fn Counter(initial: i32) -> impl IntoView { - let (value, set_value) = create_signal(cx, initial); + let (value, set_value) = create_signal(initial); view! { - cx,
"Value: " {move || value().to_string()} "!" @@ -20,7 +19,6 @@ fn leptos_ssr_bench(b: &mut Bencher) { } let rendered = view! { - cx,

"Welcome to our benchmark page."

"Here's some introductory text."

@@ -28,14 +26,14 @@ fn leptos_ssr_bench(b: &mut Bencher) {
- }.into_view(cx).render_to_string(cx); + }.into_view().render_to_string(); assert_eq!( rendered, - "

Welcome to our benchmark page.

Here's some introductory text.

Value: 1!
Value: 2!
Value: 3!
" + "

Welcome to our benchmark page.

Here's some introductory text.

Value: 1!
Value: 2!
Value: 3!
" ); - }); }); + r.dispose(); } #[bench] diff --git a/benchmarks/src/todomvc/mod.rs b/benchmarks/src/todomvc/mod.rs index 608f9a88b..428138159 100644 --- a/benchmarks/src/todomvc/mod.rs +++ b/benchmarks/src/todomvc/mod.rs @@ -60,10 +60,9 @@ fn leptos_todomvc_ssr_with_1000(b: &mut Bencher) { use self::leptos::*; use ::leptos::*; - let html = ::leptos::ssr::render_to_string(|cx| { + let html = ::leptos::ssr::render_to_string(|| { view! { - cx, - + } }); assert!(html.len() > 1);