分享五个Node.js开发的优秀实践 


Posted in NodeJs onApril 07, 2022

前言:

Node.js在全球开发者中非常流行,这种趋势极大地改变了Web开发的面貌。可以说,Node.js在实时Web应用开发中无所不能。使用这种技术并不难,懂得如何更好地构建代码结构,在开发过程中解决遇到的困难和错误,是你真正应该去做的事情。

在这篇文章中,我们列出了5个通用的优秀实践,需要我们在开发过程中牢记于心并尽可能的去实践它们。

在Node.js开发时,请遵循以下5个最佳实践。

1.分层组织代码

例如Express.js这个应用广泛的Node.js框架,它允许开发人员自定义回调函数,当收到客户端请求时回调函数执行。有了这种灵活性,开发人员就可以非常方便地在回调函数中分析各种业务逻辑。

但是,如果你以写回调函数作为学习Express.js起点的话,在你真正了解回调函数等这些原理之前,你会发现随着开发的进行需要写回调函数的情况越来越多,需要写的回调函数的数量急剧增加,这让你的路由文件变成了一堆笨重且混乱不堪的代码。最差的情况就是代码可读性差,难以维护和管理,难以编写单元测试用例。

为了避免这种情况的出现,我们最好要践行“关注点分离”的编程原则。这意味着应用开发中你要编写不同的模块来路由到你的不同的业务上。

对于后端程序开发来说,不同的客户端请求就是通过不同的模块或者层来处理的。

因此,我们可以把代码分为三层来处理这些事情:

  • Controller(路由层):这是定义API路由的代码模块。在路由处理函数中,可以解析请求对象,获取必要的请求参数,然后交给服务层进行处理。
  • Serevice layer(服务层):由很多类和方法组成,并且这些类和方法只承担单一职责,同时保证可用性。定义服务层能有效地将业务逻辑处理和路由定义解耦。
  • Data access layer(数据访问层):它主要负责数据库的访问,写入和更新。所有的SQL语句,数据库连接,模型,ORM等都应该这里定义。

这种三层的代码设计为大多数基于Node.js的应用开发提供了一个可靠的脚手架,让我们的应用程序更易于编码、维护、调试和测试。

2.使用代码压缩

Gzip作为一种无损的文件压缩格式,主要用于压缩文件进行更快地网络传输。它在压缩基于Node.js开发的Web应用代码方面优势明显。你知道Express.js可以很方便的进行Gzip格式的代码压缩吗?没错,就是使用压缩中间件。

另外,Express.js文档建议使用如下代码来提高应用的性能。

上面的这些设置会压缩后端服务返回的响应体,并减少延迟,提高页面的响应速度。

在优化服务端性能时,前端代码的优化同样至关重要。前端代码上线前你需要了解网页的大小。上线前不要忘了使用诸如HTMLMinifier, CSSNano和UglifyJS这样的工具来压缩前端HTML, CSS, JavaScript代码。

总之,使用Gzip压缩和精简前端代码是Node.js开发的优秀实践之一。

3.学会运用第三方解决方案

毫无疑问,Node.js拥有一个遍布全球的大型开发社区。围绕NPM或Node的包管理器已经有了很多功能丰富、维护良好、文档完善的框架、库和用于各种用例的工具。因此,开发人员可以方便地在项目中使用这些现有的解决方案,并充分利用这些API。

强烈建议你去寻找一些现有的解决方案来处理遇到的问题,这会让你的开发工作更容易。下面是一些流行的Node.js库,可以有效的改善你的代码质量:

  • Gulp:一个自动化的任务构建工具。
  • Agenda:一个轻量级任务调度库。
  • Moment:一个解析,校验,操作,显示日期时间的工具库。
  • Winston:一个日志记录框架。
  • Nodemon:一个可以监听文件变更,自动重启服务的工具。

上面的这些库和工具可以让开发者更轻松地应对各种问题。不过,非常关键的的一点是你需要对项目中每一个导入的包有足够的认知并为此负责。此外,你还应该知道导入的每个包的目的是什么,有什么优势,有哪些缺点和问题。最后,作为一个开发者,你要确保不会过度依赖这些第三方库包。

