Node.js + TypeScript 開發服務端是什麼樣的體驗

Node.js + TypeScript 開發服務端是什麼樣的體驗,和傳統的服務端語言 Java 有什麼不一樣,我來講幾點個人感覺。npm

Node.js特性

Node.js 和傳統的後端語言 Java 在設計上是有很大區別的。一個是動態語言,一個是靜態語言;一個是單線程模型,一個是多線程模型編程

Node.js 其實不是一門語言,它是 Javascript 的服務器運行時環境, 在它出現以前 Javascript 只能運行在瀏覽器中。在這裏咱們也能夠這麼說:Node.js就是能夠寫服務端的Javascript後端

Node.js是單線程模型,而且是事件驅動和異步I/O(底層是基於c語言實現的libuv庫),這個是它最基本的特色,和它類似的是Nginx。這個特色決定來它適合的場景:I/O密集、少計算的應用瀏覽器

舉個例子:Node.js的線程模型就像是麥當勞店裏面的負責下單的服務員,客人排隊下單,每一個客人下完單就在旁邊等餐,服務員則繼續爲下一個客人下單。同時,期間若是發現餐櫃有客人的快餐準備好了,就端給旁邊等候的客人。
咱們會發現:雖然只有一我的服務,可是整個過程很是高效。服務器

咱們來分析一下緣由:麥當勞的服務員雖然服務的客人很是多,可是花費在每一個客人身上的時間是很是短的,因此總體上很是高效。同時短板也很明顯:若是碰問題顧客,下單很是慢,排隊的客人就會擁堵。多線程

其實還有一個重中之重:麥當勞服務員能如此高效,要依靠後面提供支持的強大的配送和運營系統。閉包

Java則是多線程模型,與Node.js相比,它就是高級餐廳,一對一服務,互不影響,固然成本也是高的。框架

以上這些都是基本運行模型的特性,實際使用仍是要看場景給設計。異步

TypeScript黑魔法

Javascript 是動態語言,用於腳本等場景時,很是靈活高效。可是業務邏輯場景時,規範性和嚴謹性就不足了,主要表如今:變量、參數、返回值的類型不肯定,容易被用錯;模塊之間的調用、對外提供接口時,契約定義不明確。函數式編程

有了TypeScriptES6以後,上述問題就有了明顯改善,同時TypeScript強大的類型系統,讓設計和編寫仍然擁有很是好的靈活性和設計空間。

Java有的接口、泛型、類、繼承和多態,TypeScript包羅萬象,同時TypeScript還有交叉類型、聯合類型、映射類型、類型推導和條件類型等黑魔法。

另外,由於TypeScriptJavascript的超集,因此它也具有函數式編程的能力。函數式編程的抽象能力很是強大,能提供不少有用的特性:好比反作用消除引用透明高階函數閉包模式匹配延遲求值等等。

生態

Node.js + TypeScript被愈來愈多的公司用於核心業務,好比:國外的Paypal、Linkedin、Walmart、Netflix等,國內的阿里、騰訊、網易等。 npm託管的包數量已經超越其餘包託管器。

框架方面,國外的Nest.js,國內的Midway已經有了不少成熟應用案例。Nest.js從編程體驗上,也和Spring很是類似。

更多

Node.js後續會日趨成熟,應用範圍也會愈來愈普遍。固然,短時間內還不會替Java的企業服務主力位置,畢竟能力特性不同,而且生態成熟度、基礎設施成熟度仍是差了不止一個量級的。

Node.js最新版支持了Worker Thread診斷報告Heap Dump,這幾個特性讓它在生產環境的使用愈來愈駕輕就熟,同時還有大幅的速度提高,後續表現可期。

讀書三到-讀書,學習技術
相關文章
相關標籤/搜索