知识合集

哈喽,我是颜sir,询盘自由网背后的人。做网络营销快6年,运气不错,实现了财务自由,目前全职在家钻研更多赚钱方法。在钻研过程中,我发现网上几乎找不到优质的中文资源。我深知新手入门需经历痛苦挣扎,所以创建了询盘自由网,把我知道的分享给你。

Effect 的 HTTP 路由怎么接到 Cloudflare Workers?

HttpRouter.toWebHandler 产出 Request 到 Promise<Response> 的函数,正好对上 Workers 的 fetch 入口。重点是把 env bindings 先包成 service,并在模块作用域构建一次。

Effect v4 里同一个 Layer 会被构建几次?

嵌套的 Effect.provide 会复用外层已构建的 Layer,兄弟 provide 却各自构建。用一个计数器 Layer 数出组合、嵌套、兄弟三种形态各构建几次。

为什么 Effect 应用只该 provide 一次 Layer?

嵌套的 Effect.provide 会自动复用 Layer,但兄弟 provide 不会。讲清为什么仍要先组合依赖图、入口只 provide 一次,以及怎么用计数器 Layer 写回归测试。

Effect 的 LayerMap、RcMap、Pool 该怎么选?

Effect 4.0.5 里有五个名字相近的资源 API。按「有没有 key、要不要共享、会不会过期」三个问题,几句话就能选对,同时标明哪几个是 unstable。

Effect 的 Pool 怎么复用连接并限制并发?

Pool 把同类资源(数据库连接、worker)攒成一批复用并限制并发。这篇讲 make 与 makeWithTTL 的区别、借用方式,以及 invalidate 的严格相等陷阱。

Effect 里会过期的资源怎么刷新?

token、远程配置这类会过期的单个资源,Effect 用 Resource 缓存一个 Effect 的结果,用 LayerRef 缓存整个 Layer 的 Context。这篇讲两者的刷新方式和选择。

Effect 的 LayerMap 怎么做多租户 Layer 缓存?

LayerMap 把「key 到资源」换成「key 到 Layer」,业务代码只写 yield* TenantDb,租户在边界处选择。这篇讲它的写法、缓存行为,以及不设 idleTimeToLive 时每次都重建的坑。

Effect 的 Layer 怎么在退出时关闭连接池?

在 Layer 构造体里用 Effect.addFinalizer 登记清理动作,Layer 被释放时执行,并保证反序释放、失败时回收。这篇讲清登记位置、顺序与长期运行的写法。

Effect 里怎么控制 span 的成本?

span 有成本,而大部分流量没有排查价值。这篇讲四个工具:整段关掉 span、用最低级别不导出细粒度 span、排除健康检查请求、循环里一批只开一个 span。

Effect 里怎么记录指标?

用 Metric.counter、Metric.gauge、Metric.histogram 定义指标,用 Metric.update 更新。讲清三种形态各记什么,以及标签基数为什么要控制。

Effect 怎么把日志和 span 导出到 OTLP?

用 effect/observability 里的 OtlpTracer 和 OtlpLogger 组成一个 Layer,提供序列化和 HTTP 客户端两个依赖,合并进主 Layer 即可导出。

Effect 里怎么给函数加 span?

用 Effect.withSpan 包一段 Effect,或用 Effect.fn 定义自带 span 的函数。讲清 span 名字为什么要稳定、变化的值放哪、span 该打在哪些边界上。

Effect Optic 怎么深层读写不可变数据?

用 Effect v4 的 Optic 模块替代层层展开运算符:Iso、Lens、Prism、Traversal 的层级,读、写、改、批量改的写法,以及什么时候不该用它。

Effect Optic 的 check 在写回时会校验吗?

不会。check 只在读侧过滤,写回时原样透传。这篇讲怎么用写后复核、makeOptional 自定义 setter 或 Schema.toIso 真正拦住非法写入。

Schema.Struct 上的 verifyRoundTrip 为什么失败?

在 effect 4.0.5 上,对 Schema.Struct 调 TestSchema 的 verifyRoundTrip 会失败,即使 Schema 完全正常。这篇讲两个原因,以及用 checkEffect 加 toEquivalence 的绕法。