1. 微信的一个原则
微信做产品的一个原则:核心功能做到极致,辅助功能尽量做到降低成本。
2. 搜索功能
聊天页面的“搜索”功能的使用场景频次由高到低是:微信好友、群聊好友、公众号&小程序、聊天记录、收藏。而由于用户在搜索信息呈现的页面下滑到“聊天记录”这个功能且通过“搜索”来查找聊天记录的场景比较少,频次比较低,所以在“聊天记录”这个功能之前,微信机智地插入了自己的广告:功能、游戏。
3. 聊天功能
而“语音输入”功能,则是因为用户对着微信说话,微信将语音转化成文字,属于用户与用户强关系社交下的即时通讯辅助。这时候对于用户来讲,他希望可以即时被告知“语音输入”功能是否能用,如果在用户不明确网络是否可行的前提下,用户点击了“语音输入”,等用户语音录入完毕、希望传达信息的时候,微信loading(加载)页反馈需要等待,或者提示网络不可用,这种体验对于用户来说是很伤的。
所以,微信将这三个功能(视频聊天、实时共享位置、语音输入)设置成在用户使用前就即时判断是否有网。
此外需要注意的是,发红包和转账因为涉及到余额或者从银行卡支取钱,所以必须请求服务器才能完成。因此操作进行到支付环节的时候,因为需要请求服务器,导致这时候在离线情况下,流程将不能如常进行下去。
那么这里面有一个问题:既然知道支付环节要联网才能走完整个流程,为什么不在整个流程之初(点击“红包”、“转账”)的时候就直接出现“当前网络不可用”之类的弹屏提示呢?
对此,我是这么认为的:
- 第一,如果用户使用场景是一直处于离线状态,那么这个时候,用户通常不会使用微信等APP;
- 第二,弱网环境或者网络不稳定的环境,要比离线环境的使用场景多,如果在流程之初(点击“红包”、“转账”),就需要请求服务器,告知“网络不可用”,那么用户很容易直接放弃该操作;
- 第三,这么做可以减少前端对服务器的请求次数,对于月活近十亿级用户的微信来说,减少对服务器的一次请求,在服务器端的支出都有可能降低很多。我想这第三点也应该是里面最重要的一点。
4. 好友
对于微信的好友处理的相关操作,我发现微信的原则是:尽最大可能地减少对服务器的请求。
结合前面的情况以及流程的分析,我认为在微信的服务器端,微信并没有对用户的聊天内容进行储存,只是将其作为一个信息传递的通道。对此,我们可以这样理解,我们发送的消息就像货物一样,被服务器由A站拉到B站然后卸载下来后,服务器就不管了,如果B站收了就收了,如果B站不收,也并不会把货物(聊天内容)让服务器带回去储存在服务器或者返回给A站。
5. 设置
涉及到账号安全的功能模块,在离线状态下都是没有办法使用的,这是因为账号安全的相关处理,放在后端要比前端安全的多,所以不只是微信,其他平台也是这样,即选择通过后台来处理和账号安全相关的问题,是比较普遍的做法。
一味追求逻辑正确是标准的技术思维,而一味追求用户体验,不考虑逻辑和技术又属于空谈。
6. 朋友圈
微信一共有三种loading(加载)机制:
- loading过程中不能进行任何操作的,只能等提示网络超时;
- loading过程中可以点击返回或者取消等操作,来停止loading;
- loading和其他操作互不影响的。
而在朋友圈页面中loading的加载机制即为第三种:
对此我的分析是,朋友圈在使用频率上可以说仅次于即时通讯,一个小小的优化影响到十亿用户的高频使用,这时候弱网环境、断网环境的容错性就变得尤为重要。对于这样一个使用频率较高的功能,当用户在行驶的地铁上或者火车上等信号非常不稳定的场景下,还可以进行正常发朋友圈、点赞、评论、回复的操作体验,这样的设计就显得格外重要了。
而且,朋友圈相对即时通讯,其实是属于弱关系社交,天然的场景下是不需要对方马上做出回复、点赞、评论等互动。所以,这种逻辑可以说是保证在离线状态下可以使用该功能,且互动信息在有网环境下推送给对方这样符合用户使用场景的最优解决方案了。虽然这一点技术上实现起来应该是相当困难的,但是一旦实现价值也是显而易见的,通过微信朋友圈这个成功的产品就能明显看出来。
7. 总结
通过对离线版微信一些常见的功能以及对应操作的分析,我发现微信对于前后端交互处理的原则有以下几点:
- 对于非核心功能,为了尽可能减少对服务器的压力,微信做了大量的前端缓存、前端交互逻辑;
- 在不得不请求服务器时,微信会考虑该结果是用户即时想要的还是可以延后的,如果是即时想要的,就即时请求服务器(如支付),如果不是那么急迫,则有可能延后请求,以保证网络环境较差的时候,流程可以走通(如拉黑、删除);
- 对于核心功能(如朋友圈),做到最大限度的容错性以保障用户体验。
另外,在这整个过程中,作为一枚产品狗,我得到了如下的一些启发,且这些信息可以应用到我的工作中,希望也可以对你有帮助:
- 对于成本控制的意识,应该纳入产品方案中去,也许我们做不到像微信那么极致,但是有意识的往这方面考虑,也许会有更好的产品方案;
- 对于核心功能花多大精力去优化,都不为过,因为这才是我们安身立命的根本;
- 不要一味追求逻辑正确,可能有些时候逻辑合适才是更重要的。
出处:https://zhuanlan.zhihu.com/p/29129653