自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

譯文 精選
開發(fā) 前端
為什么我依舊建議初創(chuàng)公司最好考慮選擇.NET而不是Node呢?以下是我的7個(gè)理由。

譯者 | 朱先忠

策劃 | 伊桑

Node.js可能是業(yè)界最流行的后端技術(shù)。Twitter、LinkedIn、Uber等知名國際企業(yè)都選擇使用Node.js作為他們的主要服務(wù)器端技術(shù),或者將其與其他語言相結(jié)合。Node.js擁有很多相關(guān)的優(yōu)勢,比如它有一個(gè)巨大的社區(qū),還有一個(gè)偉大的生態(tài)系統(tǒng),特別是在前端和后端都能夠使用相同的開發(fā)語言等等。

由于C#和.NET是我的主要編程語言;所以,我想通過本文的探討來試圖弄清楚是否我在使用的是一種被低估的技術(shù),以及它的市場趨勢是否看好。其實(shí),ASP.NET(.NET服務(wù)器框架)本身就很流行。自從.NET運(yùn)行時(shí)成為開源和跨平臺平臺以來,它一直在改進(jìn),并越來越受歡迎,但目前看來,Node.js的地位依舊領(lǐng)先。

那么,為什么我依舊建議初創(chuàng)公司最好考慮選擇.NET而不是Node呢?以下是我的7個(gè)理由。

1、.NET具有更好的性能

性能問題是Node.js技術(shù)的最大軟肋。我倒不是說Node.js的速度慢得令人難以忍受;但是,當(dāng)你開發(fā)的系統(tǒng)需要后端支持計(jì)算功能或者具備高吞吐量的請求時(shí),那么Node.js并不是一個(gè)好的選擇方案。主要原因在于:它的運(yùn)行時(shí)是單線程的,這對于當(dāng)下允許并行執(zhí)行許多操作的多核處理器來說,絕對是一個(gè)巨大的浪費(fèi)。techpower最近的基準(zhǔn)測試

結(jié)果顯示:Node.js遠(yuǎn)遠(yuǎn)落后于ASP.NET Core。

誠然,.NET也并不是最快的技術(shù)。如果僅僅強(qiáng)調(diào)“速度最快”的話,答案很可能要?dú)w屬于極簡主義的Rust語言或C++實(shí)現(xiàn)。但在主流Web框架中(不包括Just或may_minihttp這類小眾項(xiàng)目),.NET算是最快的框架之一。主要理由主要存在于三個(gè)方面的性能測試優(yōu)勢:單查詢基準(zhǔn)測試、多查詢基準(zhǔn)測試和Cookie基準(zhǔn)測試。

2、Node.js需要混合和相匹配的語言來實(shí)現(xiàn)性能補(bǔ)償

當(dāng)深入了解選擇Node.js的公司的技術(shù)堆棧時(shí),你會發(fā)現(xiàn),他們的微服務(wù)架構(gòu)技術(shù)方案中幾乎總是存在其他語言和運(yùn)行時(shí)(如Go、Rust、Java和Python)的組合使用。Node.js和JavaScript非常適合只向數(shù)據(jù)庫、隊(duì)列或其他服務(wù)發(fā)送查詢的高級REST服務(wù)器。然而,當(dāng)您需要進(jìn)行一些計(jì)算工作時(shí),比如運(yùn)行算法或使用文件系統(tǒng)時(shí),這樣的技術(shù)選型并不好。

相反,C#和.NET運(yùn)行時(shí)速度快,功能多。在大多數(shù)使用場景中,您不需要使用像Rust或C++這樣的本地語言來獲得額外的性能優(yōu)勢。這意味著,您可以節(jié)省向項(xiàng)目的技術(shù)堆棧添加額外語言的開銷。因此,實(shí)際開發(fā)中,最好還是努力避免使用另一種新的語言,因?yàn)檫@樣的話你將需要更多的專家和更多的基礎(chǔ)設(shè)施,從而導(dǎo)致開發(fā)團(tuán)隊(duì)變得不那么“多才多藝”。

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

很難說哪種語言更好,因?yàn)槊總€(gè)人都有自己的偏好和偏見。但是,我認(rèn)為C#是目前業(yè)界最強(qiáng)大、最高效、最流行的語言之一,理由如下:

它是一種高級的C風(fēng)格面向?qū)ο笳Z言。對于大多數(shù)開發(fā)人員來說,它將是熟悉的,并且富有成效的。

盡管它是一種高級語言,但在性能優(yōu)化需要時(shí),它允許對敏感代碼進(jìn)行低級控制。如果您愿意,您可以使用指針和直接訪問內(nèi)存訪問。

它具有豐富的函數(shù)語言功能,如LINQ和擴(kuò)展方法。

