Flarum 发布 1.8.15 🎉
针对 Flarum 1.x 系列,这是一个体积小巧但重点明确的维护版本:包含一项新功能、若干错误修复,以及一项效果显著的性能提升。
🚀 Flarum 2.0 RC 1 将于本月到来
如果你还没开始体验 Flarum 2.0,现在真的该动手了。
Flarum 2.0 的第一个 RC 版本(候选发布版)将在 4 月 20 日 上线。目前我们已经进入 RC 周期,2.0 的 API 已经冻结 —— 这意味着在正式版发布前,只接受关键问题的修复。生态圈也在快速跟进:越来越多第三方扩展已宣布兼容 2.0,官方自带的扩展也全部完成了适配。
需要说明的是,1.x 系列的大部分开发工作已经停止。本次更新属于一个“例外”——只把一些已经在 2.x 中修复的内容反向移植回来。后续计划如下:
- ❌ 不再为 1.x 增加新功能或非安全类的改进
- ⚠️ 安全漏洞会尽力修复,但受限于老旧的底层依赖(Laravel 8,早已结束官方支持),部分问题可能无法根治
- ✅ 所有长期投入都集中在 Flarum 2.0 上
1.x 的具体停止支持日期(EOL)将很快公布 —— 我们强烈建议所有仍在使用 1.x 的站长们现在就开始规划升级。
📣 如果你是一名扩展开发者,现在正是发布 2.0 兼容版的最佳时机。API 已经稳定,正式版近在眼前。
✨ 新功能:后台新增“公告”小部件
现在进入管理后台,你会看到一个实时拉取 discuss.flarum.org 公告的小部件。它会从服务端获取内容并缓存下来,让你无需离开后台就能及时了解 Flarum 的最新动态。
- 服务端缓存有效期为 14 天,同时提供了手动刷新按钮
- 小部件支持隐藏(状态保存在浏览器的 localStorage 中),也可以在
config.php 中设置 'flarum_announcements.disabled' => true 来彻底关闭
- 系统会通过一个每周执行一次的定时任务自动保持缓存更新
#4472
⚡ 性能优化:大型论坛通知计数大幅提速
在一些数据量较大的论坛中,未读/新通知的计数查询曾经慢得离谱。原因是当某个用户在 notifications 表里拥有大量通知时,MySQL 会放弃 user_id 这个单列索引,转而执行全表扫描 —— 极端情况下,每次页面加载要扫描接近 100 万行数据。
为此我们增加了一个组合索引 (user_id, is_deleted, read_at, type)。现在 MySQL 可以直接通过索引完成整个计数查询,不再需要读取任何实际的数据行。
优化前后对比(测试环境:100 万行记录,目标用户有 20 万条通知,其中 500 条未读):
| 优化前 | 优化后 |
| 查询耗时 | 86ms | 3ms |
| 提升幅度 | — | 快了 96% |
⚠️ 特别说明: 本次优化在 MySQL 8.0+ 以及较新版本的 MariaDB 上效果最好。如果你还在用 MySQL 5.6/5.7 或老版本的 MariaDB,查询优化器不会对可见性子查询做物化处理,瓶颈在其他地方,这个索引也帮不上忙。当然,加索引本身没有坏处,但如果你正好遇到这个问题,升级数据库版本才是治本之策。
#4507
🐛 问题修复
[Tags 扩展] bypassTagCounts 权限对非管理员用户无效
原来有一个“全捕获”(catch-all)逻辑会拦截所有讨论相关的权限检查,并试图去寻找形如 tag6.discussion.bypassTagCounts 这种带标签后缀的权限变体,而这些变体根本不存在。结果就是,只要讨论位于受限标签内,bypassTagCounts 就一定会拒绝非管理员用户。本次修复让这个能力直接绕过全捕获逻辑,改由正常的全局权限检查来处理。(#4538)
执行 composer update 后扩展的启动顺序没有更新
当某个扩展在更新中新增或修改了 optional-dependencies(可选依赖)时,存储的启动顺序不会自动重新计算,除非你手动禁用再重新启用该扩展。现在 migrate 命令会在每次执行时重新排序扩展的启动顺序。(#4512)
Alert 组件缺少 content 属性的类型定义
这是一个 TypeScript 的类型定义问题,可能会影响使用该组件的扩展。(#4496)
📦 本次发布的版本
flarum/core — 1.8.15
flarum/tags — 1.8.7
🚀 升级方法
composer update
php flarum migrate
php flarum cache:clear
php flarum assets:publish
更新前请备份数据库,如果可能的话先在预演环境测试。
📋 完整更新日志
Core (flarum/core)
新增
修复
性能
- 在 notifications 表上添加复合索引以修复慢速的未读计数查询,作者 @IanM #4507
Tags (flarum/tags)
修复
- 从
DiscussionPolicy 的全捕获逻辑中排除 bypassTagCounts 权限,作者 @IanM #4538