node-webkit:开发桌面+WEB混合型应用的神器【大漠穷秋】

展望未来

其实这条路老早就有人在走

网上有很多人在争论,未来究竟是原生的应用会胜出,还是WEB APP会胜出,实际上这两者并不是你死我活的关系,而是会互相融合,走向【混合型应用】这样一种形态。

先看几个界面:


 

 

 

大家可以把自己的网络断掉测试以上界面,QQ有时候甚至能爆出JS错误,哈哈。

2011年的时候,我发过一篇文章,《未来五年,桌面应用和WEB走向融合》,当时只是因为看到诸如酷我音乐、腾讯QQ这些桌面应用的开发方式而有 所感悟,对于桌面应用会以什么样的形式和B/S开发模式融合在一起并没有确切的想法。而最近由于打包Ext4.1中文文档的缘故知道了node- webkit,突然有一种恍然大悟的赶脚!

当然,酷我音乐盒和疼讯目前是用什么样的技术实现的小僧不知道其中的细节(人家也不想让外人知道对吧?)。不过,小僧相信,对于屌丝单兵作战来说,疼讯的实现方式肯定会比node-webkit更加复杂,目测个人无法模仿。

跨平台+多终端的神器

毫无疑问,这货会成为2014年的一款神器。因为它具备了以下这些无可比拟的优势:

  1. 人力成本最低:招一个会C++的码农要花多少钱?招一个牛逼哄哄的既会C++还对QT、MFC等了如指掌的码 农又要花多少钱?对比一下,招一个会JS+CSS的呢?如果你是老板,你怎么想?再说了,市面上会C++的码农更多,还是会JS+CSS的码农更多?无需 小僧多言,其中的奥妙您自个儿体会。
  2. APP的体积更小:列位一定还记得当年大明湖畔的疼讯QQ只有十几M的体积,俗话说,岁月是把杀猪刀,在集成了疼讯的各种应用之后,如今的QQ身材早已发福走形。可以想象,如果QQ不使用嵌入浏览器内核的方式,恐怕体积早就超过100M了吧!
  3. 不需要整体更新APP:如果是按照传统的方式开发桌面应用,每次升级的时候都需要用户重新下载整个应用,比如疼讯QQ。但是用node-webkit的这种方式,可以很好地避免这个问题,就像网站一样,网站内容可以不断更新,但是浏览器本身的更新不需要那么频繁。
  4. 跨平台:这一点是由NodeJS来保证的。
  5. 多终端:由于nodejs和chromium本身都是可以在桌面平台和移动平台上运行的,因此用这货来支持多终端开发,保持技术栈的一致性是非常合适的。
  6. 完善的工具链:由于nodejs的兴起,它下面的npm模块数量已经有几十万个;而各种基于chrome内核的定制版浏览器就不用再介绍了。加上传统B/S开发模式下已经具备的完整开发和设计工具,用node-webkit来开发桌面应用已经具备了完善的工具链。

参考资料

关于node-webkit作者的介绍参见这里:

http://www.csdn.net/article/2014-01-08/2818066-Node-Webkit

node-webkit在github上的地址:

https://github.com/rogerwang/node-webkit

由于node-webkit的作者提供的文档都是E文的,为了方便大中华局域网内的一众屌丝,我的好基友@老男孩对文档做了一些翻译,参见这里:

https://github.com/liu78778/node-webkit

CSDN:Node-Webkit项目创建的初衷是什么?

王文睿:2011年的时候,我和同事在讨论如何为Tizen WebRuntime增加扩展API的时候有了这个想法,就是用Node平台来扩展WebRuntime,达到开发本地应用的目的。那时候公司内部有个鼓励创新计划的活动,所以起初我可以用10%的工作时间投入到这个项目中。

CSDN:怎么想到把Node.js和Webkit技术结合在一起的?在这个项目中,Node.js和Webkit各自扮演着怎样的角色?这样结合有哪些优势?

王文睿:那时候已经了解到Node.js平台在Web开发者中很流行,有很多库,可以写本地应用。所以就有了用它扩展WebRuntime的想法。相比自己定义许多API, 这样做开发者几乎不需要学习新的接口,而且方便自己用JS或者C++扩展。

WebKit(现在是Blink)负责HTML5 UI 相关的部分,而Node.js负责本地的API接口,比如文件系统,网络,设备等。

CSDN:Node-Webkit允许采用Web技术开发本地应用的原理是什么?具体是如何实现的?

王文睿:项目的核心思想就是在DOM中跑的代码能够直接调用Node.js中运行的代码,所以核心的部分是把二者跑在同一个线程中。需要把Chromium进程的事件循环和Node.js的事件循环合并在一起,并且把二者的V8 JS引擎环境(Context)合并起来。

CSDN:将HTML/CSS/JS编译为本地代码,其内部过程是什么样的?

王文睿:其实是一个打包的功能,将项目文件打包和Node-Webkit可执行文件放置在一起,就可以直接运行了。Node-Webkit启动的时候会自动加载页面文件。

CSDN:和其他类似方案(比如TideSDK等)相比,Node-Webkit有哪些优势?

王文睿:Node-Webkit的最大特点是集成了Node.js,可以直接调用该平台上的各种库。因为二者之间的函数调用和对象的互相访问都是直接的,所以性能较好。在Node-Webkit出现以后,曾经也出现过其他试图集成Node.js的项目,但是是通过IPC机制,把Node.js跑在独立的进程中,这样需要把函数调用和参数以及结果序列化。其他一些项目则不支持Node.js。

