ASP.NET Core值得學(xué)嗎?
「喵的媽呀,微軟又推新東西了?」
「WebForm 玩完了嗎?」
「我 ASP.NET MVC 還沒開始玩耶,是不是不用學(xué)了?」
先簡單答復(fù)以上疑問:
是的,ASP.NET Core 是下一代的 ASP.NET,能跨平臺執(zhí)行,預(yù)期是未來的主流。它是兩年前推出的新東西沒錯(cuò),但做信息這行一天到晚學(xué)新東西剛好而已好嗎?你要是體驗(yàn)過前端框架「放煙火式的生命周期」,這根本不算什么。
至于 WebForm,再戰(zhàn)十年或二十年應(yīng)該不是問題。大型企業(yè)或組織求穩(wěn)重于求新,系統(tǒng)愈大愈復(fù)雜,革新速度愈慢,但可預(yù)期也不會(huì)再挹注資源擴(kuò)大發(fā)展,相關(guān)工作機(jī)會(huì)注定愈來愈少,由于不再有新人投入這塊領(lǐng)域,將演變成留守老鳥們靠寫很快或領(lǐng)很少或娶了老板女兒角逐希有維護(hù)職缺的場面。
如果你正要或正在學(xué) ASP.NET MVC 5,請繼續(xù)學(xué)好學(xué)滿,相關(guān)知識技巧在 ASP.NET Core 絕大部分都能沿用。企業(yè)若無強(qiáng)烈的跨平臺需求,ASP.NET MVC 5 的 Windows 及第三方程序庫支持較完整成熟,穩(wěn)定性及技術(shù)資源勝過仍在起步的 ASP.NET Core,仍是現(xiàn)階段開發(fā)網(wǎng)站的好選擇(依據(jù)官方文件,ASP.NET 與 ASP.NET Core 為可替換選項(xiàng),開發(fā)人員可視自身需求擇一使用)。
回到正題,如果 ASP.NET MVC 5 仍是現(xiàn)役主力,那 ASP.NET Core 值學(xué)習(xí)嗎?看我最近寫了不少 ASP.NET Core 筆記,想當(dāng)然爾是投贊成票的,個(gè)人觀點(diǎn)如下:
跨平臺優(yōu)勢
二十幾年的 Coding 人生,C#是我用過最成熟最順手的程序語言,搭配地表***的 Visual Studio IDE,簡直削鐵如泥??上г缒晁环庥≡?Windows 里,錯(cuò)失與 Java 競爭主流開發(fā)語言霸主的先機(jī),直到 .NET Core 終于正式跨平臺,雖然晚了十幾年,但總算讓我等到了。
跨平臺有什么好處?有選擇就是爽!
依據(jù) Netcraft 的統(tǒng)計(jì),2018 七月全球前 100 萬網(wǎng)站使用的網(wǎng)站服務(wù)器 Apache 占 35.2%,nginx 占 24.9%(市占持續(xù)擴(kuò)大中),Microsoft 占 9.4 %。各家操作系統(tǒng)、網(wǎng)站服務(wù)器的成本、性能、穩(wěn)定性、管理方便性各有優(yōu)劣,各有愛好者。身為網(wǎng)站開發(fā)人員,ASP.NET Core 跟 Apache、Nginx、IIS 都能搭,甚至丟到 NAS Docker 跑也成,不必為了網(wǎng)站主機(jī)限制跟客戶戰(zhàn)操作系統(tǒng)戰(zhàn)服務(wù)器,光想到嘴角就上揚(yáng)。(謎:是以前有多常被打搶?)
想像一下,跟錙銖必較的老板報(bào)告網(wǎng)站用 Linux 主機(jī)、VPS 或 Cloud 就能跑,租金省一半,老板開心你加薪。
性能優(yōu)勢
ASP.NET Core 采用輕巧的 Kestrel Web Server 處理核心 HTTP 通信(甚至可抽換成更性能取向的服務(wù)器以調(diào)節(jié)極端情境),一般會(huì)配合 Nginx、Apache、IIS 等反向代理服務(wù)器(Reverse Proxy Server)補(bǔ)足安全、負(fù)載平衡、靜態(tài)內(nèi)容緩存、壓縮、HTTP 認(rèn)證等需求。ASP.NET 受限于 IIS,功能豐富但較笨重,在一些評測(1 2)中 ASP.NET Core 的性能數(shù)字(RPS,Request Per Second)至少嬴過 ASP.NET on IIS 3-4 倍。
當(dāng)然純用 Kestrel 對比 IIS,多少帶有「徒手跑步 vs 武裝跑步」相比的差偏,實(shí)際情境 Kestrel 搭配反向代理服務(wù)器后差距應(yīng)會(huì)縮小一些,但不可否認(rèn),當(dāng)你不計(jì)代價(jià)極想擠出性能時(shí),ASP.NET Core 更能超越***。
趨勢 趨勢 趨勢
ASP.NET MVC 5 仍是臺面上的主流選項(xiàng),但若無意外未來 ASP.NET Core 將是王道。舉兩條線索:
ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0 - Scott Hanselman
ASP.NET MVC 5 的下一代不是 ASP.NET MVC 6,而是 ASP.NET Core 1.0,非常令人困惑的命名,但 Scott 他們盡力了。ASP.NET MVC NuGet Package 目前***版本為 5.2.6;而 ASP.NET Core 這兩年從 1.0 躍升到 2.1,3.0 預(yù)計(jì)在今年下半年釋出預(yù)覽并于 2019 推出正式版,處于急速抽高的青春期。
比較 EF Core 與 EF6 - Microsoft Docs
官方文件提到 EF6 仍是受支持的產(chǎn)品,未來仍會(huì)看到 Bug 修正及小幅改善。EF Core 的 API 與 EF6 相近,但核心已重寫故未繼承 EF6 所有功能,成熟度也不及 EF6,但未來將會(huì)加入一些 EF6 沒有的新功能(替代鍵、批次更新、LINQ 查詢混用客戶端及數(shù)據(jù)庫端運(yùn)算)。
由此推論,微軟仍會(huì)繼續(xù)支持 ASP.NET / EF6,但新功能將會(huì)在 ASP.NET Core 跟 EF Core 出現(xiàn)。
Open Source 萬歲
.NET Core / ASP.NET Core 完全開源,開發(fā)社群的每一份子都可以回報(bào)問題、提供建議、協(xié)助修 Bug、新增功能,讓平臺更貼近自己的需求。即便意見最終未被接受,還有一招大絕,那里用不爽就改到爽,你功力的極限的就是系統(tǒng)功能與性能的極限:P(呃,這樣以后不能跟老板說「這是平臺限制沒辦法了」…Orz)
結(jié)論
小結(jié)我的看法:如果你未來五到十年還打算靠 ASP.NET 吃飯,ASP.NET MVC 一定要學(xué),寫 WebForm 工作機(jī)會(huì)將變得很少,具備 MVC 技能才有本錢跟年輕小伙子們搶飯碗,很高比例的 MVC 知識搬到 ASP.NET Core 仍受用,毫不猶豫投資下去就對了。
至于 ASP.NET Core,我個(gè)人認(rèn)為雖然已經(jīng) 3.0 在即,但其穩(wěn)定性及成熟度尚待更多實(shí)戰(zhàn)驗(yàn)證,還有第三方元件支持度尚未完全跟上來的問題,是進(jìn)行大規(guī)模商轉(zhuǎn)前要考察的風(fēng)險(xiǎn),但時(shí)間會(huì)消除這些疑慮。我建議現(xiàn)在就可提早接觸,試著在小型新項(xiàng)目上練習(xí),應(yīng)是不錯(cuò)的入水角度?,F(xiàn)在累積實(shí)力,待未來市場接受度變高,對于提供競爭力大有助益,不妨提早投資。