Skip to content

QMReader v1.0.12 — Reliable article delivery

Choose a tag to compare

@joeseesun joeseesun released this 28 Oct 08:08
382daae

中文

修复 / 新增

  • 先返回正文,再同步已读、阅读计数和附属面板,避免数据库写锁等待拖住本次正文响应;切换文章后不再发送过时的附属请求。
  • 修复已有中文内容仍长期停在加载的读取链路。文章深链 HTML 直接携带当前读者可见的原文与中文,正文显示不再等待列表、账户同步或独立改写请求。
  • 详情 API 一次返回原文、中文改写与状态;列表打开复用预取,避免重复读取。保留指定贡献版本、权限、失败重试和有界等待行为。
  • 文章 HTML / 登录详情 private, no-store;内嵌数据消费一次,已读正文在当前账户内存保留 30 秒/最多 24 篇,切换账户或修改/删除时失效,不写持久缓存。
  • 登录读取不再每 6 秒中断并重启同一下载,保留完整的 12 秒总时限;匿名主备线路切换仍然有界。
  • 保持后台预生成策略,不在 GET 中调用 AI。
  • 修复无 key 键盘事件导致的工作台脚本异常。

验证

  • 180 项自动测试、8 项网络恢复测试和 3 项 Python 部署/可靠性检查通过;GitHub 分支与 PR 两轮检查成功。
  • 登录状态故障注入:列表等 API 全部 503 时,用户反馈文章仍显示中文,额外详情/改写请求为 0;独立改写 API 503 时,列表打开只用 1 次详情请求。
  • 覆盖脚本注入转义、删除文章不可访问、登录态不可共享缓存、无会话凭据嵌入和精确贡献隔离。

未验证

  • 不能据此推断所有用户代理或 TUN 配置都已稳定;本版本减少阅读对后续网络请求的依赖。
  • 原有采集健康降级不在本次修改范围,没有为验收新增付费 AI 生成。

升级

  • 主站已部署本版本;已打开的旧页面刷新即可使用新版。
  • 自部署从附件源码包安装,保留 data、配置与密钥;使用仓库部署脚本可备份及回滚。

线上证据与限制

  • 运行版本 1.0.12 / 382daae322915ae9a9f86d4de5fe734de7b58c42,99 个运行文件摘要全部一致,生产依赖审计 0 漏洞。
  • 问题文章的 HTML、详情和 API v1 均返回完整 5365 字符中文正文及 ready 状态。匿名请求采样:HTML 1.773 秒、详情 1.306 秒、API v1 1.490 秒;这些是采样结果,不是延迟保证。
  • 用户原 Chrome 管理员账号从首页进入 Next Token,再首次打开 #7,已显示完整中文(渲染纯文本 4058 字符),加载占位隐藏,截图留证。
  • VPS 资源压力仍存在:2 vCPU、负载约 11–15,2 秒采样约 70% CPU steal,曾观察到数据库锁竞争和本机 HTTP 超时。应用修复不等于消除了宿主机资源争抢。本机访问 Cloudflare 备用入口也出现 TLS 握手超时,未认证所有代理/TUN 配置。
  • 回滚备份 /opt/qiaomu-backups/qmreader-web-20261028-080348-382daae32291。

English

Fixes / additions

  • Return the article body before sending view/read writes and supplementary panel requests, so synchronous writer waits cannot block that article-open response.
  • Deliver existing original and Chinese text with the viewer-scoped article HTML. Article reading no longer waits for catalog, account synchronization, or another rewrite request.
  • Bundle original, rewrite, and reading status in the detail API; consume prefetched responses and avoid duplicate reads. Preserve exact contribution selection and bounded error recovery.
  • Keep the full deadline for authenticated downloads, instead of cancelling and restarting a healthy slow read halfway.
  • Reuse delivered bodies for 30 seconds in bounded, account-scoped memory; clear on account changes, edits, or deletion. No persistent storage. Article HTML and authenticated detail responses remain private/no-store. GET requests do not generate AI content.
  • Guard the workbench keyboard handler against events without a key.

Validation

180 tests, 8 network recovery cases, and 3 Python deployment/reliability checks passed, together with both GitHub checks. Authenticated browser fault injection confirmed readable Chinese content while supplementary APIs fail.

Not verified

All client proxy/TUN configurations are not covered. Existing collection health degradation is outside this fix; no additional paid AI generation was triggered.

Upgrade

The hosted site runs this release; refresh an existing tab. Self-hosters should preserve data/config/secrets and use the deployment script for backup and rollback.

Commit: 382daae322915ae9a9f86d4de5fe734de7b58c42
Archive SHA-256: eabe1b5ab0b218e22d41d66d67ffea73c6c328104810ed24bebd5132f686c39b