分享五个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+express+html5 实现拖拽上传
Aug 08 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
Sep 16 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 NodeJs
Node.js实现爬取网站图片的示例代码
NodeJs使用webpack打包项目的方法详解
Feb 28 #NodeJs
node快速搭建后台的实现步骤
nodejs利用readline提示输入内容实例代码
详解NodeJS模块化
NodeJs内存占用过高的排查实战记录
详解nodejs内置模块
May 06 #NodeJs
You might like
linux下 C语言对 php 扩展
2008/12/14 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
php操作MongoDB类实例
2015/06/17 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
python实现FTP服务器服务的方法
2017/04/11 Python
python实现顺序表的简单代码
2018/09/28 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
写给女朋友的道歉信
2014/01/12 职场文书
电子专业毕业生自我鉴定
2014/01/22 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
股东授权委托书
2014/10/15 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS
nginx之内存池的实现
2022/06/28 Servers