记一次 node 项目重构改进
摘要:经常听到有祖传的代码一说,就是一些项目经过了很长时间的维护,经过了很多人之手,业务逻辑堆叠的越来越多,然后就变成了一个越来越难以维护。
经常听到有祖传的代码一说,就是一些项目经过了很长时间的维护,经过了很多人之手,业务逻辑堆叠的越来越多,然后就变成了一个越来越难以维护。
前几个月,同事刚走,留下一个node支撑的Master/Slaver结构的分布的任务调度系统;
从运行部署角度看,现状是多个发布版本,而且版本依赖的node存在差异,而且部署需要手动进行一些依赖文件的拷贝;
从代码结构层面看,主要需要维护的版本,使用js语法编写,常常是大量的业务逻辑堆砌到了一个文件之中;
下面以Slaver为例,分析一些当前存在的问题,并且分析一些我考虑过的优化方案
首先我们看,Slaver部分包含了哪些模块和功能:
1.包含与Master之间的消息请求和响应;
2.包含了子任务的状态机;
3.包含了不同任务的处理细节;
从语法和性能角度看:
比较多的以对象类型和变长参数形式作为传参;
同文件中包含大量实体的定义和构造,过多的使用Object而不是定义实体对象,包含很多隐式的类型转换和冗长的元素引用;
大量的使用sync形式的io操作,过多的文件操作;
只有分散各处的错误打印,没有集中的错误定义;
变量命名没有规则,无法区分局部和全局的,存在重复的名称使用,加重了理解的难度;
变量的定义穿插分布,全局范围的函数调用穿插分散多处
嵌套多层的try...catch语句
持续性循环的任务设计造成服务器资源的浪费
函数中多处使用绝对路径,迁移移植性差
优化方案的考虑:
js=>Ts,采用typescript语法重新组织代码结构;(这个方案前同事已经开发了一个版本,由于升级的调整幅度有些大,实际上线后发现还有比较多的功能问题,版本暂时搁置)
js=>java,采用java重新开发相关逻辑(业务代码逻辑较多,工作量较大);
保留js语言不变,对原代码进行重构切分;
typescript/java相对于js都有更强的类型和更易于使用面向对象的软件设计的语法设计;
但是是不是采用js开发后端代码的就一定是个糟糕的选择呢,也不尽然,需要的更多的设计和规范坚持;
题外话,其实如果一个老系统运行的很好,也不需要在其基础上做大规模的二次开发,从投入成本角度看,我认为就没必要对这种项目进行重构了;
重构和解耦是软件开发中最长久的话题,
未完待续...
参考文档:

记一次 node 项目重构改进的更多相关文章
- 记一次Node项目的优化
这两天针对一个Node项目进行了一波代码层面的优化,从响应时间上看,是一次很显著的提升.一个纯粹给客户端提供接口的服务,没有涉及到页面渲染相关. 背景 首先这个项目是一个几年前的项目了,期间一直在新增 ...
- 《always run团队》第六次作业:团队项目系统设计改进与详细设计
项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 作业链接地址 团队名称 always run 作业学习目标 掌握面向对象软件设计方法:(2)完善系统设计说明书,掌握面向对象详细设计内 ...
- 一个node项目的框架搭建流程
项目服务端编程语言node,前端js,数据库mongodb, 开发工具用webstorm. 使用express应用生成器,生成项目雏形. 安装应用生成器工具,命令是npm install expres ...
- iOS基于MVC的项目重构总结
关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你认为的MVC的问题,一定是你自己理解的问题(资深架构师请自动忽略本文). 行 ...
- Express创建并运行node项目(Jade和EJS模版引擎)
1.创建Node项目 [Jade模板] > express nodeJade express创建项目若不显示指定模板,默认使用Jade,以下写法都可以: express -jade nodeJa ...
- 转:iOS基于MVC的项目重构总结
转:http://www.cocoachina.com/ios/20160519/16346.html 关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说 ...
- node项目自动化部署--基于Jenkins,Docker,Github(1)安装Jenkins
前言 每次项目代码更新后都要重新部署,如果只有一台服务器还好. 但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了. 这里用几篇文章来记录一下如何使用Jenkins,Doc ...
- 《Dare To Dream》第六次作业:团队项目系统设计改进与详细设计
团队项目系统设计改进与详细设计 一.团队项目系统设计改进 任务1: a.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容. 初稿的不足:缺乏每个模块的具体业务流程详细设计和流程 ...
- 团队作业5——《Spring_Four》项目需求改进与系统设计
团队项目需求分析改进: 任务1: a.分析<基于Jsoup的大学生考试信息展示系统项目需求规格说明书>初稿的不足,特别是文档需求描述建模不完整的内容. 通过软件工程更深入的学习发现我们的需 ...
随机推荐
- .NET 跨平台框架Avalonia UI: 填坑指北(一):熟悉UI操作
Avalonia 是一个跨平台的 .NET UI 框架,支持 Windows.Linux.Mac OSX... (以及Android IOS soon..) 本篇主要介绍Avalonia开发过程和L ...
- Selenium数据驱动测试模型和实例
模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了. 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变. 装载数据的方式可以是列表. ...
- markdown使用手册
github上找到了一个挺全面的项目,mark一下. https://github.com/nicejade/nice-front-end-tutorial/blob/master/tutorial/ ...
- vmware 虚拟机共享 windows 目录
1.vmware 配置: 2.虚拟机进行配置: 虚拟机安装vmware-tools 3.虚拟机中挂载sr0(cdrom): [root@bogon ~]# mount /dev/sr0 /mnt/ m ...
- 你所不知道的Spring的@Autowired实现细节
前言 相信很多Java开发都遇到过一个面试题:Resource和Autowired的区别是什么?这个问题的答案相信基本都清楚,但是这两者在Spring中是如何实现的呢?这就要分析Spring源码才能知 ...
- 个人项目WC.exe Node.js+electron实现
前言 实现语言:Javascript 编译工具:webstorm GitHub:https://github.com/NPjuan/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本 ...
- docker-compose 官网下载特别慢怎么办?
docker compose 官放推荐的下载方式是这样的: sudo curl -L "https://github.com/docker/compose/releases/download ...
- 不要再学 JSP 了,学 SpringBoot + Thymeleaf + Vue吧
老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 读 ...
- 图解Janusgraph系列-分布式id生成策略分析
JanusGraph - 分布式id的生成策略 大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 本次更新时间:2020-9-1 文章为作者跟踪源码和查看官方文档整理,如有任何问题,请联 ...
- Git深入浅出使用教程:Git安装、远程控制、常用命令(全)
一.软件安装 1.先安装[Git-2.24.1.2-64-bit.exe]软件.(官网下载的很慢,可以在百度云盘下载我的) 链接:https://pan.baidu.com/s/1uoIS9DWSBp ...