基于Nodejs 的本机应用与Web应用统一编程模型的研究
摘 要
本文介绍了Web应用程序和本机应用程序统一编程模型的思想,介绍了目前流行的Node.js框架,并详细探讨了如何使用Node.js来开发本机命令行应用程序、本机GUI应用程序、Web应用程序等三种应用程序,以及各类的Hello World程序实例。展现了利用该技术实现统一编程模型这一思想的可行性。文章也讨论了Node.js语言的不足并得出Web应用和本机应用统一编程模型是可行的这一结论。
【关键词】Web应用 编程模型 程序设计
1 概述
按照执行前的应用程序镜像文件所在的位置来分,计算机中的各种应用程序可以大致上分为桌面应用程序和Web应用程序两大类。即本机应用程序和远程Web应用程序。随着计算机技术的发展,这两类应用程序交替发展着,在不同的时期有着不同的受到不同的重视。总的来说,两种应用程序到目前为止仍然是同时存在,并根据自身的特点发挥着各自的不同的作用。桌面应用程序根据是否有人机交互界面分为无UI和有UI两种,有UI的应用还可以分为命令行应用和图形界面应用(GUI)。如此众多类型的应用程序,相应的,其开发方式也有所不同。由于本机应用程序可以更自由地使用本机资源,其图形图像处理能力相应较Web应用程序更强。因此,以Windows应用为例,本机应用的UI一般采用与操作系统关系密切的消息/窗口为机制的处理方法,而Web应用由于其自身特性所带来的限制,其UI开发只能采用HTML标记语言和Javascript脚本语言相结合的方式。 然而,人们逐渐发现,由于HTML语言由于其独特的有点--更好的灵活性与简洁的编程方法,再加上样式表的配合,其开发的便捷性与高效性往往要好于传统的GUI的开发方式。 UI元素采用标记语言来编写,其布局由级联样式表来描述,事件处理程序采用Javascript等脚本来编写。以至于本地GUI的开发者常常希望能够有一套类似与HTML的开发方式来进行本机GUI的开发。这样的尝试也被世界上一些知名的IT企业进行着,如Microsoft在2002年发明了一套全新的GUI开发框架-WPF。Adobe的flex, Google 的Android 的开发,QT等都采用了这样一种模式。但是这些产品都没有实现用同一种编程方式来完成对Web应用和本机应用的开发。近两年出现的Node.js框架,使用Javascript做编程语言,用HTML作为UI展现的描述语言,可以达成这一目的。
本文对Node.js做了简单介绍,然后重点讨论了使用Node.js 来进行本地应用的开发和Web应用程序的开发。两个应用程序都以Hello World这种典型的入门应用来展示其细节,着重强调了使用Node.js框架可以开发两种类型的应用程序。
2 Node.js简介
Node.js 是一个开源的基于Chrome 的Javascript运行平台,它可以用来快速构建伸缩性强的网络应用程序。Node.js 使用事件驱动和非阻塞的I/O 模型以确保轻量和高效,特别适用于数据敏感的实时的可用于分布式设备的应用程序。
Node.js 平台中一个重要的概念是模块(Module),模块就是类库,包含一组特定功能的类和它们的属性及方法。从Node.js问世开始,它的模块得到了迅速的扩充。目前,可以使用命令在互联网上轻易获得模块并加入到项目中。NPM 是Node procedure modules 的缩写,是管理和使用模块的命令行工具。在项目中使用模块也很容易,只需要将模块安装上,然后在程序中用下述命令引用即可:
var module = require(‘http’);
然后,module变量即编程了http对象,可以调用其相应的方法。
需要明确的是,要开发GUI应用,仅仅使用Node.js是不够的。Node-Webkit 是另一个开源项目,其目的是在Node.js基础上,使用HTML 和Javascript开发本地应用程序。这就实现了本机应用和Web应用的统一开发平台。
3 使用Node.js开发本机应用程序和Web应用程序
3.1 开发命令行应用程序
安装Node.js之后,开发一个本地的命令行应用程序非常简单: 只需要用文本编辑器输入程序并保存成 .js 文件,然后使用 Node
(1)将下面仅一行代码的程序保存至hello.js
console.log(“Hello World!”);
(2)进入命令行环境
(3)运行 node hello.js
得到如图1运行结果。
3.2 开发GUI本机应用程序
开发GUI本机应用程序,必须使用另外一个平台:Node-webkit,当然,一定要首先安装Node.js。
(1)安装完成Node-webkit之后,使用文本编辑器编辑如下代码,并保存至 hello.html中。
<!DOCTYPE HTML>
The GUI application.
(2)用文本编辑器编辑另一个文件package.json并保存,内容如下:
{
"name":"hello",
"main":"hello.html"
}
(1)进入命令行,并进入程序所在的文件夹。
(2)执行 nw . 。注意,nw后面有一个点,表示当前目录。
执行后的结果如图2。
其中,前面的对话框是鼠标点击 Hello按钮的结果。
4 开发Web应用程序
开发Web程序要复杂一些,这里给出一个最简单的Web版的hello world 的实现。
将下述代码用文本编辑器输入并保存到webhello.js中:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1971, "127.0.0.1");
(1)进入命令行环境,并进入程序所在目录。
(2)运行node webhello.js。
(3)在浏览器中访问地址:http://localhost/。
浏览器中的结果如图3。
这里仅给出了最简单的实现方式,实际的项目会复杂得多,一般需要用到成熟的框架。Node.Js中用的最广泛的Web框架Express,是一个MVC的框架实现。
5 不足
任何事情都有其不足,虽然Node.js很强大,它仍然存在很多不足:
(1)解释型语言,执行效率受限。
(2)源代码不能编译,存在代码隐私问题。
(3)容易写出糟糕的代码,回调的执行流程有时不符合直觉,要经常重构加以避免。
(4)单进程,单线程,只支持单核CPU,不能充分利用多核CPU服务器。
6 结论
从以上示例可以看出,Node.js 带来了编程新的方法,不仅可以用来开发Web应用程序,本地命令行应用程序,也可以用来编制带有GUI的桌面应用程序。而且,GUI桌面与Web应用采用的是同样的编程思路和方法,这大大简化了开发的复杂度,使得GUI桌面应用与Web应用使用统一编程模型变成了现实。当然,这一框架也存在不足,但是我们可以利用它的优势,扬长避短,使用它高效率地进行各类应用项目的开发。
参考文献
[1]黄金国.对Web技术开发桌面应用设计的探讨[J].硅谷,2011.
[2]蒋海云.Web回归桌面的研究与应用——基于Web技术的预付费电能管理系统的构建[C].硕士论文,2008.
[3]骆文亮.Node.js 服务器技术初探[J].无线互联科技,2014.
[4]娄启林.基于Webkit内核的桌面应用程序通用框架的构建与应用[C].硕士论文,2005.
作者单位
吉林动画学院 吉林省吉林市 132000