它是類型安全的,比TypeScript要安全得多;但在需要時(shí),它還具有JavaScript等動態(tài)功能。

它有大量的技術(shù)文檔和龐大的社區(qū)支持;盡管沒有JavaScript開發(fā)領(lǐng)域那么大,但仍然非常大。

業(yè)界成功使用C#開發(fā)項(xiàng)目的幾個(gè)案例是Bing搜索引擎、StackOverflow和Unity(最流行的游戲引擎),它們都允許您使用C#作為編程語言。

4、最好用的工具

我認(rèn)為C#提供了世界上最好用的工具,包括最好的IDE、最好的調(diào)試經(jīng)驗(yàn)和最好的評測器等等。

JavaScript或TypeScript并不具備C#的強(qiáng)類型特性;因此,高級代碼導(dǎo)航和重構(gòu)是不可能的。在許多情況下,知道誰實(shí)現(xiàn)了你的接口或誰引用了你的類的函數(shù)是不可行的。經(jīng)常的情形是,Node.js必須依賴于基本的文本搜索;而在C#集成開發(fā)環(huán)境中,您可以通過快捷鍵導(dǎo)航到相應(yīng)的用法和實(shí)現(xiàn)源碼。強(qiáng)大的重構(gòu)功能也是如此,比如實(shí)現(xiàn)接口、添加參數(shù)以及提取函數(shù)或類。如果您已經(jīng)使用Visual Studio或Rider很長時(shí)間了,那么您可能會在遷移到Visual Studio代碼時(shí)體驗(yàn)到真正的生產(chǎn)力損失。

就調(diào)試問題而言,Chrome開發(fā)工具調(diào)試器或VSCode調(diào)試器與Visual Studio的經(jīng)驗(yàn)并不相近。但是,在調(diào)試Node.js程序時(shí),我就成為一個(gè)相當(dāng)普通的用戶。

5、更容易的內(nèi)置開發(fā)循環(huán)

在Node.js中,您可以使用Babel、Webpack、ESLint等工具以任何方式構(gòu)建開發(fā)環(huán)境管道。您可以使用不同的JavaScript版本,將所有內(nèi)容打包到單個(gè)文件或多個(gè)切片中,縮小它們,等等。這是一個(gè)可高度定制的過程。管道的每個(gè)部分都有許多不同的工具。例如,Webpack可以被Rollup或Parcel替換,ESLint可以被更改為prettier工具,等等。存在數(shù)百萬種不同的方法來構(gòu)建JavaScript項(xiàng)目,每個(gè)公司似乎都有自己獨(dú)特的設(shè)置,而且需要大量開發(fā)和維護(hù)的設(shè)置。盡管我不得不承認(rèn),如今存在很多現(xiàn)代方法,比如Vite,可以讓一個(gè)豐富的開發(fā)環(huán)境快速啟動并運(yùn)行。

.NET中的情況正好相反。在構(gòu)建設(shè)置中沒有太多技術(shù)選擇,因?yàn)槟鷮⑹冀K使用微軟公司的MSBuild、.NET SDK和Visual Studio。當(dāng)然,您可以進(jìn)行一些定制,但這與JavaScript項(xiàng)目完全不同。要做的唯一“選擇”是使用哪個(gè).NET版本,哪個(gè)版本總是最新的,以及要構(gòu)建的項(xiàng)目類型:ASP.NET Web API或ASP.NET MVC,這應(yīng)該是一個(gè)明顯的選擇,具體則取決于您希望如何開發(fā)前端。

因此,可以考慮Node.js的靈活性,這是它的一種優(yōu)勢,也是合理的。但是,你也可以將其視為一種負(fù)擔(dān)。在.NET開發(fā)中,除了在非常大的項(xiàng)目或特殊的情況下,開發(fā)環(huán)境需要做的事情并不多。Visual Studio和MSBuild可以正常工作,它們可以處理大型企業(yè)應(yīng)用程序和服務(wù)器,而不會出現(xiàn)太多問題。

6、穩(wěn)定的生態(tài)系統(tǒng)

正如剛才提到的,Node.js和JavaScript有一個(gè)非常豐富的生態(tài)系統(tǒng),這包括開發(fā)工具、庫、文檔等。不管是好是壞,這個(gè)生態(tài)系統(tǒng)大多是開源的,由社區(qū)開發(fā)。在許多情況下,公司所依賴的庫是由一個(gè)小團(tuán)隊(duì)甚至一個(gè)人開發(fā)的。如果這個(gè)人決定停止項(xiàng)目工作,公司就損失大了。當(dāng)然,其他人可以接手這項(xiàng)工作,或者你可以自己動手,添加你需要的任何缺失的部分;但是,這對于一家快速創(chuàng)建第一個(gè)產(chǎn)品的初創(chuàng)公司來說是一個(gè)很大的麻煩。當(dāng)然,這并不是小型開源項(xiàng)目的唯一問題。當(dāng)他們引入錯(cuò)誤或安全漏洞時(shí)會發(fā)生什么?如果他們的愛好項(xiàng)目對你的創(chuàng)業(yè)公司造成了損害,維護(hù)人員并不完全負(fù)責(zé),是嗎?

我并不是說大公司的產(chǎn)品中沒有錯(cuò)誤。據(jù)我所知,他們的產(chǎn)品中可能會有更多。但你可以投訴,開罰單,甚至起訴微軟。你可以肯定,一個(gè)項(xiàng)目將在很長一段時(shí)間內(nèi)繼續(xù)得到支持,如果它停止得到支持,你會提前幾年收到通知。就穩(wěn)定性和可靠性而言,我打賭Microsoft.NET運(yùn)行時(shí)及其所有工具都比大多數(shù)Node.js開源庫測試得更好!這可能會降低產(chǎn)品版本發(fā)布的速度,但卻會帶來更穩(wěn)定的產(chǎn)品。

話雖如此,仍存在許多維護(hù)良好的開源庫,它們有許多貢獻(xiàn)者,并得到了大公司的大力支持。

7、合規(guī)性、隱私和安全性

這一論點(diǎn)主要基于常識,而不是基于我的經(jīng)驗(yàn)或?qū)I(yè)知識。如果我做了一些錯(cuò)誤的假設(shè),請讓我提前道歉。

在開始創(chuàng)業(yè)時(shí),您可能認(rèn)為法規(guī)遵從性問題并不重要或特別有趣。我想創(chuàng)始人會專注于制作產(chǎn)品、招聘、籌集資金和選擇公司的標(biāo)志。但是,這僅是產(chǎn)品最重要的方面之一。在某些行業(yè),如醫(yī)療保健、軍事和政府部門,至關(guān)重要的是,你的應(yīng)用程序必須是安全的,能夠保護(hù)個(gè)人信息,并符合HIPAA和ISO 27001等標(biāo)準(zhǔn)。

再讓我們回到對技術(shù)的選擇話題:

如果您選擇了Node.js或者是ASP.NET,那么合規(guī)性/隱私性/安全性是否重要?

在這兩種技術(shù)上運(yùn)行的應(yīng)用程序是否符合標(biāo)準(zhǔn),是否安全,是否受隱私保護(hù)?

但當(dāng)你選擇Node.js時(shí),還可以選擇使用開源庫和生態(tài)系統(tǒng)。某些開源庫存在安全或隱私漏洞的可能性更大。而且,這些項(xiàng)目很有可能不遵守微軟為自己制定的瘋狂標(biāo)準(zhǔn)。即使你正在采取最好的措施來保護(hù)你的應(yīng)用程序,例如進(jìn)行滲透測試等等,你也無法與微軟的聲譽(yù)競爭。如果一個(gè)G端客戶知道你全部都在使用微軟的技術(shù)堆棧,他們就更有可能信任你的應(yīng)用。

8、小結(jié)

至此,我希望我至少說服了你認(rèn)可我上述提出的部分觀點(diǎn)。不過,很多論據(jù)都是帶有主觀性的,比如誰有更好的工具,或者哪種編程語言更好。其實(shí),我會第一個(gè)承認(rèn)Node.js比ASP.NET更好一些。對此你有什么看法呢?歡迎在文后留下你的評論。

原文鏈接:https://shimo.im/docs/pmkxQn7ejPuZ1EAN/read

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2012-05-02 15:56:20

PHP

2022-01-04 21:36:33

JS瀏覽器設(shè)計(jì)

2013-03-04 10:10:36

WebKit瀏覽器

2009-08-03 14:22:33

什么是ASP.NET

2024-03-07 10:21:56

2011-09-02 14:47:48

Node

2024-01-10 17:04:13

通信模塊通信技術(shù)通信模組

2009-07-31 17:50:27

ASP.NET工作流

2016-05-18 10:15:25

PythonNode.js

2020-05-25 20:46:59

Python編程語言程序員

2021-06-30 06:56:18

數(shù)據(jù)泄露零信任網(wǎng)絡(luò)安全

2020-10-12 17:40:34

.NET Core開發(fā)技術(shù)

2022-07-14 07:17:11

LXCDocker語言

2020-05-06 16:47:59

ServerlessMVC架構(gòu)

2016-12-28 10:37:46

AndroidGradleApache Ant

2010-08-18 09:58:33

WinFormASP.NET

2009-07-22 17:45:35

ASP.NET教程

2009-07-28 17:17:19

ASP.NET概述

2023-09-08 14:12:04

2013-11-01 09:34:56

Node.js技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號