文档章节

我眼中的nodeJS

mosaic101
 mosaic101
发布于 2016/07/11 23:46
字数 1432
阅读 135
收藏 1

一、前言

  不知不觉node已经7岁了,我接触node也有1年多了(从 0.10.36 版本到现在的 6.2.0);node已经逐渐稳定并被广大开发者使用,伴随着ES2015的规范,node的发展势头被一致看好!从各个方面看,JavaScript这门开发语言已经有了成为跨平台语言的趋势:

  • web端开发 jquery、angular、react等;
  • 后台开发 node;
  • 游戏开发 cocos2d-js;
  • 移动端开发 react native(性能介于webApp与native开发之间);
  • 桌面开发 nw.js(最近很火哦!);

  之前特别火的web全栈工程师mean(mongoDB+Express+Angular+Node)就是基于JavaScript的;随着现在前端技术的快速发展、前后台的完全分离,前端的工作不仅仅是切切图写写静态页面了,现在的前端工作量还是挺大的,前端技术的发展迭代远远超过我的想象,当然最合适的才是最好的;扯远了,接下来讲讲我眼里的node

二、优点

  在接触node之前,我写过一段时间的java,接下来我就用java这门非常广泛的后台语言与node作比较:

  • node写起来特别简单、容易上手,开发灵活;
  • 开发效率高:高到什么地步呢,几行代码就能完成一个http请求;
var app = require("express");
var router = app.Router();
router.get("/api",function(req,res) {
	res.json({
  	tag:"success",
      status:1,
      msg:"helloWorld"
    })
})
  • 处理高并发时有优势(事件驱动、非阻塞式 I/O 的模型):具体的可以去搜索事件驱动与非阻塞的概念;
  • 简单易上手,想写好,比较难;不过现在都有模块规范了,前端AMD、CMD,后台的CommonJS;
  • node的生态圈很好,cnode社区也一直活跃一些大神哦;
  • 基本常用的依赖包npm上都有(稳定性不保证!);
  • node框架比较多,较流行的有express、koa1、koa2、hapi、meteor等(好像除了hapi,其他都有中文社区);

三、缺点

  1. js写法太灵活(带点面向对象,带点函数式编程),10个人的代码,可能就出现10种代码风格(夸张了点),即是优点也是缺点;
  2. js的callback问题,刚接触的时候真的很蛋疼,动不动就不知道从哪callback了;
  3. js是弱类型语言,只有在解释器里运行的时候才能知道这个变量的类型;在编程过程时,是无法判断该变量是否有错;错误的声明变量可能会造成一些特别奇怪的报错(下面会说解决方案);
  4. js没有特别好的模块规范,虽然已有前端AMD、CMD,后台的CommonJS规范;如果想作为一个web端的全栈工程师,需要了解前后端的各种规范,有一种解决方案UMD(同时兼容AMD,CommonJS规范);
  5. js作为单线程语言,如果线程遇到大量计算占用CPU,也会造成阻塞,请求都会挂起,响应超时,甚至宕机;
  6. 编写逻辑复杂业务逻辑代码时,如果不使用一些MVC之类的设计模式时,代码是又臭又长,不可复用,维护性也差;

四、解决方案

  1. 针对代码维护、扩展这方面,须有一套符合实际的编码规范,并运用一些成熟的设计模式、设计思想;
  2. 针对callback这种问题,已经有很好的解决方案了,例如async,bluebird 这些第三方控制流程包,而且已经归为es6标准了,es7中async、await的特性也能很好的解决此问题;
  3. js作为弱类型语言,在解释过程的时候才能判断是否出错,开发的需要细心点,webstorm是可以打断点的,借用typescript在编码过程的时候也是可以提示错误的;
  4. 在js设计之初就保留了class,import等关键字,在es6里终于能用了,js慢慢从一个脚本语言变成高大上的语言了;
  5. 相对于多线程而言,单线程能减少上下文的性能开销,其实js也是可以开多个线程的,一个主线程,多个子线程(工作线程),参考cluster库;
  6. 当业务特别复杂、繁琐的时候,其实可以尝试一下typescript(微软的东东,我看了一下介绍,觉得非常不错),typeScript可以编译出纯净、 简洁的javaScript代码,并且可以运行在任何浏览器上、Node.js环境中和任何支持ECMAScript 3(或更高版本)的JavaScript引擎中;或者从架构来说,用java补,现在也有成熟的解决方案了;

