我们都知道Node.js现在得到了所有的关注。
每个人都对学习Node.js感兴趣,并希望可以工作于Node.js。
在开始工作之前了解技术背后的概念总是不会错的。
但对初学者来说,可能会因为不同的人使用的不同定义而晕头转向。
Node.js究竟是什么?它是新的语言还是新的框架,是新的工具抑或只是一个简单的Script文件?即使对于有经验的开发人员来说,也很难快速了解Node.js。
因此,在本文中,电脑培训http://www.kmbdqn.cn/将尝试为开发人员诠释Node.js。
运行时环境我们知道需要一个称为JRE的运行时环境来运行程序。
JRE有一个称为VirtualMachine(JVM)的虚拟机。
JVM有许多组件,如垃圾回收器(GC),即时(JIT)编译器,解释器,类装载器,线程管理器,异常处理器,用于在不同时间执行不同的任务。
除了JVM之外,JRE还有一系列的库(例如,rt.jar)来帮助运行时的程序。
我们有单独的JRE用于不同的平台,如Windows,Macintosh和Linux,以及还有JVM。
好吧,就试着记住如何编译和执行一个程序。
我们有源代码(.),它由编译器编译成一个名为Bytecode(.class)的中间代码。
此Bytecode被提供给JVM以便在给定的目标平台上执行。
JVM在执行之前将Bytecode转换为特定于目标平台的机器码。
Web应用程序架构典型的Web应用程序架构有四个层:客户层(Client),展示层(Presentation),服务/业务层(Service/Business)和数据层(Data)。
客户层(Clientlayer)可以使用像jQuery这样的库来支持AJAX功能并且具有一些客户端验证和DOM操作。
展示层(Presentationlayer)通常是与客户层交互的一个层。
该层通常已经实现了用于请求和响应处理的MVC模式。
在这一层可以使用如SpringMVC这样的框架。
此外,还有一个模板引擎,如Velocity,可以根据预定义的布局动态地渲染视图。
服务或业务层(Service/Businesslayer)负责具备业务逻辑并与其他层通信。
在AJAX请求的情况下,该层直接向客户层提供数据。
此层执行业务逻辑并回应到展示层以更新模型。
服务层是与数据层通信以获取或更新所需数据的一个层。
服务层可以具有使用任何框架,例如Spring的SOAP或REST服务实现。
数据层(Datalayer)通常使用一些ORM框架,如Hiberate,或任何基于JDBC的库/模板(SpringJDBC模板)来与任意RDBMS(如Oracle)进行通信。
架构部署 Web应用程序架构部署包括ApacheHTTP服务器,它充当代理服务器以及提供静态内容。
动态内容由Web容器提供,Web容器实际上是处理文件的引擎。
node.js 与java都是服务器语言,但是两者存在很大区别:(1)Node.js比Java更快 :node.js开发快,运行的效率也算比较高,但是如果项目大了就容易乱,而且javascript不是静态类型的语言,要到运行时才知道类型错误,
所以写的多了之后免不了会出现光知道有错但是找不到哪儿错的情况,所以测试就得些的更好更详细。
java开发慢,但是如果项目大、复杂的话,用java就不容易乱,管理起来比node.js省。
(2)Node.js 前后端都采用Javascript,代表未来发展的趋势,而java则是现在的最流行的服务器端编程语言。
(3)Node.js和Java EE——一种是解释语言,一种是编译语言.
Node.js解决问题的速度比Java EE快20%,一种解释语言和一种编译语言在一个VM中的速度是一样快的,这没有多年的优化过程是绝对达不到的。
Node.js和Java
EE规模超出正常的服务器需求。每秒400-500的请求数量可以说是相当不错。谷歌是世界上最大的网站,每天有大约50亿个请求,如果换算成秒的话,也就是57870个请求/秒。
这也是谷歌域名在世界范围内的需求数量,所以如果有一个运行在一台机器上的、400需求/秒的网站的话,那你的这个网站可以说是相当的大了。平均每天100万个需求也就意味着11.5需求/秒。
这是一个很重要的数字。
在单线程的Node.js和多线程的Java EE之间的采用不同的并发模型对最后的结果是没有影响的。
如果想要在更高并发水平里测试Node.js的性能,就必须要考虑到开放文件数量这一问题。nodejs优势在于原型开发快,学习门槛低,简单业务运行效率高于java等后台脚本语言的vm。
劣势同样明显,javascript引擎基于事件的函数回调模型既是优势又是劣势:
nodejs 运行代码可以在命令行中使用命令“ node /path/xxx.js ”来执行
所以我们可以借助 java 的 Runtime 类,可以执行系统本地的命令, 例如:
Linux系统下:Runtime.getRuntime().exec("node /path/xxx.js")
Window系统下:Runtime.getRuntime().exec("cmd /c node /path/xxx.js")
当然推荐使用 Apache-Commons-Exec 工具类,可以屏蔽不同系统命令差异,并且获取结果更简单
工具类使用可以参考此文: 网页链接