我眼中的nodeJS

一、前言

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

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

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

二、优点

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

  • node写起来特别简单、容易上手,开发灵活;
  • 开发效率高:高到什么地步呢,几行代码就能完成一个http请求;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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的推崇者与实践者,我还是太年轻,最近在做微服务架构方面的东西,慢慢折腾;
  • 以上都是个人观点仅供参考,如有不足,尽情提出,非常感谢!!