在微信朋友圈中,点击"不看他的朋友圈"后,对方的内容会立刻从页面消失。这个"立即消失"的效果,用了什么技术?
这背后并不复杂,本质上是一套本地状态过滤加上异步持久化的组合拳,整个过程分为两个阶段:
- 1本地过滤(立即执行) — 客户端把该用户 ID 写入内存中的黑名单集合,触发一次列表重渲染,目标用户的条目从 UI 上消失。全程不涉及网络请求。
- 2异步持久化(后台进行) — 与此同时,一个网络请求悄悄发往服务器,把屏蔽设置保存下来。这个请求的延迟或失败,对用户的即时体验没有任何影响。
// 伪代码示意 function blockUser(userId) { blacklist.add(userId); // 1. 立即写入内存 renderFeed(feed.filter( // 2. 过滤并重渲染 post => !blacklist.has(post.authorId) )); api.saveBlock(userId); // 3. 后台异步持久化 }
设计模式
这种"先更新 UI,再同步服务器"的模式,有一个专有名词:
Optimistic UI乐观更新——假设操作会成功,先反映到界面上,失败时再回滚。这是现代社交 App 流畅体验的核心设计哲学。
技术模式
作用
典型场景
Optimistic UI
不等服务器确认,先更新 UI
点赞、关注、屏蔽
本地状态管理
内存维护黑名单,过滤渲染数据
屏蔽列表、筛选条件
异步持久化
后台静默同步设置到服务器
所有偏好设置的保存
列表重渲染
数据源变化后触发 UI diff 更新
动态列表过滤、排序
为什么感觉"很快"
根本原因是:用户感知到的操作完全在本地完成,网络延迟被彻底隐藏在后台。
下次 App 启动时,客户端会从服务器重新拉取黑名单,服务端也会在接口层面过滤掉被屏蔽的人,最终保证两端数据对齐。
这套思路并非微信独有——微博、抖音、Twitter/X 的类似操作,背后都是同一套逻辑。Optimistic UI 是当今所有主流社交产品的标配。