文档章节

我眼中的nodeJS

mosaic101
 mosaic101
发布于 2016/07/11 23:46
字数 1432
阅读 130
收藏 1
点赞 2
评论 2

一、前言

  不知不觉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解决
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 ⋅ 1

Nodejs眼中的RabbitMQ小情人

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

dounine ⋅ 05/28 ⋅ 0

针对 Node.js 后端应用的自动探针 - Skywalking Node.js

Skywalking Node.js探针是由Skywalking社区提供专门针对Node.js生态下的后端应用提供的自动探针 Skywalking Node.js探针遵守Skywalking追踪协议,Node.js探针能够结合SkyWalking的后端分析追...

Xin_Zhang_BJ ⋅ 05/21 ⋅ 0

Node.js在windows下的安装

Node.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法。 本安装教程以Node.js v4.4.3 LTS(长期支持版本)版本为例。 Node.js安装包及源码下载地址为:https://nodejs....

梦梦阁 ⋅ 06/06 ⋅ 0

Node.js VS PHP:Web 开发的史诗级对决,你支持谁?

现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序。早期网络发展,不同的技术被用于前端和后端开发。但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 Ja...

uzv80px5v412ne ⋅ 2017/12/29 ⋅ 0

SkyWalking/skywalking-nodejs

SkyWalking Node.js SkyWalking Node.js is the Node.js instrumentation agent, which is compatible with Apache SkyWalking(Incubating) APM backend and others compatible agents/SDKs.......

SkyWalking ⋅ 05/21 ⋅ 0

[Node.js源码解读(1)]Node.js的启动过程

本文原载于https://github.com/DavidCai1993/my-blog/issues/26 经原作者授权连载于alinode官方博客,未经原作者允许,不得转载。 大家可能会好奇,在 Node.js 启动后,第一个执行的 JavaSc...

_朴灵_ ⋅ 05/14 ⋅ 0

Ubuntu里node命令无效解决方法

在ubuntu里用sudo apt-get install nodejs安装Node.js后,会发现terminals里运行node命令(比如node –-version)时候会有No such file or directory的错误。引起这个错误的主要的主要原因是...

独孤梦杨柳 ⋅ 05/17 ⋅ 0

Node.js 8.11.3 和 10.4.1 发布,JavaScript 运行时

Node.js 8.11.3 和 10.4.1 发布了,更新内容如下: 8.11.3 Notable Changes buffer (CVE-2018-7167): Fixes Denial of Service vulnerability where calling Buffer.fill() could hang http......

淡漠悠然 ⋅ 06/14 ⋅ 0

柏林纪行(中):Node.js Collaboration Summit

传送门: 柏林纪行(上):整体感受 柏林纪行(中):Node.js Collaboration Summit 柏林纪行(下):JSConf EU Node.js Collaboration Summit 比较沉重的思考写完,下面是比较轻松的部分了…...

_朴灵_ ⋅ 05/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。 2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。...

xiaomin0322 ⋅ 20分钟前 ⋅ 0

Oracle10g 数据及文件迁移过程[原]

QL*Plus: Release 10.2.0.1.0 - Production on 星期三 5月 11 10:22:35 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到: Oracle Database 10g Enterprise Edition Re......

harrypotter ⋅ 26分钟前 ⋅ 0

nginx安装

1:安装工具包 wget、vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc gcc-c++ 2:下载nginx安装包 wget http://nginx.org/download/nginx-1......

壹丶贰 ⋅ 29分钟前 ⋅ 0

ideaVim安装及配置

1.安装插件 File-Settings-Plugins,Browse Repositories,输入ideavim,安装。 重启后,在Tools-Vim Emulator启用。 2.快捷键设置 ideaViim键与idea快捷键有冲突,可以在Settings-Other Se...

Funcy1122 ⋅ 33分钟前 ⋅ 0

MySQL中B+Tree索引原理

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B...

浮躁的码农 ⋅ 48分钟前 ⋅ 0

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 52分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 今天 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 今天 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部