Node.js 从 2009 年出世到现在,使用 Node.js 开发的构建工具改变了前端们的开发流程,已经是大部分前端开发者电脑上必装的 JavaScript Runtime 了。那它作为一门后端语言,在后端技术架构方面又处于什么位置呢?
首先说下目前我了解到的技术架构,主要有两种 :
-纯 Node.js 应用,从前端到数据层都由 Node.js 处理(创业公司居多)
-将 Node.js 作为中间层,Node.js 作为业务中间层调用数据接口(大公司前后端数据分离方案)
是什么原因让大家做出这样的选择呢?
Node.js 目前是不是能很好的驾驭大型的项目呢?配套设施是否已经足够成熟了?与 Java 等传统语言能不能在后端开发上处于同等的地位?
欢迎大家参与话题
阅读原文请点击
以下为获奖回答:
回答者:死月
做大底层基本上是没戏的,但是可以作为异构服务化中的一个环节。——
无论是业务逻辑层(取代目前一些 Java / PHP 等的业务层,当然没说要推翻现有的重写,而是说以后新的服务出来之后技术选型可以考虑 Node.js),又或者网关层(包括中途岛类的前后端分离方案)。
如果是一些内部小型系统或者外部小型系统,也可以一手包办。
个人原因有如下几点:
- 语言舒适区,作为从 C++ 转过来的我,认为 JavaScript 比写 Java 更爽;
- 生态活跃,完全有能力驾驭一些业务层的大型项目(极端情况下的 CPU 密集型系统除外,当然 Node.js 实际上也并非无力驾驭这些系统,只是开发上会复杂一些);
- 开发成本低,一套系统没有那么多的冗余代码,在一套系统的快速出原型上有比较大的优势,在处理 IO 密集的操作(尤其是现代大型互联网应用服务化的时候,要频繁请求内部或者三方服务或者接口的情况下)有着天生的节省开发成本的优势;
- 人员复用,虽然很不愿意承认这一点,但是的确在一些小型的能跑起来就可以的内部应用里面,前端同学可以直接跑过来看看文档就开写(但是要驾驭正规的企业级互联网应用的话还是需要系统学习后端知识,而不是目前网上炒得很热的所谓的全栈)。
就目前而言,对于生态圈的评价大概是这样的:
- 需要更多的高质量开发人员投入到生态圈中,虽然 NPM 中有很多高质量的包,但也不排除有低质量的内容;
- 就企业级的 Web 框架来说,还有缺失,或者不活跃。目前社区中最火的 Express 和 Koa 来说实际上称不上是框架,太过于自由以至于看起来虽然简单谁都能上手实际上对开发人员的素质要求非常高,一个不注意整个项目会掉入无尽的技术债黑洞中。
最后讲讲 Node.js 在我厂中的位置探索:
- 完整的重 App 的后端,其中有调用更底层的服务(如通用的用户服务等);
- 完整的小型 Web 后端;
- 异构服务化中的一些服务,如供其它业务方调用的短连接服务等;
- 前后端分离胶水层,某种意义上就是一个**网关层**;
- 计算密集型任务集中处理系统——用多进程进行任务处理;
- 前端工具,如 Webpack 打包等。
先这样吧,后续想到继续补充。
回答者:扬风飞雪
本人是2015年底开始学的nodejs,春节期间突击看了一本书,觉得还不错,然后直接运用到公司开发的一个发布云平台上。当时选择它主要考虑几个方面,一是本人是C++,iOS开发的,对JAVA不懂又不想学;二是学好JS就即可做后端又可做前端;三是拿它做接口api高效,性能好;四是开发环境搭起来很简单,部署也很简单。刚开始用它重写了整个云平台的api供APP调用,后来有部分后台的模块也采用它去开发,那种感觉真的很爽,从底层数据库设计,到后端业务接口封装,前端界面开发,一个人全部搞定。刚开始还害怕nodejs不稳定,直接用在我们的云平台上风险挺大,现在经过半年多的实际检验,平台上有百家客户都在使用,服务还是相当稳定的。大概花了半年时间,把一些基础模块做了封装,把遇到的坑都填了一遍,现在开始从团队内部培养人一起来做,上手还是挺快的,依葫芦画瓢基本上就能满足我们的新业务需求,只要在一些关键地方把好关就行。个人感觉nodejs很适合创业团队的核心骨干去做,一个人可以同时承担多个角色,但是他必须掌握得比较全面,后端设计能力,前端能力,甚至移动客户端开发能力,有了nodejs,就像一根线把整个业务所需的所有开发角色都串联起来了,做起来就会非常得心应手。
回答者:贾冬雪
Node.js其实有很多大公司都在用的,比如eBay, Microsoft。。。等等,驾驭大型的项目是可以的。在说说优势把:1、采用事件驱动、异步编程,为网络服务而设计。其实Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程。而且JavaScript也简单易学,很多前端设计人员可以很快上手做后端设计。2、Node.js非阻塞模式的IO处理给Node.js带来在相对低系统资源耗用下的高性能与出众的负载能力,非常适合用作依赖其它IO资源的中间层服务。3、Node.js轻量高效,可以认为是数据密集型分布式部署环境下的实时应用系统的完美解决方案。Node非常适合如下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多。
Node.js现在已经相对成熟了,大公司都在使用就是最好 的解释。、至于java吗。老牌的语言,怎么说呢。技术上已经没啥问题了,很多人还是顺手用java,取代恐怕是时间上的问题了