首页> 站长杂谈 > 正文

NodeJs介绍

  • 来源:互联网
  • 2018-07-31 14:28:41
  • 人已阅读
1.1    什么是NodeJs
 
首先在搞清楚什么NodeJs之前,我们先来聊聊JavaScript,只要做过开发的人都应该知道JavaScript是目前最为流行的前 端(客户端)脚本语言,JavaScript在Web项目中的使用率可以说是99%以上,不夸张的举个例子:"现在你打开的100个网页中,有99个都使用了JavaScript"。
 
那么为什么JavaScript这么火,其实原因非常非常的简单,JavaScript出现赋予网页新的生命力,从一开始它只为表单验证而生,到现在百万亿的网站使用JavaScript来做的各种效果及人性化的功能,估计用一本书也很难写完JavaScript在前端所做的贡献和地位。
 
  
JavaScript以前只是作为一门前端脚本语言,一门语言的运行,是需要执行环境(浏览器),就如同我们的Java代码,它需要运行在JVM中。JavaScript也不例外,JavaScript的执行环境是什么呢? 是我们的客户端浏览器(IE,FF,Chrorme....)。之所以我们把它成为了称为前端(客户端)脚本语言,就是因为它的运行环境。
 
Google在2008年年末推出了Chrome浏览器和崭新的JavaScript引擎V8。这是一个为了更快的Web体验而专门制作的更快的JavaScript引擎,V8让Web应用大大提速了。突然之间,Google、Apple、Mozilla和微软之间的JavaScript竞赛就开始了。相关的书籍也开始变多,逐渐把JavaScript从一门人人轻视的语言一下变成了重要的语言。
 
让服务器端与客户端均使用一种脚本语言,无疑可以减少服务器端的开发难度,提高服务器端的开发效率。另一方面,由于近几年许多JavaScript引擎中均内置了JIT(JustInTime)编译器,使JavaScript引擎的处理速度得到了大幅度提高,JavaScript脚本语言的运行速度不会逊色于任何服务器端开发语言。
 
2009年8月,IT业界制定了CommonJS标准,用于规范化服务器端JavaScript脚本语言。
 
 
同年,有一个位和我们一样热爱JavaScript的美国程序员Ryan Dahl(瑞恩达尔)决定使用JavaScript做一些更加有意义的事情,给予JavaScript在开发中所处的新定位,使用JavaScript作为后端(服务器)编程语言来做开发,我的天,这个想法简直就是疯了(如同一只狗,有一天对着猫说:"我要开始抓老鼠了")。
 

 
Ryan Dahl(瑞恩达尔)
 
 
Ryan Dahl(瑞恩达尔)推出了第一个遵循CommonJS标准的服务器端JavaScript脚本语言开发框架——Node.js。
 
要让JavaScript的作为后端(服务器)编程语言,那么必须就要先要脱离JavaScript目前的执行环境客户端浏览器。Ryan Dahl想到了一个好点子,使用Google Chrome开源浏览器JavaScript V8引擎为基础搭建了一个新的JavaScript执行环境(注意:这里说的只是使用的浏览器执行JavaScript的引擎,并非是我们使用浏览器客户端),并且在V8引擎中基础上添加了服务器编程语言应该有的功能,如文件系统,模块,包,操作系统API,网络通信等,并且给这个新的平台取名为NodeJs
 
 
Node.js的一个最重要的特性是通过单线程实现异步处理环境。通常,提及异步处理,开发者们首先会联想到的是服务器端多线程环境,在Node.js中,通过事件环与非阻塞型I/O机制实现服务器端的异步处理。
 
 
NodeJs = JavaScript执行环境+JavaScript扩展的功能。
 
简单理解NodeJs就是一个可以让JavaScript脱离浏览器还能执行的平台,并且这个平台对JavaScript功能进行了增强。
 
后记:
 
Nodejs的创造者Ryan Dahl不搞Node以后,消失了好一阵,最近又开始在GitHub活跃,改玩Go了,当然也不奇怪,他本来就是弄数学的,博士没读完只拿了硕士学位,之前主要用C/C++和Ruby,偶然发现V8性能不错,才开始玩JS的 ​​​。
 
 
1.2    什么是NodeJs(官方)
英文:https://nodejs.org/en/
中文:http://nodejs.cn/
 
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。
 
 
由于Node.js一个服务器端框架,所以它主要工作之一是处理浏览器请求。在传统的I/O系统中,每个请求的发出都是在上一请求到达之后才发出的。所以这被称为阻塞(blocking)I/O。服务器会阻挡其它的请求以处理当前请求,从而导致浏览器等待。
  Node.js不以这种方式来进行I/O处理。如果一个请求需要长时间处理,Node.js会把该请求发送给一个事件循环(event loop),然后继续处理在调用堆栈(call stack)中的下一请求。当延后请求处理完毕时,它会告知Node.js同时浏览器会做出响应反馈。
