node-webkit系列(00):什么是node-webkit?


原文地址:My Github Blog

這兩個月來接觸到一個開源項目:node-webkit(項目地址:https://github.com/rogerwang/node-webkit),也做了一點點小小的Code Contribution。打算開始寫一些文章,介紹一下這個開源項目,以及相關的技術細節實現。這是第0篇,就先作為一個簡要的介紹吧。

是什么?

node-webkit是一個基於chromium和node.js實現的應用程序運行時環境,也即是說我們可以通過HTML,CSS,JavaScript實現一個本地化的應用程序。整個項目最具創意的部分就是將node.js整合進來,使得應用開發者能夠直接在DOM里使用node.js模塊,大大增強了Web端JavaScript的能力。該項目是由Intel開源項目中心開發與維護的。
 
架構概覽

目前node-webkit是基於chrome content api實現的,架構圖如下:
   如果熟悉chrome這個瀏覽器架構的人一眼就可以看出來,node-webkit所處的層次與chrome是一致的,換句話說:node-webkit就是一個功能極簡的web瀏覽器,它可以用來加載網頁,執行JS腳本,不論是本地的html文件還是服務器端的文件。
  • 至於什么是chrome content api呢?該模塊的主要功能是采用多進程(包含Browser進程,Render進程以及GPU進程)的模型渲染一個頁面。它包含了幾乎所有的HTML5的特性以及GPU加速渲染。該模塊的目的就是讓想在應用程序中嵌入瀏覽器模塊,但又不想包含全部瀏覽器所有功能的開發者使用的。
  • 為什么要采用chrome content api而不是其他?
    • Content API提供了公開且穩定的接口,且相對於CEF3更加靈活。CEF3也是基於Content API實現的一個可以將渲染網頁的功能嵌入到應用程序之中的框架,雖然其接口經過封裝后使用起來相比比較簡單和方便,但是當需要使用到Content API的很多功能時候,CEF3的接口可能做不到。
    • V8引擎的高效。眾所周知,V8引擎對於Javascript這門語言的重要性,chrome瀏覽器的成功也得益於其執行Javascript的快速!而對於node-webkit,作為一個本地化的應用程序運行環境,javascript代碼執行的效率也是至關重要的,使得應用程序與用戶之間的交互更接近Native Application的流暢性。
    • 前面介紹Content API的時候也提到了,HTML5的特性以及GPU加速,對WebGL等的支持。最新版本在html5test.com測試得到的分數是:460。 

 

如何使用其進行開發?


接下來的這個部分將完成一個簡單的應用程序。主要想體現的是:(1)使用node.js模塊;(2)nw提供的增加本地化應用特性的API;(3)打包並發布你的應用程序。
  • 了解應用程序結構。如下圖所示,每個應用程序都會有一個package.json文件來描述應用程序的相關信息以及初始窗口的屬性等。
          
          示例程序的package.json文件內容如下:(關於各個參數所代表的含義可以在wiki上查找:https://github.com/rogerwang/node-webkit/wiki/Manifest-format)
          
          index.html文件的內容如下,該段代碼主要是使用node.js的fs模塊讀取"E:/"目錄下的文件夾,在每個文件夾的點擊事件中,我們調用node-webkit
          中提供的shell接口在窗口管理器中打開該文件夾。
          
  • 打包應用並發布。具體的打包方法https://github.com/rogerwang/node-webkit/wiki/How-to-package-and-distribute-your-apps。效果圖
        
 
 
扯點node-webkit與chrome packaged app的不同。

  • 更少的開發限制,更自由:在node-webkit中,我們可以發現其sandbox特性已經被關閉。熟悉chrome packaged app或者extension開發的人都知道其對安全性的要求之嚴格,比如CSP的限制。而在node-webkit中,這些限制都不存在,作為一個本地化的應用程序運行時環境,我個人覺得這個是非常重要的一點!
  • 更本地化的接口:node-webkit實現了很多有關窗口操作的API,同時也實現了像菜單欄,系統的托盤圖標支持,系統剪貼板等的API,目前還在不斷的完善中。(我自己也參與到了一部分API的開發中,同時也修復了一些小bug。)
 
最后:目前采用node-webkit開發出來的應用程序列表:https://github.com/rogerwang/node-webkit/wiki/List-of-apps-and-companies-using-node-webkit,據我所知道 LightTable 也是基於node-webkit實現的。
我的Github: @zhchbin


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM