From 67248476855d46013304c62a9092d58cf055666c Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 19 Feb 2024 08:03:29 -0600 Subject: [PATCH] swap out web-time for chrono --- Cargo.lock | 2 +- packages/ssr/Cargo.toml | 4 ++-- packages/ssr/src/incremental.rs | 31 ++++++++++++++++--------------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 61c930a61..52dfefe69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2902,6 +2902,7 @@ dependencies = [ "argh", "askama_escape", "async-trait", + "chrono", "dioxus", "dioxus-core", "dioxus-html", @@ -2917,7 +2918,6 @@ dependencies = [ "thiserror", "tokio", "tracing", - "web-time", ] [[package]] diff --git a/packages/ssr/Cargo.toml b/packages/ssr/Cargo.toml index 62da951d5..107d42284 100644 --- a/packages/ssr/Cargo.toml +++ b/packages/ssr/Cargo.toml @@ -20,7 +20,7 @@ tracing = { workspace = true } http = "0.2.9" async-trait = "0.1.58" serde_json = { version = "1.0" } -web-time = "1.0.0" +chrono = { verison = "0.4.34", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] tokio = { version = "1.28", features = ["io-util"], optional = true } @@ -41,4 +41,4 @@ dioxus-signals = { workspace = true } [features] default = [] -incremental = ["dep:tokio"] +incremental = ["dep:tokio", "chrono"] diff --git a/packages/ssr/src/incremental.rs b/packages/ssr/src/incremental.rs index 2e81bb3a2..1ed16db5f 100644 --- a/packages/ssr/src/incremental.rs +++ b/packages/ssr/src/incremental.rs @@ -3,6 +3,8 @@ #![allow(non_snake_case)] use crate::fs_cache::ValidCachedPath; +use chrono::offset::Utc; +use chrono::DateTime; use dioxus_core::VirtualDom; use rustc_hash::FxHasher; use std::{ @@ -23,9 +25,8 @@ pub use crate::incremental_cfg::*; pub struct IncrementalRenderer { pub(crate) static_dir: PathBuf, #[allow(clippy::type_complexity)] - pub(crate) memory_cache: Option< - lru::LruCache), BuildHasherDefault>, - >, + pub(crate) memory_cache: + Option, Vec), BuildHasherDefault>>, pub(crate) invalidate_after: Option, pub(crate) ssr_renderer: crate::Renderer, pub(crate) map_path: PathMapFn, @@ -117,7 +118,7 @@ impl IncrementalRenderer { fn add_to_memory_cache(&mut self, route: String, html: Vec) { if let Some(cache) = self.memory_cache.as_mut() { - cache.put(route, (web_time::SystemTime::now(), html)); + cache.put(route, (Utc::now(), html)); } } @@ -138,20 +139,20 @@ impl IncrementalRenderer { .as_mut() .and_then(|cache| cache.get(&route)) { - if let Ok(elapsed) = timestamp.elapsed() { - let age = elapsed.as_secs(); - if let Some(invalidate_after) = self.invalidate_after { - if elapsed < invalidate_after { - tracing::trace!("memory cache hit {:?}", route); - output.write_all(cache_hit).await?; - let max_age = invalidate_after.as_secs(); - return Ok(Some(RenderFreshness::new(age, max_age))); - } - } else { + let now = Utc::now(); + let elapsed = timestamp.signed_duration_since(now); + let age = elapsed.num_seconds(); + if let Some(invalidate_after) = self.invalidate_after { + if elapsed.to_std().unwrap() < invalidate_after { tracing::trace!("memory cache hit {:?}", route); output.write_all(cache_hit).await?; - return Ok(Some(RenderFreshness::new_age(age))); + let max_age = invalidate_after.as_secs(); + return Ok(Some(RenderFreshness::new(age as u64, max_age))); } + } else { + tracing::trace!("memory cache hit {:?}", route); + output.write_all(cache_hit).await?; + return Ok(Some(RenderFreshness::new_age(age as u64))); } } // check the file cache