前言
提起JavaScript,我們也許經常會想到的是,可以用來寫Web頁面嘛,又或者,會想起Node.js 這個服務端環境,搞前后端同構。
那么,除此之外, JavaScript還可以做什么?
JavaScript可以
-
通過electron.js建設跨平台電腦桌面應用
-
通過樹莓派和Node.js,溝通硬件
-
做電視機機頂盒應用,例如借助ntv.js
-
從Hybird到React-Native,編寫跨平台的混合APP,或者原生APP
-
通過Cocos2d-x 框架或白鷺引擎,JS可以開發流行游戲
-
JS進行三維處理: WebGL和three.js
-
做瀏覽器插件開發,例如Chrome插件
-
做IDE插件開發,例如VScode編輯器的插件
-
用JS寫一個操作系統?:NodeOS
-
微軟開發的Node.js 多線程庫 Napa.js,讓JS也能擁抱多線程
(本文僅僅只是簡單介紹,不會介紹具體用法)
S1.通過electron.js建設跨平台電腦桌面應用
如果你可以建一個網站,你就可以建一個桌面應用程序。 Electron 是一個使用 JavaScript, HTML 和 CSS 等 Web 技術創建原生程序的框架,它負責比較難搞的部分,你只需把精力放在你的應用的核心上即可。
-
electron的實現基於Chromium 和 Node.js,並可以調用
-
編碼完畢后,可以一鍵生成Mac,windows,Linux三個不同平台的應用程序
-
electron可以直接調用Node.js的API,以及溝通桌面應用程序的內置模塊
S2.可以通過JS調用樹莓派接口,控制硬件
這里首先要介紹下樹莓派, 樹莓派(Raspberry Pi )是一種只有信用卡大小的微型計算機,別看它小,但它“麻雀雖小,五臟俱全”,計算機有的許多基本功能,樹莓派也都有
學習硬件的同學可能對樹莓派有一些了解。
樹莓派上有大量的GIPO接口,即輸入輸出接口,通過GIPO口,用戶可以和硬件進行數據交互,或控制硬件。
樹莓派允許許多編程語言對GIPO接口進行控制,而JavaScript也是其中之一,也就是說,我們可以通過Node.js環境和樹莓派,從而控制硬件。
這樣的話,也許就能做一個好玩的智能小車玩一玩
參考資料
S3.做電視機機頂盒應用,例如借助ntv.js
(注意:我搜索到的這方面的資料其實非常有限,可能有錯誤和紕漏,還請指正! )
當你打開電視機機頂盒的時候,你看到的可能還是熟悉的HTML和JS,而它們被運行在一個看起來很不一樣的“瀏覽器”上,當然,為了兼容電視機的接口,開發上可能存在很多細節上的不同,也正因如此,有積極熱心的人開發了一個框架,叫ntv.js, 用來兼容不同牌子數字電視的中間件接口。
本人其實對電視機這一塊不是很了解,但是通過閱讀文檔和相關資料,大概總結出以下內容
我們平時觀看的電視軟件,有 東方有線網,電信IPTV網等 不同電視軟件公司, 這些電視軟件呢,又有不同的二級廠商提供給它們“中間件瀏覽器” (終於看到一個我看得懂的詞了! 哭)
-
電信下提供中間件瀏覽器的廠商主要是 iPanel、天柏,中間件規范為“IPTV2.0/3.0規范”
-
東方有線 下提供中間件的廠商主要是 iPanel、SHDV、聯彤
Ntv.js根據這些中間間瀏覽器提供的規范,實現了兼容統一的JavaScript接口,大概是這么個意思
S4.通過Hybird開發混合APP,到后來通過React-Native編寫原生APP
(這件事情其實不用講也可以,因為大家肯定都比較了解了,但還是陳述以下)
Hybird是一種混合開發應用,基於webview實現,通過ios/android下不同的接口,可以實現JavaScript和Java/Object-C代碼的互通。單純使用ios/android原生實現,開發進度和成本受不了,而單純使用h5/js開發,頁面體驗更加受不了。Hybird的目的是實現H5和Naive兩者之間的權衡。
Hybird開發中能看到許多H5的影子,影響其體驗,所以到后來,就出現了React-Native。
React-Native所編寫開發的並不是Hybird那樣的混合應用,它編寫的是真正的原生應用。通過JavaScript和React框架的語法進行開發。
“從使用感受上和用Objective-C或Java編寫的應用相比幾乎是無法區分的。 React Native所使用的基礎UI組件和原生應用完全一致。” —— React-Native官網。
所以相比起Hybird, React-Native在降低開發成本的同時,盡量優化了用戶的體驗。
當然了,RN也有許多缺點,這些就有勞諸位自己去查了,這里不作贅述
其他資料
S5.JS語通過Cocos2d-x 框架或白鷺引擎,可以開發流行游戲
Cocos2d-js
-
Cocos2d-x是一套開源跨平台的游戲開發框架,適配ios/android/html5/Mac/windows多端,但功能側重於原生移動平台
-
提供了圖形渲染、網絡、用戶、音頻、GUI 等功能。
-
核心采用C++編寫,支持JavaScript等語言進行開發
白鷺引擎(Egret)
-
白鷺為開發者提供移動端游戲開發一站式解決方案,並建立包含核心渲染引擎2D/3D、游戲開發工具、創意動畫工具、資源工具、原生打包方案等全球首個HTML5完整工作流
-
Egret中包含多個工具以及項目。而Egret Engine是一個基於TypeScript語言開發的HTML5游戲引擎
S6.JS可以進行三維處理: WebGL和three.js
WebGL (Web圖形庫) 是一種JavaScript API,也屬於HTML5的范疇。它可以用於在任何兼容的Web瀏覽器中呈現交互式3D和2D圖形,而無需使用插件。WebGL通過引入一個與OpenGL ES 2.0緊密相符合的API,可以在HTML5 <canvas> 元素中使用。
而Three.js是基於WebGL封裝的一個框架,能寫出在瀏覽器上流暢運行的3D程序
S7.做瀏覽器插件開發,例如Chrome插件
有的時候,為了輔助開發,你可能會下載Chrome插件,Chrome插件下載完后呢,往往會在Chrome的右上角上有個自己的小圖標,點擊后會彈出菜單,然后通過對菜單進行操作就可以使用相關功能,就像上面那個默認的小圖標的操作一樣=
其實Chrome插件里的菜單的UI和交互也還是HTML和JS實現的,我們完全可以按照規范,定制自己的自定義Chrome插件,具體的做法參考以下
參考資料
S8.做IDE插件開發,例如VScode
我們在使用VScode的時候,我們發現,許多好用的插件大大加速了我們的開發過程,那我們能不能自己寫一個自己的插件呢? 這當然也是可以的,道理和第5點是類似的,這里不多闡述,參考
參考資料
S9.NodeOS: 屬於JS的操作系統
(當然了,JS寫操作系統,相對其他語言來說肯定是被動的,但是我覺得吧,閱讀其源碼有利於前端工程師去了解操作系統的組成和構造,就是一個學習的窗口吧)
NodeOS是一個由Node.js設計的操作系統,發布於2015年。NodeOS的主要特點是:
-
以Linux為內核
-
以Node作為主要的運行時環境
-
以npm作為包管理器
-
用戶自主的獨立文件系統
參考資料
Github地址
S10.微軟開發的Node.js 多線程庫 Napa.js,讓JS也能擁抱多線程
我們都知道,理論上node.js是單線程的,適合處理IO密集型的任務,但也許不適合處理計算密集型的任務。而微軟提供了一個node的多線程的實現:Napa.js,讓JS也能夠涉略計算密集型的任務。
Napa.js的作用
-
支持多線程,擁抱計算密集型的任務
-
支持JavaScript線程上的對象傳輸,對象共享功能
-
提供了內存分配的API
參考資料
總結
這篇文章,說了些東西,也什么都沒說。 但我認為,相對於知道具體怎么做一件事情,知道能做哪些事情,也許也同樣重要。
最后,歡迎大家多多補充
