過去一年間,Node.js吸引了越來越多的目光;同時,一個叫做node-webkit的項目在Github上引起了越來越多的關注。在啟動一年之后,node-webkit從一個默默無聞的項目成功躋身GitHub C++項目關注度排行榜前五強。在2012年的滬JS大會上,該項目的開發者之一趙成做過一個分享,對node-webkit是什么進行了一個介紹。2013年4月,臺灣工程師錢逢祥在臺灣的開源大會上也介紹了這個項目:這年頭,你只需要懂node-webkit!另一方面,英文JavaScript圈子的知名社區JSJ也對node-webkit進行過討論。最近吸引了很多開發者的新興IDE工具Light Table,也是基于node-webkit開發的。
node-webkit是個什么樣的項目,引起這樣多的關注?近日,InfoQ編輯見到了這個項目的發起人Rogerwang,向他了解了一些有關這個項目的情況。
node-webkit項目發起人簡介:Rogerwang,真名王文睿,英特爾開放源碼技術中心(OTC)的軟件架構師。最開始,node-webkit是一個業余項目。現在,Roger可以在工作時間進行這個項目的開發,而且有一個實習生跟他一起工作。
InfoQ:根據我的理解,node-webkit是通過Node.js和WebKit技術的融合,提供一個跨Windows、Linux、OS X平臺下的客戶端應用開發的底層框架,跟移動終端上的PhoneGap等項目的原理類似,不知這么理解是不是正確?你自己如何介紹node-webkit的目的和實現原理?
王文睿:是的。通過Node.js和WebKit技術的融合,開發者可以用HTML5技術編寫UI,同時又能利用Node.js平臺上眾多library訪問本地OS的能力,最終達到用Web技術就可以編寫桌面應用的目的。
實現上是基于Chromium項目的Content Layer構建(Chromium Browser也同樣基于Content Layer);實現上的特點是把Node.js的消息循環(libuv)和Chromium Renderer進程的消息循環合并到一起,因為這樣才能從DOM(HTML)中直接調用Node.js提供的函數;把Node.js使用的V8引擎和Chromium的V8引擎合并,使得Node.js的Javascript和DOM里面的Javascript可以互相訪問;另外因為是支持本地應用,所以安全模型和Web程序有很大不同:node-webkit程序可以做web應用不允許做的很多事情,除了通過node.js訪問本地OS以外,還可以進行跨域訪問等操作。
InfoQ:你是怎樣開始了解WebKit和Node.js的?怎么就想到將這兩個技術結合到一起,提供一個這樣的方案呢?
王文睿:平時的工作和WebKit有關,所以平時也會去了解Web領域相關的技術,所以大概了解Node.js項目的狀況。2011年底的一天,我們同事在工作會議上討論如何為WebKit或者web runtime添加擴展接口API的時候有了這個想法。
InfoQ:你自己如何評價目前項目的完成狀態?當前的node-webkit適合開發哪些需求的客戶端應用,不適合開發哪些需求的客戶端應用?
王文睿:現在已經達到一定的成熟度。有不少公司和各種項目基于node-webkit開發。node-webkit適合了解Web技術(JS/HTML/CSS)的開發者開發各種桌面應用,而且直接支持3種主流桌面平臺。
目前它還不支持移動平臺。另外也不支持嵌入到其他C++軟件中。
InfoQ:node-webkit目前在Github上已經有將近4000個star,360個fork。這個項目目前來自你們團隊和外部團隊的貢獻情況如何?
王文睿:絕大部分代碼來自于內部的兩個開發者。另一位開發者(Zhao Cheng)在這里實習的半年多期間主要的貢獻是開發native UI支持,以及將架構從CEF遷移到Content Layer。
我們一直歡迎和鼓勵外部貢獻代碼。目前來自外部的代碼比較少,原因可能是我們的用戶大部分是Web開發者,而我們的代碼卻是C/C++編寫的。
InfoQ:你對node-webkit的下一步計劃是什么?是否有計劃根據這個項目打造一些更加易用的產品?
王文睿:目前的重點主要是進一步增強功能(我們的用戶在GitHub的issue上報了很多的feature request)和壯大社區(希望有更多的開發人員加入我們的開源項目)。node-webkit平臺本身非常靈活,我們歡迎大家利用node-webkit提供多樣的產品和服務。