Skip to main content

Module feed

Module feed 

Source
Expand description

RSS 2.0 与 JSON Feed 1.1 订阅端点(server-only)。 RSS 2.0 与 JSON Feed 1.1 订阅端点。

提供两个公开读端点,挂载在 feed_routes 上(只套压缩层):

  • GET /feed.xml — RSS 2.0(application/rss+xml)
  • GET /feed.json — JSON Feed 1.1(application/feed+json)

输出最近 FEED_ITEM_LIMIT 篇已发布文章(含保存时已渲染的全文 content_html,去掉深色图表与 代码高亮标记)。20 篇全文有数 MB,渲染加压缩要两百多毫秒,所以缓存的是成品:两种格式的正文 连同各启用算法的压缩结果(CacheKey::Feed,TTL 600s,文章写路径统一失效),命中时按 Accept-Encoding 直接返回,并支持 If-None-Match。 渲染函数均为纯函数并接受 now/base 参数注入,便于单元测试固定输出。

仅在 server feature 启用时编译。

Structs§

FeedDocument 🔒
一种格式的成品:正文、各启用算法的压缩结果与 ETag。
RenderedFeed
渲染好的两份 Feed 文档,整体放进 CacheKey::Feed。

Constants§

CHANNEL_DESCRIPTION 🔒
Feed channel 描述。与首页 HomeInfo 副标题保持一致。
CHANNEL_TITLE 🔒
Feed channel 标题。站点无标题配置,与首页 HomeInfo 硬编码保持一致。
FEED_CACHE_CONTROL 🔒
Feed 响应缓存头,与缓存层 TTL(600s)对齐。
FEED_ITEM_LIMIT 🔒
Feed 输出文章条数上限。
FEED_LANGUAGE 🔒
Feed 语言。
JSON_CONTENT_TYPE 🔒
JSON Feed Content-Type。
RSS_CONTENT_TYPE 🔒
RSS Content-Type(标准注册类型,带 charset 便于阅读器正确解码中文)。

Statics§

BUILD_LOCK 🔒
同一时刻只重建一份成品:缓存失效后并发到达的请求排队等第一个建完。

Functions§

build_feed 🔒
渲染并压缩两种格式。lastBuildDate 取最近一篇的更新时间而不是当前时间:内容没变时 重建出的正文与 ETag 也不变,阅读器的条件请求能拿到 304。
json_feed
GET /feed.json — JSON Feed 1.1 订阅源。
load_feed 🔒
取 Feed 成品:缓存命中直接返回,未命中则查库、在阻塞线程池渲染压缩并回填缓存。
render_json 🔒
渲染 JSON Feed 1.1 文档(serde_json 直接序列化,零新依赖)。
render_rss 🔒
渲染 RSS 2.0 文档。now 注入以便测试固定 lastBuildDate。
row_to_feed_item 🔒
将数据库行转换为 Feed 条目。
rss_feed
GET /feed.xml — RSS 2.0 订阅源。
serve 🔒
site_base_url 🔒
推导站点绝对 URL 基址(无尾部斜杠)。
strip_code_highlight 🔒
删掉 <pre> 里的 <span …> / </span>,只留代码文本。高亮靠站点的 highlight.css 着色, 阅读器里这些标记不起作用,却占了 Feed 约三成体积(单个代码块可达数百 KB)。