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

====关于原生程序与壳中程序的议论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. js判断是电脑访问手机版网站,跳转到电脑版

    function uaredirect(murl,wurl){ //murl为手机网站域名,wurl为电脑版网站域名地址 67 try { 68 if(document.getElementById( ...

  2. java 中间件

    先说中间件:非底层操作系统软件.非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件,统称中间件.常见的有如下几种:服务中间件.集成中间件.数据中间件.消息中间件.安全中间件. 其中 ...

  3. TortoiseGit使用与操作

    使用 Git命令有时候确实不怎么方便,特别是每次都要输入密码,如果配置 SSH 的方式,又实在是很麻烦.(当然,必须使用 Windows 神器才有方便友好的客户端图形界面啦!!!) 1.克隆项目 打开 ...

  4. asp.net中session的原理及应用

    Session简介丶特性 1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Se ...

  5. In App Purchase Statuses

    In App Purchase StatusesThe following are the available states that can be assigned to your in app p ...

  6. Hibernate中in语句ids

    Query query=session.createQuery("from User where id in (:ids)"); query.setParameterList(&q ...

  7. 多大开始玩EV3

    机器人EV3还是初中生才能玩的溜 耐撕爸爸推荐年龄:初中及以上 推荐理由:无需使用计算机就可进行编程,培养孩子的编程.机械.电子.物理等综合能力. 在欧美等国家,乐高机器人融入教学已成为一种普遍现象, ...

  8. ubantu install chrome

    ubantu apt-get installt -y openssh-server sudo apt-get -f install libappindicator1 libindicator7dpkg ...

  9. [RGEOS]支持栅格数据读取和显示

    SharpMap真的很强大,这里通过改造GdalRasterLayer类实现了在RGeos项目中支持栅格图像的读取和显示,同时支持影像的无级缩放. GdalRasterLayer通过读取FWTools ...

  10. oracle恢复备份数据

    sqlplus链接数据库: 1.sqlplus 用户名/密码@IP地址/数据库名称 2.sqlplus 用户名/密码@数据库名称 注:第二种方法要在tnsnames.oRA文件中配置数据库名称 链接断 ...