另外Node-Webkit项目处于活跃状态,能够经常更新并和上游项目(Chromium、Node.js)同步。

CSDN:Node-Webkit支持哪些平台?对于在各平台上发布,Node-Webkit提供了哪些本地接口?

王文睿:目前支持Windows,Mac OSX和Linux三种主流桌面平台。本地接口主要是通过Node.js平台上的各种库实现的。在这个平台上有上万个软件包(npmjs.org),开发者可以选择自己需要的。Node-Webkit也提供了一个用于操作窗口、菜单、剪贴板等UI元素的跨平台库。

CSDN:Node-Webkit应用可以直接操作本地OS,在应用的性能和安全方面,Node-Webkit是如何考虑和实现的?

王文睿:Node-Webkit支持的是本地应用,这类应用相比Web应用的安全模型是十分不同的。和最终用户的Outlook、Skype等桌面软件一样,前者通过信任的渠道分发、用户安装即意味着信任该软件、软件可以在系统里面做几乎任何事情;而Web应用的特点是通过互联网直接下载并执行、默认情况下用户不信任该应用、应用进行特定操作前(例如访问摄像头)需要用户授权。

所以尽管同样是基于Web技术,Node-Webkit针对的是完全不同的安全模型。对于开发者的代码,Node-Webkit会放宽很多来自Web应用安全模型的限制,比如跨域访问等。对于当Node-Webkit程序加载不信任的内容时,开发者可以指定使用和Web应用一样的安全措施。

nodeJS一些事儿的更多相关文章

  1. nodejs那些事儿

    http://www.nodeclass.com/ https://cnodejs.org/ 当前版本,v6.11.2 安装node时,牵扯features的选择,在不了解的情况下,我选择了第1个.网 ...

  2. (转)如何制作nodejs,npm “绿色”安装包

      摘自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=8625039&id=3817492       由于公司环境 ...

  3. 浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。

    本文版权桂博客园和作者吴双共同所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/6016055.html 写在前面 大家好我是博客园的蜗牛,博客园的蜗牛就是我 ...

  4. Nodejs创建https服务器(Windows 7)

    为了实验一下WebRTC,搭了个简单的https服务器.说说步骤: 生成OpenSSL证书 使用Nodejs的https模块建立服务器 OpenSSL 证书 我机子Windows 7,安装了Cygwi ...

  5. 前端笔记之NodeJS(三)Express&ejs模板引擎&请求识别

    一.Express框架 1.1基本使用 创建http服务器特别麻烦,express框架解决了这个的问题. Express在node界的地位,就相当于jQuery在DOM界的地位.jQuery的核心就是 ...

  6. postcss那些事儿

    一.sass和postcsssass.less.stylus,三者是css预处理器,使用预编码来处理css,然后编译成线上需要的css.postcss是处理你写好的css,让你的css更健康,对浏览器 ...

  7. Nodejs编译Native Code:使用C++构建工具npm

    Nodejs的很多NPM包需要本地编译,通常是C++写的代码,例如图像处理模块等. 这是如果生产环境没有安装Visual Studio 2015等开发工具,通常会编译失败,发现了一个npm专门干这事儿 ...

  8. 手把手教你做爬虫---基于NodeJs

    前言: 趁着北京今儿天气格外的蓝,我觉得我得干点什么,于是乎,卷起袖子,整理一下最近做爬虫的那些事儿. 目标:爬取北京大学软件与微电子学院的所有新闻,并将内容及图片存储到本地. 设计思路:经过对北京大 ...

  9. nodejs开发解决方案

    1.2. 统一环境 开发环境 nvm nrm nodejs 0.10.38 node-inspector 部署环境 nvm nrm iojs 2.x pm2 nginx 异步流程控制:Promise是 ...

随机推荐

  1. LA 4253 Archery 二分

    题意: x轴上方有若干条平行于x轴的线段 在x轴的区间\([0, \, W]\)内找一点发射一条射线,使其穿过所有线段. 问是否存在这样的点. 分析: 我们二分射线端点的坐标,将线段按纵坐标从小到大排 ...

  2. python面试题解析(python基础篇80题)

    1.   答:出于编程的喜爱,以及行业本身的前瞻性,创造性,优越性,越是综合的科目越能检验一个人的能力,喜欢这种有挑战的事情. 2.   答:跟随老师学习,以及自己查询资料,结合实战,进行输入输出以及 ...

  3. MySQL5.7从入门到精通 (视频教学版) 刘增杰 编著

    第1章 初识MySQL MySQL是一个开放源代码的数据库管理系统(DBMS),它是由MySQL AB公司开发.发布和支持的.MySQL是一个跨平台(Windows.Linux.UNIX.MacOS) ...

  4. python之路 --- python文件模式

    文件模式: 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+&quo ...

  5. xml报错“cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element”

    配置使用dubbo时,xml报错“cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be ...

  6. 九度oj 题目1083:特殊乘法 清华大学2010年机试题目

    题目描述: 写个算法,对2个小于1000000000的输入,求结果. 特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5 输入: 两个小于1000000000的 ...

  7. POJ 1315 Don't Get Rooked

    Don't Get Rooked Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2086   Accepted: 1325 ...

  8. 【bzoj3676】[Apio2014]回文串 回文自动机

    题目描述 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最大出现值. 输入 输入只有一行,为一个只包含小写字母( ...

  9. BeanFactory到WebApplicationContext的结构 以及bean和spring容器的关系

    BeanFactory: Ioc 容器 ApplicationContext: Spring容器 WebApplicationContext需要ServletContext实例,也就是说它必须在拥有W ...

  10. net2:DropDownList的使用

    原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...