小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
在日常开发过程中,接口性能优化是一个永恒的话题,虽说业务的体量和用户才决定了优化的程度,但在早期设计时加入一些优化的思考可以让我高枕无忧很久。优化涉及的范围很广,有各种各样的手段和维度,今天从编码的角度来介绍一种在特定场景下特别有用的优化方式。
如果你恰好学过信息论,应该会了解通信过程中编解码无处不在。编码的方式决定了通信的速度和准确性,编码也常常以压缩的形式存在。比如哈夫曼编码,通过一定的算法可以以少量的0和1还原大量的信息。对应到接口的优化,压缩了网络传输过程中的信息的量,自然可以获得更快的速度。在网络带宽的限制下,压缩成了一个行之有效的方向,游程编码也是一种特定数据结构情况的下的压缩算法。
比如下面的信息:
// 编码前
aaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
// 编码后
5a18b6a6b35e
这就是游程编码,将连续出现的字符以个数来展示,极大的缩减了信息量,且简单直观。那么适合什么样的场景呢?如果是这样直接的字符串信息,现实开发过程中确实很难遇到,但我们有二进制。比如将一天的时间以分为单位分割成二进制数,那将是1440位。有了这样的表示,我们就可以代入到很多场景中:
- 登陆记录:快速查询用户在24小时中的登录时间段
- 游戏时长:快速统计24小时内用户的游戏时间
- 日程安排:快速获取一天中的日程安排
这样的表示方法压缩比大且足够简单,在特定场景下才会发挥巨大效果。