Zong
初入后端

服务端

国庆回来之后,开始从事服务端开发的工作,也在服务端同事的帮助下,快速的熟悉了服务端的搭建及开发。

从框架选型开始,我选择了一个较为成熟生态的 NestJS 服务端框架,数据库选用 postgresql 。

开发规范则也是按照 NestJS 推荐的最佳实践进行执行,从 controllers entities services modules dtos filters interceptors 到单元测试,都是按照推荐规范进行,也是感受了一波服务端的开发规范吧。

数据库从熟悉基础的 SQL 语言外,也尝试了 typeorm 的同步生成功能(当然,这是不推荐在生产使用的,但是在单元测试中我选择使用同步功能,以保证每个测试用例都可以纯净的执行),最后也是选用 SQL + migration 进行初始化的实现,当然也满足后期迭代的数据库迁移工作。

实现基础的 API 后也体验了使用 swagger 自动生成 API 文档的功能,感受还不错。

通过 redis 来记录用户登录状态,也是简单尝试了一把鉴权。

再来就是 CI 了,因为研发环境相当于是私有环境,部署环境不仅需要在私有环境上部署,还要在办公环境上部署,所以选型考虑使用 docker 来完成。

私有环境部署较为简单,利用 CI + docker 可以实现自动化,但是办公网环境的部署则需要将镜像 docker push 出来,进行手动部署。出于工作环境的限制,暂时这一步骤就考虑手动进行了。

环境的配置目前采用 dot 文件 + Dockerfile 参数实现,也可以在后期进行更自由的定制。

其余就是基础的 CRUD + 单元测试了,也是借此机会简单的熟悉了服务端研发的入门。

对了,有关鉴权 token 的生成,以及一些加解密算法,后续可以深入研究一下。

性能优化

再来就是这个月负责了老低代码平台的性能优化问题,因为原有的业务还在持续交付,但是在交付环境的表现并不是特别的理想。

在部分情况下会出现卡顿,或者长时间运行后会卡顿的现象。

经过对交付项目的观察,也是发现了确实存在内存泄露的问题。

从而对老低代码平台进行性能排查,从平台侧、组件侧、框架侧(Vue 2.6、组件库)其实都能看到一些内存泄露的问题。

比较简单击破的其实是组件侧,虽然组件量大,但是代码逻辑相对较为简单,内存泄露的原因也比较好找,大多是闭包产生的内存泄露问题,其次就是全局变量、事件监听、监听对象外泄、意外报错等问题。

平台侧则较为复杂一些,需要了解分析平台渲染的运行时逻辑才能击破,检查平台自身、引用组件时、操作组件生命周期时产生不当的副作用或者未及时释放关联关系产生的内存泄露问题。

也存在着一些双向链表解除单边引起的内存泄露问题以及一些业务逻辑执行顺序不合理的地方。

再一个就是因为交付场景是在 Electron 里运行的,是不是可以使用 Electron 来进行定期手动 GC 释放,当然这个思路还没有尝试过。