1、前言
不知不觉node已经7岁了,我接触node也有1年多了(从 0.10.36 版本到如今的 6.2.0);node已经逐渐稳定并被广大开发者使用,伴随着ES2015的规范,node的发展势头被一致看好!从各个方面看,JavaScript这门开发语言已经有了成为跨平台语言的趋势:javascript
- web端开发 jquery、angular、react等;
- 后台开发 node;
- 游戏开发 cocos2d-js;
- 移动端开发 react native(性能介于webApp与native开发之间);
- 桌面开发 nw.js(最近很火哦!);
以前特别火的web全栈工程师mean(mongoDB+Express+Angular+Node)就是基于JavaScript的;随着如今前端技术的快速发展、先后台的彻底分离,前端的工做不只仅是切切图写写静态页面了,如今的前端工做量仍是挺大的,前端技术的发展迭代远远超过个人想象,固然最合适的才是最好的;扯远了,接下来说讲我眼里的nodecss
2、优势
在接触node以前,我写过一段时间的java,接下来我就用java这门很是普遍的后台语言与node做比较:html
- 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、koa一、koa二、hapi、meteor等(好像除了hapi,其余都有中文社区);
3、缺点
- js写法太灵活(带点面向对象,带点函数式编程),10我的的代码,可能就出现10种代码风格(夸张了点),便是优势也是缺点;
- js的callback问题,刚接触的时候真的很蛋疼,动不动就不知道从哪callback了;
- js是弱类型语言,只有在解释器里运行的时候才能知道这个变量的类型;在编程过程时,是没法判断该变量是否有错;错误的声明变量可能会形成一些特别奇怪的报错(下面会说解决方案);
- js没有特别好的模块规范,虽然已有前端AMD、CMD,后台的CommonJS规范;若是想做为一个web端的全栈工程师,须要了解先后端的各类规范,有一种解决方案UMD(同时兼容AMD,CommonJS规范);
- js做为单线程语言,若是线程遇到大量计算占用CPU,也会形成阻塞,请求都会挂起,响应超时,甚至宕机;
- 编写逻辑复杂业务逻辑代码时,若是不使用一些MVC之类的设计模式时,代码是又臭又长,不可复用,维护性也差;
4、解决方案
- 针对代码维护、扩展这方面,须有一套符合实际的编码规范,并运用一些成熟的设计模式、设计思想;
- 针对callback这种问题,已经有很好的解决方案了,例如async,bluebird 这些第三方控制流程包,并且已经归为es6标准了,es7中async、await的特性也能很好的解决此问题;
- js做为弱类型语言,在解释过程的时候才能判断是否出错,开发的须要细心点,webstorm是能够打断点的,借用typescript在编码过程的时候也是能够提示错误的;
- 在js设计之初就保留了class,import等关键字,在es6里终于能用了,js慢慢从一个脚本语言变成高大上的语言了;
- 相对于多线程而言,单线程能减小上下文的性能开销,其实js也是能够开多个线程的,一个主线程,多个子线程(工做线程),参考cluster库;
- 当业务特别复杂、繁琐的时候,其实能够尝试一下typescript(微软的东东,我看了一下介绍,以为很是不错),typeScript能够编译出纯净、 简洁的javaScript代码,而且能够运行在任何浏览器上、Node.js环境中和任何支持ECMAScript 3(或更高版本)的JavaScript引擎中;或者从架构来讲,用java补,如今也有成熟的解决方案了;
5、我的总结
- 虽然nodejs终究是js,可是前端(包括dom、bom)跟后端终究干的事情不同,感受node写后台慢慢的能像java同样处理复杂逻辑以及大型项目;所谓的web全栈工程师,听起来高大上,这要把html五、css三、js、database、linux等都要吃透,很难~!
- 做为一名技术宅来讲,js这门语言目前很是流行而且会持续火下去,连vsCode都是js写的,基本上其余语言能作的,js都能作;
- 做为一名nodejs的推崇者与实践者,我仍是太年轻,最近在作微服务架构方面的东西,慢慢折腾;
- 以上都是我的观点仅供参考,若有不足,尽情提出,很是感谢!!