文档结构  
可译网翻译有奖活动正在进行中,查看详情 现在前往 注册?
原作者:Ratha KM (2016-12-22)    来源:Dzone [英文]
CY2    计算机    2016-12-22    3评/13086阅
翻译进度:已翻译   参与翻译: tangmisi (6), Aileen (4)

我们都知道现在Node.js越来越引人注目。每个人都对学习Node.js感兴趣并希望把它用起来。在开始使用一项技术之前,最好是先了解下它背后的概念。但对于初学者,不同的人使用不同的定义会可能令他们感到困惑。Node.js到底是什么?它是一门新语言,一个新框架,一个新工具,还仅仅是一个JavaScript文件?即使是对于那些有经验的Java开发者来说,他们也很难迅速地了解Node.js。因此,在这篇文章中,我试着向Java开发者解释Node.js是什么。

第 1 段(可获 1.39 积分)

运行时环境

我们知道运行Java程序时需要名为JRE的运行时环境。JRE包含一个名叫JVM的虚拟机。为了在不同的时间执行不同的任务。JVM包含很多组件,例如垃圾收集器(GC),即时编译器(JIT)解释器类加载器,线程管理器以及异常处理器 用于在不同的时刻处理不同的任务

除了JVM,JRE还有一系列在运行时辅助Java程序的库(例如rt.jar)。对于不同的平台,比如Windows,MacintoshLinux,我们有单独的JRE。当然因此JVM也是平台各异的。

第 2 段(可获 1.15 积分)

好的,现在请试着回想下Java程序是怎样编译和运行的。我们的源代码(.java)被Java编译器编译为称为字节码的中间代码(.class)。这个字节码可以在指定目标平台的JVM上运行。在运行前,JVM会把字节码转化为指定目标平台的机器码。

下面的图解释了Java程序的运行过程。

Image title

 

Web应用程序架构

典型的Java web应用程序架构拥有四层:客户端,表现层,服务/业务层和数据层。

第 3 段(可获 1.16 积分)

Image title

客户端层会使用像jQuery这样的库来支持AJAX功能,做客户端验证和DOM操作

表现层通常与客户端层交互。这一层一般为请求和响应处理实施MVC模式。像Spring MVC这样的框架在这一层被使用。同时,这一层里会有像Velocity这样的模板引擎来基于预定义的布局动态渲染视图层。

服务/业务层负责业务逻辑以及和其它层的沟通。在一个Ajax请求事件中,这一层为客户端层处理数据。这一层执行业务逻辑和响应,返回给表现层,以更新数据模型。服务层是和数据层进行数据沟通以获得或更新所需数据的。服务层可以使用像Spring这样的框架,实现SOAP或者REST服务。

第 4 段(可获 1.98 积分)

数据层通常使用ORM框架,例如Hiberate,或者任何基于JDBC的库/模板(Spring JDBC模板)来和像Oracle这样任意的RDBMS沟通。

部署架构

Java web应用程序的部署体系结构包括Apache HTTP服务器,它充当一个代理服务器以及处理静态内容。动态内容是由一个Web容器处理的,它实际上是一个处理Java文件的引擎。

下图解释了Java web应用程序的部署架构:

Image title

 

我是如何理解node.js的?

运行时环境

第 5 段(可获 1.1 积分)

我们在上一部分讨论JRE的原因,就是为了把它和Node.js做一个直接的对比。是的,你懂了!Node.js不是一个语言;也不是一个框架;更不是一个工具。它是一个执行基于JavaScript的应用程序的运行时环境。

和JRE类似,Node.js有一个被称为JavaScript虚拟机(JsVM?)的虚拟机。它为基于JavaScript的应用程序生成机器码,以使程序能够在不同平台上运行。

Node.js同时也是一个库的集合, 也可以被认为是一个帮助在运行时运行JavaScript应用程序的Node API或者Node模块,类似于JRE里面的Java库。因为JsVM的存在,对不同的平台,例如Windows、Macintosh、和Linux,针对Node.js有各自的要求。

第 6 段(可获 1.53 积分)

JavaScript虚拟机只是一个V8,谷歌的开源JavaScript引擎。类似于Java虚拟机,JsVM (V8引擎)也有像JIT和GC这样的组件来分别执行任务、运行时编译和内存管理。

现在,让我们试着理解一下JavaScript程序是如何被编译和执行的。源码是用JavaScript (.js)编写的。在把源码交给JsVM/V8 引擎之前,没有中间代码被生成。JsVM直接使用源码,并基于给定的平台把源码编译成可执行的机器码。

第 7 段(可获 1.24 积分)

上面的说明可以借助下面这幅图片来理解。

Image title

 

Web应用程序的体系结构

一个基于Node.js的web应用程序主要遵从Java web应用程序架构。主要的区别在于客户端请求处理。客户端的请求会被一个单独的线程所处理,但在Node.js应用程序中,这个处理是异步的。在Java应用程序中,每个客户端的请求会被一个单独的线程同步处理,因此,Java应用程序是多线程的。

基于Node.js的web应用程序开发有很多框架/库可以使用。这里要注意的有趣的一点是,框架/库都是基于JavaScript的。

第 8 段(可获 1.25 积分)

你可以通过下面的图片迅速地理解Node.js应用在这些层次中所使用的不同框架/库。

Image title

客户端使用了Angular.js——一个前端MVC框架。表示层以及服务层则使用Express.js(一个基于JavaScript的web应用框架)开发。 这儿还有一个独立的服务器用于运行Node.js应用。数据层使用了一个对象数据模型模块(即Mongoose.js)来与像MongDB这样的NoSQL数据库通信。

这个特定的技术栈叫作MEAN,它由MongoDB,Express.js,Angular.js, 客户端MVC框架,Node.js和运行时环境组成。

第 9 段(可获 1.39 积分)

部署架构

基于Node.js的web应用部署架构遵从Java web应用部署架构。这个架构有一个NGINX服务器,它扮演HTTP代理服务器的角色,同样也处理静态内容。动态内容由一个Node.js服务器处理,它同样包含一个处理JavaScript文件的引擎。

下面的图能够解释基于Node.js的应用程序的部署架构。

Image title

就这样而已?

请注意,这篇文章的目的是帮助Java开发者从他们的角度理解Node.js,而不是为了显示出对Java或者Node.js的青睐。同时,除了我们上面的讨论中使用到的技术,还有很多不同的可用的架构解决方案、框架和工具。只是为了便于比较和理解,我只提供了尽可能简单的架构解决方案和最简单的框架和库集。 因此,请尝试进一步探索以获得更好的理解。希望你有一个美好的学习体验!

第 10 段(可获 2.11 积分)

文章评论

班纳睿
部分段落标点符号还是英文了,看起来有点不太舒服呢,望修复一下 :flushed:
CY2
可直接纠正
班纳睿
嗯,已经提交了。