首发:个人博客,更新&纠错&回复

====关于原生程序与壳中程序的议论begin====

在所有用户windows机器上都能直接跑的程序,如果不采用微软系的语言,如VB,C++,C#等,而采用Java,Python,Ruby之类的语言开发,最终的结果在体积上一定远大于微软系语言开发的程序,因为这些语言不具备直接生成exe执行文件的能力,都需要额外的中间层来提供环境,而这个中间层的体积往往不小。
最直观的道理就是,java程序只能在装有java虚拟机的机器上跑,如果你想突破这个限制,让它跑在任何一台机器上,那你必须把虚拟机打包在你的程序里一并提供给用户,最终还是改变不了要跑在虚拟机里的命运,唯一的好处是不用客户手动安装虚拟机了,其他语言同理。
这就是原生程序与加壳程序的区别,原生程序的优点在针对特定平台编译,体积小,速度快,而加壳程序因为必须把壳引入到用户机器中,体积臃肿,加壳程序的优点在可以用程序员自己舒服的语言开发,而且甚至可以跨平台开发——发布的时候针对不同的平台加不同的壳就OK了,java的招牌式口号“一次编写,处处运行”前提正是其程序都是壳中程序,不同的壳(即java虚拟机)向上暴露的接口都是一样的,这样壳中程序可以在安稳的环境中编写。
在微软系的语言中.NET是个有意思的角色,严格讲它编写出的程序也是壳中程序,但这个壳是微软的“官方壳”,不管你用到的第一个使用.net壳的windows程序是什么,微软会引导你下载安装这个壳,之后一劳永逸,你再使用其他的壳中程序就不用再下载了。在这个角度上看,.net官方壳几乎与windows操作系统融为一体了,共同构成了应用程序的下层基础,把应用程序看做直接基于平台的原生程序也无妨了。
至于java开发的桌面程序,由于始终是小众奇葩的存在,而且不是微软官方支持的,如果你只发布官方程序,对非程序员的用户来说,下载安装jdk和配置环境变量实在是过于复杂,所以为了方便用户安装,你只得把虚拟机一并打包进发布的程序中,这造成程序的体积大大加大了,增加服务器磁盘占用、下载流量、下载时间、用户磁盘占用——总之是缺点多多。其他语言如python、ruby等桌面程序的开发同理。
在手机开发中,用html5开发的手机应用可以一次开发、两次打包,分别成为安卓和苹果的APP,与之前提到的所有问题最大的不同在于,html5的界面程序可以不存放于用户本地,而存放于远端的服务器上,这带来的好处是减少文件大小和方便版本升级,而且web前端的人才实力和数量决定了用web技术做程序界面是个好主意。唯一的问题是,由于壳的存在,这种中转的方式必然导致程序性能不如原生程序,这个问题是一切壳中程序共有的,甚至.net也无法避免。只是,相对于壳带来的当然损失,程序员实力问题导致的性能差异是更主要的原因,在不是“只要用壳就一定不行”的情况下,程序员的架构能力和编码能力才是程序性能好坏的最大决定因素,总结说就是壳中程序的性能输在了起跑线上,但还有机会治疗。
这两天学习的node-webkit技术,是使用javascript语言编写桌面程序的技术,容易想到想达成这个目的,必须解决两个问题,一是javascript在操作系统中的运行环境,二是javascript在操作系统中显示图形界面的解决方案。第一个问题的解决者是Node.js,而第二个问题的解决者是webkit,因此这项技术理所当然地命名为了node-webkit。
正如用html5做安卓苹果应用、用nodejs做服务器端开发一样,这项技术的出现带来的好处,一是让前端程序员有了做windows界面程序的可能性,二是让前端美工有了做windows界面的可能性。我个人感觉最有趣的一点,由于这个技术栈中没有任何技术需要编译,html和css是声明式语言,而javascript是解释型语言,这意味着可以随时在文件夹中点开源码,改变我的exe程序的内容。
可以把node-webkit提供的文件们看做一个exe程序模板,模板中镂空的部分即“程序界面和逻辑”需要程序员根据业务来填空,控制流还是在node-webkit手里,它在某些时候看看你的“填空”,说“哦原来你要这样啊可以”,然后执行下去。这是典型的“框架”的工作,它从你手里抢来了控制权,控制反转,你沦为编写局部代码的凡人。一切壳的职责都是如此,它给了你灵活自由的DIY发挥空间,但你只能在这个空间内施展才华。
你施展才华的方式,就是编写html文件和javascript代码。由于nodejs的存在,你除了编写浏览器脚本还能编写与操作系统和网络相关的脚本,以及你需要的一切。Node.js在服务端已经无所不能,你的桌面程序也无所不能,服务端能引用的库,你当然都可以使用。而你在B/S中能实现的前端样式和布局,由于webkit的存在,也都能在你的桌面程序中大展身手。
====关于原生程序与壳中程序的议论end====

