Rust in Everything
基于 topcoat-core 0.10.0

上下文

page、layout、组件、layer、shard、procedure 拿到的都是同一个东西:&Cx。它在 topcoat-core 里,是整个框架共享状态的唯一通道,没有 axum 那样的提取器。这一部分只有一章:

  1. Cx、AppContext 与 memoize:Cx 的两层 Arc、with / with_many 怎么派生子作用域、取不到值时的 panic 原文;#[memoize] 展开成什么,缓存键是闭包类型加参数的 128 位哈希,三个组件并发调用只查一次库(实测 108 毫秒),按 BindingId 跟踪依赖,同参数递归直接 panic;Error 为什么是 Arc,0.10.0 里 memoize(as_ref) 的结果不能直接 ?;「函数,而不是中间件」的写法与代价。
flowchart TB
  router["02 router:handle_inner 为每个请求新建 Cx"] --> cx["Cx:AppContext + RequestContext + Identity"]
  cx --> memo["#[memoize]:请求级缓存"]
  memo --> auth["current_user、require_auth:函数,而不是中间件"]
  cx --> view["04 view:组件拿到派生的 Cx"]

💬 关联讨论

发起讨论
加载中...