文档章节

我眼中的nodeJS

mosaic101
 mosaic101
发布于 2016/07/11 23:46
字数 1432
阅读 133
收藏 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
粉丝 22
博文 31
码字总数 12966
作品 0
浦东
程序员
私信 提问
加载中

评论(2)

mosaic101
mosaic101

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

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

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

dounine
05/28
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
05/21
0
1
Node.js进阶教程第一步(基础篇)-何韬-专题视频课程

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

pkutao
2016/09/06
0
0
Nodejs + Express 实现多用户博客系统(23 个视频)

Nodejs 实现最常见的登录注册功能,结合管理文章等功能,实现大家所期待的多用户博客系统。 总播放时长:135 分钟 作者:hfpp2012 类别:后端 技术分类:Nodejs Node.js + Express 实现多用户...

rails365
08/15
0
0
Node.js的学习资源、教程和工具

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

90后爱国
2015/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

系统维护和tcp连接

查看系统负载 1 w 命令 w命令用于显示系统当前负载 和系统已登录的用户. 查看系统CPU 和核数: cat /proc/cpuinfo| grep 'cpu cores' 第一行显示 :04:41:16 up 8:56, 1 user, load average: 0...

Fc丶
16分钟前
0
0
Mac Pro 下安装 Snappy 压缩工具

snappy 我这里就不做介绍了,直接可以移步 https://github.com/google/snappy/tree/master 查看源码及说明信息。 我这里下载 :https://github.com/google/snappy/releases/download/1.1.4/...

Ryan-瑞恩
19分钟前
1
0
iframe里弹出的层显示在整个网页上

通过在iframe页面添加js脚本,动态给父窗体创建一个div,然后设置让其显示在最顶层这样就可以了 在文件夹中创建两个文件,一个iframe页面,一个父页面index。

少年已不再年少
34分钟前
1
0
聊聊storm trident spout的_maxTransactionActive

序 本文主要研究一下storm trident spout的_maxTransactionActive MasterBatchCoordinator storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/MasterBatchCoordinator.java ......

go4it
43分钟前
1
0
js时间函数getTime() 在苹果手机上返回NaN的问题

一、出现问题 var newStartDate = new Date('2017-08-30');var newStartTime = newStartDate.getTime(); 获取到的时间戳,在Android手机正常,在IPhone中返回NaN。 问题说明: 在苹果手机...

tianma3798
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部