1
gzlock 2015-10-15 02:41:23 +08:00 1
node-webkit 已经改名叫 nw.js
并且 nw.js 的 github 页面有列出一部分以 nw.js 制作的软件列表,你可以试用试用参考参考 nw.js 的界面是由 html5+css3 网页组成的,实现出来的效果还是不错的 多线程方面,无论是 webkit 端的 Worker ,还是 node 端的 child_process ,都够用了 而且 node 端还可以使用 npm 的插件 至于怎么响应消息这个不理解你说的是啥,就无法回答了 |
2
oott123 2015-10-15 07:27:54 +08:00 via Android 1
楼上说得比较到位。
消息我理解你说的是 Win32 里的 Message ,用 nw.js 是做不到的。 nw.js 是个跨平台的东西, Message 只在 win32 有… 另外它可能和你熟知的 MFC 几乎完全不同。 |
3
hkongm 2015-10-15 08:47:28 +08:00 1
现在都流行 Electron 了
https://github.com/atom/electron |
4
imskull 2015-10-15 09:04:58 +08:00 1
NW.JS v13 正在做重大改变,现在处于青黄不接的阶段。虽然很佩服它主要是国人开发的,但是目前阶段还是推荐你用 Electron 。
|
5
aivier 2015-10-15 09:14:57 +08:00 1
内部通讯用 IPC ,不过好像略麻烦,个人感觉客户端太肿了点,一个中小型应用套上框架直接变 100M
|
6
ZackYang 2015-10-15 09:36:23 +08:00 1
Electron +1
|
7
xuexixuexi OP @gzlock @oott123 @hkongm @imskull @aivier @ZackYang
我说的响应消息就是比如界面上按下一个按钮,就启动一个线程(线程应该是在 node 端?)完成一项任务,任务进行中更新界面的某个部分(比如进度条),完成后再更新界面的某个部分。这样一个消息响应过程。 当然,这只是举个简单的例子,实际要实现的更复杂。另外用 nw.js 还是 Electron 都是相同的问题,它们之间的差别应该没有用 MFC 和用 node.js 之间的差别大。 我现在就是眼馋网页型的开发能做出好看的界面,而且熟练后效率比用 VC 高,担心的就是最后发现做本地应用有迈不过的坎,另外我对跨平台要求不高,主要还是 Windows 下的应用。 node-webkit 官网公布的那些项目我都浏览了一下,感觉就是界面很炫,但是并没有太多涉及底层的东西,编辑器类和图片类的比较多。 最后问一下, nw.js 或者 Electron 有什么好的开发环境和学习资料吗?好调试吗? |
8
oott123 2015-10-15 10:39:06 +08:00 via Android 1
好调试,开发环境和 Web 基本一样。
但这玩意就不是给你做底层用的,如果你需要做底层开发,你可能需要给 node.js 写 c 扩展。 |
9
kisnows 2015-10-15 11:04:14 +08:00 1
现在都用 Electron
|
10
xymn 2015-10-15 11:38:04 +08:00 1
天啦噜, js 真要一统江湖了啊
|
11
taoche 2015-10-15 12:48:06 +08:00
|
12
sunhh 2015-10-15 20:47:09 +08:00
[南京] 招聘 NodeJs 工程师, 8-20k 不封顶, mail to:
String.fromCharCode(115,117,110,104,104,64,106,117,120,105,109,97,111,46,99,111,109) |
13
imskull 2015-10-15 20:54:52 +08:00 2
@xuexixuexi 你说的消息响应是 JS + HTML 开发的问题,和 nw.js 还是 Electron 无关。
@taoche 这两个差别用起来我感觉不是很大,因为底层都是基于 Chromium + node.js 的,我用了一天时间就把项目从 nw.js 改到 Electron 了。当然如果你用到和操作系统相关的本地调用多的话,他俩 API 接口不太一样,比如打开本地文件的对话框,可能需要多一些的时间移植。为了防止“本地应用有迈不过的坎”,你可能需要学会用 C/C++ 写 node.js 扩展。总的来说用它们都是为了跨平台吧,如果你项目不需要跨平台,咋就别折腾了,毕竟两个语言混到一块总有不爽的地方。 |
14
sagnitude 2015-10-15 21:37:39 +08:00 1
基于这个开发就完全是前端的风格了,不管是干什么,都是 js ,不需要你去管底层,底层是 Chromium 框架接管了。
平时开发就完全是 js 环境了,按了一个按钮发生了什么是不用关心的,浏览器内核接管了,按按钮的处理也是由客户端 javascript 处理的,你如果想要按按钮去触发额外的 c++调用的话可能比较困难,需要自己接入 chromium 或者 nodejs 框架,然后自己编译一遍。 |
15
taoche 2015-10-15 22:10:38 +08:00
@imskull 谢谢你。 因为我们也要开始做 夸系统的桌面应用,所以在选型上像请教一下你们这样有实际经验的开发者。
其实我想问的是 Electron 比 Nwjs 优秀在哪些方面。让很多人往 Electron 上迁移,或者一开始就选择 Electron |
17
imskull 2015-10-16 08:37:26 +08:00 1
@taoche 我不是说 nw.js 功能不好,只不过它现在正在做大的版本改动,我用的时候发现很多文档都是针对老版本的,并且我估计这么大的改动到版本彻底稳定下来还需要一段时间,所以我也就改用 Electron 了。 Electron 的中文问题我没遇到过,准确的说我没做中文版的产品。
|
18
xuexixuexi OP |
19
sagnitude 2015-10-16 10:40:10 +08:00 1
@xuexixuexi 写一个 nodejs 的 c/c++扩展
js 调用 nodejs->nodejs 调用扩展->扩展调用外部 c/c++程序->nodejs 获得返回值->js 获得返回值->用 js 更新页面 最后一步需要 nw.js 或者 Electron 框架(在 html 页面内和 nodejs 交互) 这是我猜的。。我只用过 CEF 。。 |
20
AlphaTr 2015-10-16 19:43:25 +08:00 1
Electron (原来叫 atom shell ,就是 github 出的编辑器 atom 的框架) 和 node-webkit 都用过,个人感觉 Electron 开发的时候结构能清晰一些, node 和 浏览器端的 js 松耦合,和浏览器插件开发比较类似。
|
21
xuexixuexi OP @sagnitude 你说的是一个串行的流程,即: js -> node -> C -> node -> js
我问的是一个并行的过程,即: js -> node -> C (Start) -> node -> js -> 页面显示 开始啦 C (5 %) -> node -> js -> 页面显示 我完成 5% 啦 C (10 %) -> node -> js -> 页面显示 我完成 10% 啦 ..... C (100 %) -> node -> js -> 页面显示 我搞完啦 |
22
xuexixuexi OP v2ex 的回复不好,把我的空格给吃了,我再画一遍:
你说的是一个串行的流程,即: js -> node -> C -> node -> js 我问的是一个并行的过程,即: js -> node -> C (Start) -> node -> js -> 页面显示 开始啦 ____________________________________C (5 %) -> node -> js -> 页面显示 我完成 5% 啦 ____________________________________C (10 %) -> node -> js -> 页面显示 我完成 10% 啦 ____________________________________..... ____________________________________C (100 %) -> node -> js -> 页面显示 我搞完啦 |
23
sagnitude 2015-10-17 11:34:06 +08:00 1
@xuexixuexi 你用回调函数不就是异步的么
大约是如下的吧,参考了 http://www.cnblogs.com/yupeng/p/3469444.html htmlpage.js function requestNodejs() { require('nodejs-c-extension').execute(params, function onTrunkGotCallback(percent) { //update the progress updateHtmlProgress(percent); }, function onFinishCallback(responseData){ //task finished updateHtmlByData(responseData); }); } nodejs-c-extension.cc #include <node.h> using namespace v8; Handle<Value> HandleCall(const Arguments& args) { HandleScope scope; /* * 3 arguments: params, trunkCallback, finishCallback */ Local<Value> params = Local<Value>::Cast(args[0]); Local<Function> trunkCallback = Local<Function>::Cast(args[1]); Local<Function> finishCallback = Local<Function>::Cast(args[2]); const unsigned argc = 1; Local<Value> argv[argc]; //Do some stuff and report the progress for (int i = 0; i < 100; i++) { argv[argc] = { Local<Value>::New(String::New(i) }; trunkCallback->Call(Context::GetCurrent()->Global(), argc, argv); } //finished, replace argv with data got finishCallback->Call(Context::GetCurrent()->Global(), argc, argv); return scope.Close(Undefined()); } /* * Define function exports.execute as HandleCall */ void Init(Handle<Object> exports, Handle<Object> module) { exports->Set(String::NewSymbol("execute"), FunctionTemplate::New(HandleCall)->GetFunction()); } NODE_MODULE(nodejs-c-extension, Init) |
24
sagnitude 2015-10-17 11:34:53 +08:00 1
@xuexixuexi 还是说你是起了 100 个线程,每个完成加 1%?
|
25
xuexixuexi OP |
27
hkongm 2015-11-04 08:40:16 +08:00
@SCaffrey Electron 没具体用过, NW 倒是用过, win 下有一堆文件需要带着。。。 Mac 下无所谓了,实际上看到的就是个图标
估计 Electron 和 NW 差不多吧 |
28
SCaffrey 2015-11-04 16:32:58 +08:00
@hkongm 谢谢!最后用了现成的 electron-packager 搞定的...在 repo 里开 issue 问人家说不支持打包成二进制 QAQ
|
29
yangzh 2015-11-22 18:51:00 +08:00 via iPhone
@SCaffrey nw 和 electron 原生不支持打包成为一个大 exe 。
不过可以看看 http://enigmaprotector.com/en/aboutvb.html 这是一个第三方工具,可以把程序其余的依赖文件塞进一个很大的 exe 文件里。 |
30
SCaffrey 2015-11-22 18:54:55 +08:00
@yangzh 谢谢您!我最后选择了 electron-packager https://www.npmjs.com/package/electron-packager
|
31
hkongm 2015-12-24 14:38:36 +08:00
前端工程师的话,如果浏览器端已经开发完成,打包过程大概 1 个小时( node 环境已有已熟悉, nodewebkit 从零开始)
|