Node.js這麼火,為什麼還要選ASP.NET?

Node。js可能是業界最流行的後端技術。Twitter、LinkedIn、Uber等知名國際企業都選擇使用Node。js作為他們的主要伺服器端技術,或者將其與其他語言相結合。Node。js擁有很多相關的優勢,比如它有一個巨大的社群,還有一個偉大的生態系統,特別是在前端和後端都能夠使用相同的開發語言等等。

由於C#和。NET是我的主要程式語言;所以,我想透過本文的探討來試圖弄清楚是否我在使用的是一種被低估的技術,以及它的市場趨勢是否看好。其實,ASP。NET(。NET伺服器框架)本身就很流行。自從。NET執行時成為開源和跨平臺平臺以來,它一直在改進,並越來越受歡迎,但目前看來,Node。js的地位依舊領先。

那麼,為什麼我依舊建議初創公司最好考慮選擇。NET而不是Node呢?以下是我的7個理由。

Node.js這麼火,為什麼還要選ASP.NET?

1、。NET具有更好的效能

效能問題是Node。js技術的最大軟肋。我倒不是說Node。js的速度慢得令人難以忍受;但是,當你開發的系統需要後端支援計算功能或者具備高吞吐量的請求時,那麼Node。js並不是一個好的選擇方案。主要原因在於:它的執行時是單執行緒的,這對於當下允許並行執行許多操作的多核處理器來說,絕對是一個巨大的浪費。techpower最近的基準測試

結果顯示:Node。js遠遠落後於ASP。NET Core。

誠然,。NET也並不是最快的技術。如果僅僅強調“速度最快”的話,答案很可能要歸屬於極簡主義的Rust語言或C++實現。但在主流Web框架中(不包括Just或may_minihttp這類小眾專案),。NET算是最快的框架之一。主要理由主要存在於三個方面的效能測試優勢:單查詢基準測試、多查詢基準測試和Cookie基準測試。

2、Node。js需要混合和相匹配的語言來實現效能補償

當深入瞭解選擇Node。js的公司的技術堆疊時,你會發現,他們的微服務架構技術方案中幾乎總是存在其他語言和執行時(如Go、Rust、Java和Python)的組合使用。Node。js和JavaScript非常適合只向資料庫、佇列或其他服務傳送查詢的高階REST伺服器。然而,當您需要進行一些計算工作時,比如執行演算法或使用檔案系統時,這樣的技術選型並不好。

相反,C#和。NET執行時速度快,功能多。在大多數使用場景中,您不需要使用像Rust或C++這樣的本地語言來獲得額外的效能優勢。這意味著,您可以節省向專案的技術堆疊新增額外語言的開銷。因此,實際開發中,最好還是努力避免使用另一種新的語言,因為這樣的話你將需要更多的專家和更多的基礎設施,從而導致開發團隊變得不那麼“多才多藝”。

3、C#是一種令人驚歎的語言

很難說哪種語言更好,因為每個人都有自己的偏好和偏見。但是,我認為C#是目前業界最強大、最高效、最流行的語言之一,理由如下:

它是一種高階的C風格面嚮物件語言。對於大多數開發人員來說,它將是熟悉的,並且富有成效的。

儘管它是一種高階語言,但在效能最佳化需要時,它允許對敏感程式碼進行低階控制。如果您願意,您可以使用指標和直接訪問記憶體訪問。

它具有豐富的函式語言功能,如LINQ和擴充套件方法。

它是型別安全的,比TypeScript要安全得多;但在需要時,它還具有JavaScript等動態功能。

它有大量的技術文件和龐大的社群支援;儘管沒有JavaScript開發領域那麼大,但仍然非常大。

業界成功使用C#開發專案的幾個案例是Bing搜尋引擎、StackOverflow和Unity(最流行的遊戲引擎),它們都允許您使用C#作為程式語言。

4、最好用的工具

我認為C#提供了世界上最好用的工具,包括最好的IDE、最好的除錯經驗和最好的評測器等等。

JavaScript或TypeScript並不具備C#的強型別特性;因此,高階程式碼導航和重構是不可能的。在許多情況下,知道誰實現了你的介面或誰引用了你的類的函式是不可行的。經常的情形是,Node。js必須依賴於基本的文字搜尋;而在C#整合開發環境中,您可以透過快捷鍵導航到相應的用法和實現原始碼。強大的重構功能也是如此,比如實現介面、新增引數以及提取函式或類。如果您已經使用Visual Studio或Rider很長時間了,那麼您可能會在遷移到Visual Studio程式碼時體驗到真正的生產力損失。

就除錯問題而言,Chrome開發工具偵錯程式或VSCode偵錯程式與Visual Studio的經驗並不相近。但是,在除錯Node。js程式時,我就成為一個相當普通的使用者。

5、更容易的內建開發迴圈

在Node。js中,您可以使用Babel、Webpack、ESLint等工具以任何方式構建開發環境管道。您可以使用不同的JavaScript版本,將所有內容打包到單個檔案或多個切片中,縮小它們,等等。這是一個可高度定製的過程。管道的每個部分都有許多不同的工具。例如,Webpack可以被Rollup或Parcel替換,ESLint可以被更改為prettier工具,等等。存在數百萬種不同的方法來構建JavaScript專案,每個公司似乎都有自己獨特的設定,而且需要大量開發和維護的設定。儘管我不得不承認,如今存在很多現代方法,比如Vite,可以讓一個豐富的開發環境快速啟動並執行。

。NET中的情況正好相反。在構建設定中沒有太多技術選擇,因為您將始終使用微軟公司的MSBuild、。NET SDK和Visual Studio。當然,您可以進行一些定製,但這與JavaScript專案完全不同。要做的唯一“選擇”是使用哪個。NET版本,哪個版本總是最新的,以及要構建的專案型別:ASP。NET Web API或ASP。NET MVC,這應該是一個明顯的選擇,具體則取決於您希望如何開發前端。

因此,可以考慮Node。js的靈活性,這是它的一種優勢,也是合理的。但是,你也可以將其視為一種負擔。在。NET開發中,除了在非常大的專案或特殊的情況下,開發環境需要做的事情並不多。Visual Studio和MSBuild可以正常工作,它們可以處理大型企業應用程式和伺服器,而不會出現太多問題。

6、穩定的生態系統

正如剛才提到的,Node。js和JavaScript有一個非常豐富的生態系統,這包括開發工具、庫、文件等。不管是好是壞,這個生態系統大多是開源的,由社群開發。在許多情況下,公司所依賴的庫是由一個小團隊甚至一個人開發的。如果這個人決定停止專案工作,公司就損失大了。當然,其他人可以接手這項工作,或者你可以自己動手,新增你需要的任何缺失的部分;但是,這對於一家快速建立第一個產品的初創公司來說是一個很大的麻煩。當然,這並不是小型開源專案的唯一問題。當他們引入錯誤或安全漏洞時會發生什麼?如果他們的愛好專案對你的創業公司造成了損害,維護人員並不完全負責,是嗎?

我並不是說大公司的產品中沒有錯誤。據我所知,他們的產品中可能會有更多。但你可以投訴,開罰單,甚至起訴微軟。你可以肯定,一個專案將在很長一段時間內繼續得到支援,如果它停止得到支援,你會提前幾年收到通知。就穩定性和可靠性而言,我打賭Microsoft。NET執行時及其所有工具都比大多數Node。js開源庫測試得更好!這可能會降低產品版本釋出的速度,但卻會帶來更穩定的產品。

話雖如此,仍存在許多維護良好的開源庫,它們有許多貢獻者,並得到了大公司的大力支援。

7、合規性、隱私和安全性

這一論點主要基於常識,而不是基於我的經驗或專業知識。如果我做了一些錯誤的假設,請讓我提前道歉。

在開始創業時,您可能認為法規遵從性問題並不重要或特別有趣。我想創始人會專注於製作產品、招聘、籌集資金和選擇公司的標誌。但是,這僅是產品最重要的方面之一。在某些行業,如醫療保健、軍事和政府部門,至關重要的是,你的應用程式必須是安全的,能夠保護個人資訊,並符合HIPAA和ISO 27001等標準。

再讓我們回到對技術的選擇話題:

如果您選擇了Node。js或者是ASP。NET,那麼合規性/隱私性/安全性是否重要?

在這兩種技術上執行的應用程式是否符合標準,是否安全,是否受隱私保護?

但當你選擇Node。js時,還可以選擇使用開源庫和生態系統。某些開源庫存在安全或隱私漏洞的可能性更大。而且,這些專案很有可能不遵守微軟為自己制定的瘋狂標準。即使你正在採取最好的措施來保護你的應用程式,例如進行滲透測試等等,你也無法與微軟的聲譽競爭。如果一個G端客戶知道你全部都在使用微軟的技術堆疊,他們就更有可能信任你的應用。

8、小結

至此,我希望我至少說服了你認可我上述提出的部分觀點。不過,很多論據都是帶有主觀性的,比如誰有更好的工具,或者哪種程式語言更好。其實,我會第一個承認Node。js比ASP。NET更好一些。對此你有什麼看法呢?歡迎在文後留下你的評論。