ReboFiles文档
开始3
什么是 ReboFiles
快速开始
可运行的演示
集成到你的应用6
React 组件
Headless:你自己的界面
不使用框架
样式与主题
键盘与无障碍
语言
文件9
上传
预览与查看器
搜索
实时更改与大文件夹
评论
星标与字段
版本、回收站与空间
打包下载 .zip
Word 文档
服务器14
路由
框架与登录
谁可以做什么
存储:S3、GCS、Azure 与磁盘
检查上传
元数据:SQLite 与 Postgres
数据库结构
共享与链接
动态与通知
钩子、日志与限制
保留、法律保留与导出
桌面端与其他来源
同步文件夹
上线生产环境
协作1
AI 助手(MCP)
参考5
包
组件与 hooks
客户端 API
HTTP 路由
状态与路线图
↑↓ 移动↵ 打开Esc 关闭38 个页面

文件 实时更改与大文件夹

实时更改与大文件夹

两个人打开同一个文件夹,片刻之内就能看到对方的更改:新建的文件夹,重命名、移动或移入回收站的文件。上千个文件的文件夹,滚动起来与十个文件一样流畅。
事件

实时

页面监听 GET /events,这是一个 server-sent events 流,用 fetch 读取,因此会带上你的 headers。每次更改只按每个人可见的范围告知:发生更改且其可列出的文件夹,以及其可读取的条目。不会发送名称;页面照常请求要显示的内容。

<FileDrive>、mountDrive 以及 DriveProvider 下的每个 hook 会在更改后四分之一秒重新请求,同时到达的多次更改只请求一次。断开后会重新连接,每次间隔稍长。live={false} 可关闭此功能。

自定义界面
const stop = client.watch((event) => {
  // { by: 'bea', at: '…', folders: ['<id>'], entries: ['<id>'] }
  if (event.folders.includes(current)) reload();
});
服务器

多个进程

本进程的更改会立即告知。同一存储上其他进程的更改通过存储的修订号发现(SQLite 和 Postgres 都有),有人监听时每两秒检查一次(live: { poll })。没有修订号的存储只告知本进程的更改。

生产

在代理之后

  • 每 25 秒发送一行空内容,避免代理因长时间无数据而关闭连接。请让请求可以持续更久:nginx 中设置 proxy_read_timeout 1h。
  • 响应带有 x-accel-buffering: no 和 cache-control: no-transform,以免 nginx 和压缩缓冲它。
  • 在几秒后就会结束请求的平台上(serverless 函数),页面断开后会重新连接,期间的更改在下次连接时看到。也可以用 live: false 关闭。
性能

大文件夹

从 200 个条目起,列表和网格只在页面中放入可见部分及其周围几行,其余部分的高度在上下保留,因此滚动条的长度与全部内容一致。行高在显示时测量,网格的列数随宽度变化。

键盘仍可遍历全部条目:方向键、Home 或 End 会先把目标滚动到可见位置,因为屏幕阅读器需要被告知当前项。每一项都说明自己在全部中的位置(aria-posinset、aria-setsize)。Ctrl+A 会选中全部,而不只是页面中的那些;图片地址只为显示的条目请求。