总之:
上面说得有点啰嗦,总之node-webkit提供了足够的可能性,让熟练的前端工作者足以开发出自己想要的桌面程序。
上一个个人的练习程序:一个最简陋的文本编辑器,代码在这里,使用方法为下载源码后放到node-webkit的文件夹里,运行nw.exe即可,nw.exe会找到package.json,按照其中的定义展示程序。程序界面如下:

参考资料:
Node.js的API,介绍了官方模块的用法。
node-webkit的github地址
node-webkit的中文参考资料

Node.js入门书籍:
《Node.js开发指南》
《Node.js实战》

长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432

使用node-webkit开发exe窗口程序的更多相关文章

  1. uni-app开发的应用(小程序,app,web等),使用Node+Koa2开发的后端程序接收上传文件的方法

    uni-app使用使用Node+Koa2开发的后端程序接收上传的文件 通过gitbook浏览此随笔 通过其它客户端上传(h5,小程序等),接收方法一致 使用koa接收时,我们需安装一个中间件koa-b ...

  2. Node webkit启动最大化窗口

    <!DOCTYPE html> <html> <head>     </head> <body>     <p style=" ...

  3. Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX

    一.窗口类结构体简介 窗口类结构体包含了窗口的各种参数信息.比如:窗口的图标.菜单栏.背景颜色.窗口的消息处理等等. 窗口类结构体有两个:WNDCLASS(早期版本) 和 WNDCLASSEX(新版本 ...

  4. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  5. heX:用HTML5和Node.JS开发桌面应用

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. (转)heX——基于 HTML5 和 Node.JS 开发桌面应用

    本文转载自:http://techblog.youdao.com/?p=685 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.是你开发 ...

  7. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  8. Electron开发跨平台桌面程序入门教程

    最近一直在学习 Electron 开发桌面应用程序,在尝试了 java swing 和 FXjava 后,感叹还是 Electron 开发桌面应用上手最快.我会在这一篇文章中实现一个HelloWord ...

  9. 【转】使用NetBeans和Eclipse开发PHP应用程序

    [51CTO独家特稿]各位用户如果单独看NetBeans和Eclipse的市场占有率,你可能会认为使用其中任何一种IDE开发PHP应用程序都没有 问题,例如: 1.NetBeans:一款开源的集成开发 ...

随机推荐

  1. Selenium2学习-023-WebUI自动化实战实例-021-获取浏览器显示区域大小,通过 WebDriver 截图功能

    之前的博文 020-JavaScript 在 Selenium 自动化中的应用实例之二(获取浏览器显示区域大小) 简述了通过 JavaScript 获取浏览器显示区域大小,此文将简述另一种获取浏览器显 ...

  2. LeetCode Factorial Trailing Zeroes

    原题链接在这里:https://leetcode.com/problems/factorial-trailing-zeroes/ 求factorial后结尾有多少个0,就是求有多少个2和5的配对. 但 ...

  3. Docker镜像的创建、存出、载入

    创建镜像的方法有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建,本博文讲解前两种. 基于已有镜像的容器创建 该方法是使用docker commit命令,其命令格式为:   ...

  4. VMware Workstation linux 问题

    1.can't find  /mnt/cdrom in etc/fstab or /etc/mtab mkdir /mnt/cdrom 2.80端口被占 一.查看哪些端口被打开 netstat -an ...

  5. sql语句like多个条件的写法实例

    这篇文章介绍了sql语句like多个条件的写法实例,有需要的朋友可以参考一下 //   表A  no name 1   lu,li,zhang  2   zhou,wei,liu  3   li,fa ...

  6. nginx + keepalived 双机热备

    序 双机热备是指两台机器都在运行,但并非两台机器同时在提供服务. 当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,且切换的时间非常短. keepalived的工作原理是VRRP—— ...

  7. How do you evaluate music?

    I’ve seen several “can’t stand” or “best of” threads in regard to music, and based on some related d ...

  8. jquery实现input输入框实时输入触发事件代码

    <input id="productName" name="productName" class="wid10" type=" ...

  9. SQLSERVER:sqlserver2008r2安装好后,自动提示功能不可以使用

    刚安装好的sqlserver2008r2x64,写一些sql时,自动提示功能失效了. 解决排查一: 找到tools->options->Text Editor->Transact-S ...

  10. JavaScript----插入视频

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...