-
背景:这是一个运营上线4年的游戏,国服服务器节点700个左右
-
内存优化
- 去除无用数据
- 在战斗中,会将玩家数据转换为一个战斗数据,玩家身上的宠物数据也会随之转换到战斗数据,但是实际战斗中出战宠物只有3个,但是数据确实全额转换没有进行过滤
- 优化方式:缩减宠物数据,只转换必要的出战宠物
- 风险:无
- 冷加载
- 起服时会将磁盘中的数据加载到内存中,但实际上有大部分数据是不活跃玩家数据,没必要加载到内存中
- 优化方式:按需加载,通过数据时间进行判断,符合某一条件则加载进内存
- 风险:可能会引起卡顿
- 由于未加载进内存,玩家想要第一次请求数据只能从磁盘加载,如果请求数据过多,加载速度会很慢,导致卡顿
- 去除无用数据
-
同步还是异步
- 同步:A去请求B服务,必须要得到B服务的返回,A才能继续工作
- 异步:A去请求B服务,然后继续做自己的逻辑
- 以点赞服务为例
- 背景:一个玩法结束后,弹出结算面板,此时玩家可以进行点赞操作
- 有问题的逻辑
- A向Like服务发送一个请求
- Like服务做点赞逻辑,返回
- A接收返回,再去做其他事情
- 因为点赞这个操作默认是会成功的,并且在我的场景中A对于Like服务的返回并不是特别关心,所以完全可以异步的去做
- 修改后的逻辑
- A向Like服务发起请求,默认成功,继续做其他事情
-
逻辑优化
- 能够一次循环做完的事情 不要多次
- 用AI找了个简单的例子
# bad
numbers = [3, 6, 2, 8, 4, 10]
# 找到最大值
max_value = numbers[0]
for num in numbers:
if num > max_value:
max_value = num
# 找到最小值
min_value = numbers[0]
for num in numbers:
if num < min_value:
min_value = num
print("最大值:", max_value)
print("最小值:", min_value)
# good
numbers = [3, 6, 2, 8, 4, 10]
# 初始化最大值和最小值为列表的第一个元素
max_value = min_value = numbers[0]
for num in numbers:
if num > max_value:
max_value = num
elif num < min_value:
min_value = num
print("最大值:", max_value)
print("最小值:", min_value)
- 希望对大家有点点帮助