举例:
 
在这个餐馆例子中,服务员接收了菜单指令,等待饭菜处理,然后在饭菜处理完成后把饭菜端到桌子上。在服务员等候饭菜处理期间,他会拒绝其它客人的菜单指令。
 
而在非阻塞模式下,服务员会告知厨师他接受到的菜单指令,然后去接收下一桌的指令。当第一桌饭菜处理完毕时,他会为那桌客人上菜,然后继续接收其它客人的指令。这样一来服务员不会由于阻塞指令而造成时间浪费。

1.3    NodeJs与JavaScript区别
很多人,分不清楚彼此之间的关系和区别,学习NodeJs之前我们先对他们进行质上的比对;
 
NodeJs  :一个可以运行JavaScript的平台,基于Chrome JavaScript V8引擎,并且对JavaScript语言进行了增强,使JavaScript具有服务器语言开发的能力(操作文件,读取系统信息,网络等。。。);
 
JavaScript:一门编程语言,只要有JavaScript引擎就能运行,各大浏览器都有自己的JavaScript引擎,并且如果JavaScript运行在浏览器中,浏览器对JavaScript加入了浏览器和文档操作的接口(方法);
 
简单理解:JavaScript运行需要JavaScript引擎,JavaScript引擎可以在浏览器(IE、Firefox、Chrome)中,也可以独立出来(NodeJs),运行在浏览器中的JavaScript,为客户端JavaScript,而NodeJs称为服务端JavaScript。 JavaScript运行在不同的平台,责任也不一样,浏览器中JavaScript主要是操作BOM和DOM,而NodeJs则是具有服务端语言处理能力(处理网络请求,保存数据到数据库);
 
注意:NodeJs平台与浏览器平台中运行的JavaScript,在两个不同的平台,平台各自运行自己的代码互不干扰。
 
客户端JavaScript

NodeJs JavaScript


1.4    为什么学NodeJs
1、前后端语言统一(JavaScript 理想状态);
2、前后端分离。
3、前端开发工具很多都基于Node,只有会Node,使用起来才能得心应手;
4、社区活跃,上千个成熟模块供我们选择使用;
5、招聘要求,Node.JS薪资高,人才少;
 
语言都是有共同之处,才好学习,完全一门格格不入的风格,学起来难,推广也不好做。
现在的前端已经不是简单写html,拖到浏览器进行运行,为了提供一种快速开发的模板、达到组件化、模块化等等一系列的目的,所以才有了less sass stylus typescript 等等提高开发效率的新技术写法。其实你会发现,不管他怎么变来变去,他还是要最终生成html css js代码让浏览器运行。
所以我认为,语言也好、新技术也罢,我们一定不要盲目追赶新技术。对于工作,其目的就是 很快 快好 快容易入手,解决实际的项目、产品,如果学来没法用,反而得不偿失,岂不可笑。往往追赶新技术,会让自己疲惫,还没有学完,又一个就出现了。根据自己的公司需求学习,不要太急,一定要打好基础。
 
 
前端开发工程化。举个例子,以前写纯的 CSS,现在我们用 Sass 写,好处就是多了很多方便的语法,写起来省事。那么事实上这个 Sass 文件是不能直接在浏览器中运行的,所以在上线之前需要用工具处理一下,那么这个工具是什么呢?当然,可以是任何脚本语言,比如 Ruby、python,当然也可以是 Node.js,那为什么选择 Node 呢,因为它也是 JS 语言,前端开发者都很熟悉,理所当然成为了第一选择。
 
现在做前端开发首先就要在自己电脑上全局安装node环境,然后就开始搭建项目,一个项目的架子搭建好就开始用npm 安装各种依赖了,有开发需要的,生产需要的,更有甚者vue-cli直接一套脚手架一个比较完整的项目架子就搭建好了,直接运行npm run  dev  项目就运行起来了!!开发完成后直接使用webpack打包就交给别人了。
 
1.5    哪些程序适合用Nodejs来做
  •  用户表单收集
  •  在线考试系统
  •  聊天室
  •  图文直播系统
  •  提供JSON格式的API
总结起来就是:
 
1、 javascript不仅可以写前端,还可以写后端。
2、 node是一个平台,不是一门语言,在node 平台上开发程序使用的语言是javascript。
3、 node平台基于v8引擎。
4、 node的特点:单线程、非阻塞I/O、事件驱动。
 

上一篇:异步与同步

下一篇:NodeJs模块基础

文章评论

 Top