近日,开源视频会议平台 Jitsi 的 React Native SDK 被曝存在一项严重影响用户体验的性能缺陷——在应用初始挂载或首位参与者加入会议时,界面可能出现长达两分钟以上的卡顿与屏幕冻结。该问题已在 GitHub 官方仓库及多个技术社区引发广泛讨论,开发者呼吁官方尽快给出修复方案。
问题重现:从挂载到正常使用需等待数分钟
根据多位开发者提交的 Issue 及社区反馈,该问题主要出现在使用 Jitsi Meet React Native SDK 集成视频会议功能的移动端应用中。当用户在 iOS 或 Android 设备上首次打开会议界面(即 React Native 组件挂载完毕)时,屏幕会进入“死锁”状态:视频画面停滞、操作按钮无响应,甚至触摸事件也无法被触发。这种冻结状态通常持续 120 至 180 秒,随后应用会自行恢复并正常运作。
更令人困扰的是,当会议中已有参与者,而另一位新用户首次加入时,同样会触发类似的长时间冻结。这意味着,对于接入人数较多的会议场景,每次新成员进入都可能导致全体参会者被迫等待,严重影响实时沟通效率。
技术溯源:疑似底层线程竞争与渲染阻塞
目前,Jitsi 团队尚未发布官方的事故分析报告。但根据社区中部分资深贡献者的初步排查,问题可能出在 SDK 内部的多线程处理机制与 React Native 桥接层的交互上。在组件初始化阶段,Jitsi 会同时启动音频/视频引擎、建立 WebRTC 连接、加载本地渲染器并处理参与者状态同步。当多个异步任务争抢主线程资源时,React Native 的 JavaScript 线程可能出现长时间阻塞,导致 UI 组件无法及时更新。
此外,部分开发者在测试中发现,若在组件挂载后手动调用 AudioMode.setMode 或强制切换音视频设备,冻结时间会显著缩短。这暗示了问题可能与音频会话初始化时的系统回调延迟相关。
影响范围:已涉及众多 React Native 项目
Jitsi Meet SDK 被广泛应用于教育、医疗、远程办公等领域的第三方应用中。由于 React Native 具备跨平台开发优势,许多初创团队选择通过该 SDK 快速集成视频会议功能。如今,这项性能缺陷正迫使这些应用不得不在用户体验与开发成本之间做出艰难权衡。
某位医疗科技公司的前端工程师在论坛中直言:“我们的远程问诊应用在上线前测试中发现了该问题。患者首次进入等待室时,医生和患者双方都会看到长达两分多钟的黑屏。这对于需要紧急咨询的场景来说是灾难性的。”类似的反馈层出不穷,不少开发者表示只能通过推迟界面初始化、加入虚假加载动画或强制预加载等方式进行“曲线救国”。
临时应对方案:降级版本与手动优化
在官方补丁发布之前,社区已总结出若干临时缓解措施:
- 降级至旧版本:有开发者发现,Jitsi Meet SDK 的 7.x 版本表现相对稳定,回退至该系列可避免冻结问题,但会失去新版本的部分功能和安全修复。
- 延迟组件挂载:在 React Native 路由设计中将会议组件设置为“懒加载”,并在实际进入会议前提前预初始化 Jitsi 引擎,利用
onLoad回调保证 UI 在引擎就绪后再展示。 - 强制音视频设备访问:在组件挂载后主动调用
jitsiMeetRef.current?.setAudioMuted(false)等操作,虽不能完全消除冻结,但可将等待时间缩短至 30-60 秒。 - 原生端直接集成:部分团队选择放弃 React Native SDK,转而直接使用原生 Android/iOS SDK 并通过 Bridge 通信,但此举大幅增加了维护成本。
官方回应与后续展望
截至发稿,Jitsi 官方团队已在 GitHub Issue #18xxx 下置顶回复,确认该问题为“已知的高优先级缺陷”,并计划在下一个主版本(预计为 v10.5.0)中提供修复。初步进展显示,团队正在重构 SDK 的生命周期管理,将部分初始化任务移至后台工作线程,以缓解主线程负担。同时,官方鼓励开发者通过 P2P 模式(即点对点连接)规避多人场景下的复杂并发问题,但该模式在大型会议中并不适用。
由于 Jitsi 本身依赖大量的开源贡献,修复进度可能受社区参与度影响。对于时间紧迫的项目,开发者可以考虑临时切换到其他替代方案,如 LiveKit 的 React Native SDK 或自建基于 WebRTC 的简易客户端。但长期来看,Jitsi 凭借其出色的自托管能力和开源生态,依然是许多企业的首选。
结语
屏幕冻结两分钟,在追求“毫秒级响应”的实时通信领域无疑是重大事故。Jitsi React Native SDK 的性能瓶颈再次提醒开发者:在依赖第三方跨平台框架时,务必对底层 WebRTC 与 UI 线程的协作机制进行充分压力测试。我们也将持续关注 Jitsi 团队的修复进展,第一时间为读者带来更新报道。