业余编程笔记

下班后写点小东西,把踩过的坑记在这里。

Canvas:外观没变就别重画

做一个飞行射击小游戏时,战机机身每帧都要在离屏画布上合成一次:底图、侧倾时的明暗渐变、受击时的闪白。性能面板里这一步每秒跑了 300 多次。

改法很简单:把侧倾角、闪白强度这些输入量化到 1/24,记下上一次合成用的值,只有值变了才重新合成;渐变对象也按量化后的值缓存。肉眼看不出区别(逐像素比较最大差 5/255),合成次数降到每秒十几次。

小游戏里的画布是原生内存

来回切页签,内存每次涨 1~2 MB。堆快照里 JS 对象几乎没变,问题出在每次重新布局都新建离屏画布:在微信小游戏里画布占的是原生内存,垃圾回收不及时,看上去就像泄漏。

处理:布局条件没准备好时不提前重建;画布池按像素总量设上限,复用时挑“刚好够大”的那块;关闭页面后提示一次 triggerGC。切一百次页签,新建画布从每轮 19 块降到 0。

一台小服务器的部署习惯

后端、数据库、缓存都只监听 127.0.0.1,对外只有 nginx 转发接口;管理后台和监控走 SSH 隧道,不开公网端口。

每次发版前先 mysqldump 一份,检查最后一行是不是 Dump completed 再继续;nginx 新配置先 nginx -t,不通过就换回旧配置,不 reload。