AppJun
2023-07-26 18:06:40 +08:00
作为做过几年的 IM 相关的 iOS 程序员稍微说一下,其实像 Telegram 这种用服务器保留了所有未被删除信息的 IM 服务而言,先天上对那些架构上(不考虑审核目的)没有存储用户的聊天内容导致不支持从最开始拉取消息的 IM 服务(比如微信而言),在很多方面是有很大优势的。主要说 IM 部分,微信的其他各种服务塞进来以及技术含量很高的小程序不在讨论范围。
简单的说其实也是一种钞能力,用服务器成本来换来多端客户端的任务的简易性,最终靠简易性省掉了很多麻烦:
1. 每次打开只需要拉取少量的数据,就能让用户大致了解群组的情况。
- 比如用户在上次使用到下次使用期间,他有十个 500 人的群组,每个群组本来里面原来有 500 人 -> 550 人,其中一些人改了昵称,也不需要下载群组变化的 550 人的信息,只需要获取一个群组消息就可以,然后获取消息的时候把对应说话的用户信息也返回过来,而那些不说话的用户信息,有需要点击进群组的时候再依次加载。但是类似微信,他要下载 550 人的信息。
- 如果这些群组产生了 2W 跳未读,这时候,其实他只需要拉取每个群组最老的 10 条未读和最新的 10 条未读,就能满足点击进去能看到好像都加载下来的数据,如果消息显示完了,就再请求服务器。这里只需要你和服务器的通讯速度够快,预加载的时机合适就行。但是类似微信,他必须把所有的 2W 条信息基本都下载下来。这也是为什么很多人的微信打开在转圈的时候,因为很多人特地把微信的“后台 App 刷新”给关了。
2. 客户端职责简单
- 主要的内容就是做几个 list ,把大家的聊天内容展示出来,处理未读/已读,根据更新 ID 请求数据等等。
- 而微信,就特别需要有很强的投入在数据库优化上。因为聊天记录都在本地,又要在手机可能不太好的性能条件下,加载搜索之类的行为卡顿不能太明显的前提下,尽可能保证用户体验。
3. 多端效果比较一致
- 毕竟每个客户端只是拉取信息,虽然可能和“同步”的概念有点不一样,但是用户感受到的就是数据对得上。
4. 遇到版本升级,历史垃圾文件清理的时候,Telegram 会有更大的余裕来处理,毕竟用户数据如果损坏了?再拉就好。微信则会面临垃圾越堆越多,一不小心弄坏用户记录可就很头疼的状态。
但是微信这种没有服务器从头拉取数据的选择有什么好处呢?
我个人觉得主要是几点:
1. “省钱”,如果用拉取服务器模式,那么现在腾讯可能要 10x 倍的服务器投入,按照国内这个使用频率和覆盖率。那你可能除了朋友圈/公众号的广告外,应该也会看到 Telegram 那样子的群组广告/会员模式之类盈利的操作。
2. 在性能同样的情况下,搜索的体验可能比 Telegram 必须调用服务器 API 请求历史数据来得好。
3. 宣传点可以多一个隐私,而且用户需要担心自己历史聊天记录丢失的同时,哪天被哪个脚本小子盗号导致十多年来的聊天记录被传播开来的风险也降低,如果微信用的是 Telegram 的模式,我相信这几年很多吃瓜事件,怕是会有一大堆更没必要更详尽的聊天记录流出。
4. 微信也能省去很多麻烦,比如聊天数据库被拖库之类的情况。
整体而言,各家有各家的实际和困难,用不同的代价,换来不同的优势。
其实很多事从一开始的选择就会导致一些必然的结果。有人说技术到一定程度就跟魔法一样。我觉得其实很多时候,App/互联网对一些不太熟悉的人而言,就是这类魔法的存在。比如楼里的很多人,基本都处于这种状态。