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§
- Feed
Document 🔒 - 一种格式的成品:正文、各启用算法的压缩结果与 ETag。
- Rendered
Feed - 渲染好的两份 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)。