首發:我的博客,更新&糾錯&回覆javascript
====關於原生程序與殼中程序的議論begin====css
在全部用戶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====html
總之:
上面說得有點囉嗦,總之node-webkit提供了足夠的可能性,讓熟練的前端工做者足以開發出本身想要的桌面程序。
上一個我的的練習程序:一個最簡陋的文本編輯器,代碼在這裏,使用方法爲下載源碼後放到node-webkit的文件夾裏,運行nw.exe便可,nw.exe會找到package.json,按照其中的定義展現程序。程序界面以下:前端
參考資料:
Node.js的API,介紹了官方模塊的用法。
node-webkit的github地址
node-webkit的中文參考資料html5
Node.js入門書籍:
《Node.js開發指南》
《Node.js實戰》java