讲师中心 微信公众号
AI工具推荐 视频效率加速

保持用户的同步:与凸的实时协作

陌婷君_2019

陌婷君_2019

发布时间:2025-02-10 08:02:13

|

898人浏览过

|

来源于php中文网

原创

我的创业公司stick,一款实时协作白板应用,灵感源于线下协作的便捷性。stick的开发过程既富有挑战性,也令人兴奋。在完成项目后,我积累了大量经验,涵盖用户同步、高效数据处理以及系统稳定性保障等方面。

保持用户的同步:与凸的实时协作

实时协作的必要性

实时协作对现代工作流程至关重要,无论是头脑风暴、文档编辑还是代码调试,即时反馈都能保持团队活力,实现高效沟通。Google Docs或Figma等应用已成功实现了这一点,而我致力于将这种便捷性引入创意头脑风暴领域。

实时协作的挑战

实时协作的挑战不仅在于数据同步,更在于打造流畅且引人入胜的用户体验。我利用Supabase解决了以下几个关键问题:

数据同步与乐观更新

实时同步数据是协作应用的常见难题。在Stick中,每个用户的更改都需要在所有活跃会话中立即反映。传统方法需要轮询和WebSocket,构建复杂的系统,并涉及大量的自定义逻辑和后端配置。

Supabase的解决方案:Supabase通过其原生实时数据同步机制简化了这一过程。useQuery hook能够轻松获取和同步数据(例如Stick的笔记),配置简便。Supabase处理WebSocket连接的复杂性,确保所有客户端自动保持同步,从而使开发者能够专注于功能开发,而非底层连接管理。

乐观更新:为了提升用户体验,即使在服务器保存后端更改之前,我也立即反映UI变化。

乐观更新的优势:乐观更新解决了网络延迟导致的UI延迟问题。当用户创建新笔记时,即使突变仍在处理中,更改也会立即显示在白板上。如果突变失败,则会回滚更改,确保数据一致性,同时保持流畅的用户体验。

<code class="javascript">const createNote = useMutation(api.notes.createNote).withOptimisticUpdate(
  (localStore, args) => {
    const existingNotes = localStore.getQuery(api.notes.getNotes, { boardId: actualBoardId }) || [];
    const tempId = `temp_${Date.now()}` as Id;
    const now = Date.now();
    localStore.setQuery(api.notes.getNotes, { boardId: actualBoardId }, [
      ...existingNotes,
      { _id: tempId, _creationTime: now, ...args },
    ]);
  }
);</code>

新注释会立即显示在白板上,用户可以继续协作,无需等待服务器响应。只有当突变结果与预期不符时,UI才会相应更新。

实时在线状态跟踪

实时跟踪用户在线状态和在白板上的位置对实时协作至关重要。在Stick中,我需要显示用户光标位置,指示其他用户在白板上的操作。实时跟踪还能确保团队了解谁在活跃参与。

经验教训:实时跟踪用户光标位置需要频繁更新,如果管理不当,可能会压垮系统。

TypeScript
TypeScript

{"answer":"编写类型安全的 TypeScript,合理运用类型收窄、推断模式与严格模式最佳实践。"}

下载

Supabase的解决方案:我使用了防抖函数来有效管理在线更新频率。此功能通过限制频繁更新来防止数据库被过多的请求淹没。

防抖函数的解释:防抖是一种技术,它只在指定延迟后触发函数,避免冗余或不必要的调用。在本例中,它有助于防止光标的小幅快速移动发送过多的更新。

<code class="javascript">export function usePresence(boardId: Id, isShared: boolean) {
  // ... (代码与原文相同)
}</code>

通过防抖更新,系统可以有效地跟踪用户活动,而不会压垮后端或导致性能问题。

数据库设计与索引

随着实时数据的增长,高效的数据库设计至关重要。我需要确保随着白板和用户数量的扩展,数据能够快速检索。

Supabase的帮助:Supabase的架构设计允许轻松定义表和索引。例如,在线状态表架构支持基于用户和白板的有效查询,并跟踪每个用户的最后更新时间。

<code class="javascript">presence: defineTable({
  userId: v.id("users"),
  boardId: v.id("boards"),
  lastUpdated: v.number(),
  cursorPosition: v.object({
    x: v.number(),
    y: v.number(),
  }),
})
  .index("by_board", ["boardId"])
  .index("by_user_and_board", ["userId", "boardId"])
  .index("by_board_and_lastUpdated", ["boardId", "lastUpdated"]);</code>

这些索引确保即使有大量活跃用户或白板,数据检索速度也能保持快速。

端到端类型安全

Supabase与TypeScript的无缝集成是其主要优势之一。TypeScript提供的类型安全在构建实时系统时非常重要。通过类型安全的查询、突变和模式定义,我能够在开发过程中捕获潜在错误,使整个过程更流畅、更可预测。

经验与总结

我了解到高效的状态管理至关重要。实时系统固然复杂,但使用合适的工具可以显著简化开发。Supabase让我能够专注于打造出色的用户体验,而无需过多关注底层技术细节。

Stick的开发是一次有意义的经历,让我学习了大量关于实时系统的知识,以及如何使用工具简化复杂任务。对于希望实现类似功能的开发者,我的建议是从小型项目开始,充分利用现有工具,并在学习过程中迭代改进。

访问Stick项目体验这些功能,或查看源代码了解更多实现细节。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

232

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

460

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

311

2026.03.13

TypeScript 全栈开发进阶指南
TypeScript 全栈开发进阶指南

面向有 JavaScript 基础的开发者,深入讲解 TypeScript 的类型系统与全栈开发实践。

226

2026.06.03

TypeScript Node.js 全栈工程化与Monorepo架构实践
TypeScript Node.js 全栈工程化与Monorepo架构实践

本专题围绕 TypeScript 在 Node.js 全栈开发中的工程化实践展开,系统讲解 Monorepo 架构设计、包管理策略、模块复用机制以及服务端与前端统一类型系统的构建方法。通过真实项目案例,帮助开发者提升大型全栈项目的可维护性与协作效率。

438

2026.06.16

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2185

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

3581

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2311

2023.08.31

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

160

2026.09.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.5万人学习

TypeScript——十天技能课堂
TypeScript——十天技能课堂

共21课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn