文档章节

我眼中的nodeJS

mosaic101
 mosaic101
发布于 2016/07/11 23:46
字数 1432
阅读 132
收藏 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
粉丝 21
博文 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
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
node可以查看没有问题,npm所有命令报错甚至包括npm-v

报错信息: C:Users123>npm -v Error: EPERM: operation not permitted, mkdir 'C:Program Filesnodejsnode_global' TypeError: Cannot read property 'get' of undefined at errorHandler (......

吴昊昊0418
07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精选Spring Boot三十五道必知必会知识点!

Spring Boot、Spring MVC 和 Spring 有什么区别? 1、Spring Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。 当我们恰当的使用 DI 或者是 IOC 的时候,...

java知识分子
15分钟前
1
0
docker多容器部署lnmp环境

环境:RHEL7.5 ip:192.168.10.102,主机名:lb02 一、创建web、数据库目录 web网站目录为:/wwwroot,属主属组:www [root@lb02 ~]# mkdir /wwwroot[root@lb02 ~]# useradd -s /sbin/nolo...

人在艹木中
44分钟前
1
0
eclipse运行springboot项目报错‘找不到或无法加载主类’

这是一个很烦躁的问题~,往往困住大家好长时间,然后各种百度。借此,咱将这个问题有可能产生的原因进行一下总结。若有不完善之处欢迎大家在下面留言指出~~ Duang!问题出现 然后开始尝试解决...

Code辉
今天
1
0
springboot oauth2 跨域设置

@Overridepublic void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/security/**") .authentica......

昆虫大侠
今天
1
0
08-利用思维导图梳理JavaSE-泛型

08-利用思维导图梳理JavaSE-泛型 主要内容 1.泛型的基本概念 1.1.定义 1.2.使用前提 1.3.使用泛型的好处 2.泛型的使用 2.1.泛型类定义 2.2.泛型对象定义 2.3.泛型中的构造方法 2.4.泛型方法的...

飞鱼说编程
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部