五、个人总结

  • 虽然nodejs终究是js,但是前端(包括dom、bom)跟后端终究干的事情不一样,感觉node写后台慢慢的能像java一样处理复杂逻辑以及大型项目;所谓的web全栈工程师,听起来高大上,这要把html5、css3、js、database、linux等都要吃透,很难~!
  • 作为一名技术宅来说,js这门语言目前非常流行并且会持续火下去,连vsCode都是js写的,基本上其他语言能做的,js都能做;
  • 作为一名nodejs的推崇者与实践者,我还是太年轻,最近在做微服务架构方面的东西,慢慢折腾;
  • 以上都是个人观点仅供参考,如有不足,尽情提出,非常感谢!!

© 著作权归作者所有

共有 人打赏支持
mosaic101
粉丝 24
博文 31
码字总数 12966
作品 0
浦东
程序员
私信 提问
加载中

评论(2)

mosaic101
mosaic101

引用来自“赵占涛”的评论

回调大坑,可以用promise解决
我知道怎么解决的,promise用的不好的话,还会造成catch不到err
赵占涛
赵占涛
回调大坑,可以用promise解决
Nodejs眼中的RabbitMQ小情人

这里我们来看看如何在Nodejs上使用rabbitmq消息通道,消息通道主要解决RPC服务调用的持久化问题,当然了,还有其它类似的需求,比如可以作为日志的收集等。 使用指南 环境 安装包 使用demo 信...

dounine
2018/05/28
0
0
Node.js v0.12.8 发布

Node.js v0.12.8 发布,更新如下: Commits [] - build: backport tools/release.sh (Rod Vagg) #3642 [] - build: backport config for new CI infrastructure (Rod Vagg) #3642 [] - build......

oschina
2015/11/26
3.1K
20
Node.js进阶教程第一步(基础篇)-何韬-专题视频课程

Node.js进阶教程第一步(基础篇)—18659人已学习 课程介绍 本课程从Node.js的安装配置开始,包括函数调用,模块调用,路由,文件操作,异常处理,参数接收,正则表达式,连接数据库,事件等内...

pkutao
2016/09/06
0
0
Node.js的学习资源、教程和工具

这篇文章编译整理自Stack Overflow的一个如何开始学习Node.js的Wiki帖,这份资源列表在SO上面浏览接近60万次,数千个收藏和顶。特意整理发布到这里,其中添加了部分中文参考资料。 学习指南和...

90后爱国
2015/07/21
0
0
Skywalking Node.js 探针 0.1.0 版本正式发布

项目介绍: Skywalking Node.js探针0.1.0版本正式发布了. Skywalking Node.js探针是由Skywalking社区提供专门针对Node.js生态下的后端应用提供的自动探针。 Skywalking Node.js探针遵守Skywa...

Xin_Zhang_BJ
2018/05/21
912
3

没有更多内容

加载失败,请刷新页面

加载更多

Java并发编程基础(二)

线程安全与数据同步

chendom
22分钟前
0
0
在Centos7 上安装SVN

在Centos7 上安装SVN 2017年11月16日 17:07:54 crossangles_2017 阅读数:2543 1、安装 使用yum安装非常简单: yum install subversion 2、配置 创建仓库 我们这里在/opt下建立一个名为svn的...

linjin200
24分钟前
0
0
牛津词典 2018 年度词汇 ——「有毒」!

简评:本文并没有「标题党」,牛津词典公布的 2018 年度词汇就是 Toxic. 意为「有毒的」。 2018 was toxic. Toxic 这个词是什么意思呢? 牛津词典(Oxford Dictionaries)在 Word of the Da...

极光推送
30分钟前
1
0
浅谈Service Mesh体系中的Envoy

https://blog.csdn.net/yunqiinsight/article/details/81019255

易野
39分钟前
1
0
嵌入式应用选择合适的微控制器

准备所需硬件接口列表 使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微控制器中有两种常见的接口类型需要列出。第一种是通信接口,这些是外围设备,如USB,S...

linuxCool
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部