Skip to content

bug: [后端] RenderPostHTML 对含表情包帖子逐实体执行 ResolveURLs 查询,形成 N+1 #706

Description

@HalfAnElephant

问题概述

rendered_html.go 的 RenderPostHTML 对每个实体调用一次,而该块在每次调用时都执行一次 stickerservice.ResolveURLs DB 查询。由于 ensureRenderedHTML 对任何包含 [:sticker: 的帖子都会绕过版本缓存,一个含 K 个表情包帖子的主题页现在每次请求产生 K 次额外 DB 查询(此前的缓存 HTML 服务不存在该 N+1 模式)。

影响

  • 主题页/帖子流渲染性能退化:每个含表情包的帖子 = 1 次额外查询。
  • 含表情包的热门主题页在每次请求时都触发,缓存被绕过,放大 DB 压力。

证据

预期行为

含表情包的帖子也应从缓存服务(或每请求级批处理解析),避免逐实体 N+1 查询。

实际行为

每个含表情包的帖子每次渲染都执行一次独立的 ResolveURLs DB 查询。

建议修复

  • 按请求记忆化 name→URL 查找(一次解析整页),或
  • 批量解析一次再分发到各实体渲染

来源:OCR review session b0a6067d(HEAD~30..HEAD)medium 级发现。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions