新增: 消息分页懒加载与事件总线空转优化
后端基础设施两项改进: 一、历史消息分页懒加载(治长对话渲染卡顿) - 消息仓库新增分页查询方法(从尾部取最近 N 条,支持游标) - 切换对话时后端保留全量消息供模型上下文用,但只返回最近 50 条给前端渲染,附带是否有更多历史和游标位置 - 新增加载更多消息的接口,前端滚顶时按游标分页拉取 二、事件总线空转优化(消除无消费者时的序列化开销) - 发布事件前先检查订阅者数量,无订阅者直接跳过序列化 - 当前隧道订阅方未接入,20 余个发射点双写不再空转浪费 同时核验确认对话上下文透明化三项均已落地(目标可见/ 项目增强预览/完整上下文面板),关闭对应待办。
This commit is contained in:
@@ -164,8 +164,16 @@ impl EventBus {
|
||||
/// 序列化为 Value 后调 [`publish`](Self::publish)。供 emit 点双写(publish + app.emit),
|
||||
/// 经 EventBus 透传给 tunnel subscriber(阶段2 接入)。
|
||||
///
|
||||
/// 序列化失败兜底返 0(丢弃,对齐 publish 静默丢弃语义;AiChatEvent 序列化稳定不触发,防御性)。
|
||||
/// 性能优化(治空转):无订阅者时跳过序列化直接返 0。当前 tunnel subscriber 尚未接入,
|
||||
/// 20+ emit 点双写调本方法但无消费者,跳过序列化消除热路径开销。接入消费者后自动生效。
|
||||
///
|
||||
/// 序列化失败兑底返 0(丢弃,对齐 publish 静默丢弃语义;AiChatEvent 序列化稳定不触发,防御性)。
|
||||
pub fn publish_event(&self, event: AiChatEvent) -> usize {
|
||||
// 无订阅者时跳过序列化(治空转开销)。broadcast::receiver_count 是同步原子读,代价极低。
|
||||
// 有订阅者后才做 serde_json::to_value 序列化 + send。
|
||||
if self.sender.receiver_count() == 0 {
|
||||
return 0;
|
||||
}
|
||||
match serde_json::to_value(&event) {
|
||||
Ok(v) => self.publish(v),
|
||||
Err(_) => 0,
|
||||
|
||||
Reference in New Issue
Block a user