4.充分利用程序监控工具

APM工具负责通过发现瓶颈和修复错误来监视应用程序的性能和可用性。Node.js监控工具可以通过分析每个Web结果来修复Bug,指出问题并跟踪问题。

使用APM工具的主要目的之一是评估性能指标、质量问题、性能瓶颈、标准错误等,并利用得到的这些信息来进行所需的代码修改和改进。

ScoutAPM就是一个APM工具,可以帮助开发者分析和优化网页应用的性能。它还提供了实时监控,能帮助开发者快速地定位问题,并在最终确定问题之前进行更改以解决问题。

此APM工具是唯一一个应用程序性能监视产品,它克服了诸如提高性能和稳定性等问题。其中N+1数据库查询、数据库慢查询和性能异常是最常见的问题。

5.保持你的代码整洁且易于复用

代码检查和格式化

你所需要做的就是不断提高代码质量和代码的可读性。为了实现这些,需要压缩代码,这有助于减少延迟,提高网页响应速度。大多数代码开发流程通常包含一个代码检查和代码格式化的过程。

不过代码检查器只能处理代码中不完美的地方,并且只有一种方法来修复它们。另一方面,代码格式化程序的工作目标是确定一组格式和样式指导原则,这些指导原则必须在整个项目中保持一致。

ESLint,JSLint和HSHint是最常用的JavaScript代码检查工具,Prettier是最常用的代码格式化工具。这些工具并不关注代码的具体含义,只关心代码的格式,规范性。幸运的是,大多数IDE或者代码编辑器如Visual Studio code(VSCode),Atom等,都认可编写高质量代码的重要性,并提供了代码检测和格式化插件,并且这些插件都非常容易设置。

此外,一些IDE还提供了一些有用的特性,如智能代码补全、Debug调试工具、代码跳转和代码格式优化等。这些工具还是有不少优点的,因此强烈建议写代码时使用上这样的IDE设置。

代码风格指南

我们需要遵循的另一个优秀实践是参考谷歌和Airbnb等巨头使用的JavaScript代码风格指南和标准。这些指导原则涵盖了从文件、变量和类的命名约定到文件编码的格式细节等等。更重要的是:它可以帮助你编写高质量的代码,并且这些代码风格符合一些全球顶级开发人员使用的实践和标准。

总结

我们试着描述出在开发过程中,你应该考虑到的最重要的优秀实践,以避免工作进展没多少就遇到很多困难和挑战。请记住:雇佣一支专业的Node.js开发团队永远是一个好主意,这不仅会帮助你写出整洁高质量的代码,还会在开发的方方面面帮助到你。

最后我们想对开发人员们说的是:是时候把你在今天学到的内容应用到你项目中去了。坚持去践行这些优秀实践,你就一定会从中受益,开发出高可用、可伸缩的Node.js应用程序。

到此这篇关于分享五个Node.js开发的优秀实践 的文章就介绍到这了,更多相关Node.js开发实践 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

NodeJs 相关文章推荐
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
Nodejs初级阶段之express
Nov 23 NodeJs
nodejs async异步常用函数总结(推荐)
Nov 17 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 NodeJs
Node.js实现爬取网站图片的示例代码
NodeJs使用webpack打包项目的方法详解
Feb 28 #NodeJs
node快速搭建后台的实现步骤
nodejs利用readline提示输入内容实例代码
详解NodeJS模块化
NodeJs内存占用过高的排查实战记录
详解nodejs内置模块
May 06 #NodeJs
You might like
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
Json序列化和反序列化方法解析
2013/12/19 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
python 实现线程之间的通信示例
2020/02/14 Python
python如何爬取网页中的文字
2020/07/28 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
毕业生自荐信的主要内容
2013/10/29 职场文书
董事长助理岗位职责
2014/02/18 职场文书
消防志愿者活动方案
2014/08/23 职场文书
涨价通知怎么写
2015/04/23 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python