連發了幾篇 ASP.NET Core 文章,果不其然接到各方詢問:
「
喵的媽呀,微軟又推新東西了?」
「WebForm 玩完了嗎?」
「我 ASP.NET MVC 還沒開始玩耶,是不是不用學了?」
先簡單答覆以上疑問:
是的,ASP.NET Core是下一代的 ASP.NET,能跨平台執行,預期是未來的主流。它是兩年前推出的新東西沒錯,但做資訊這行一天到晚學新東西剛好而已好嗎?你要是體驗過前端框架「放煙火式的生命週期」,這根本不算什麼。
至於 WebForm,再戰十年或二十年應該不是問題。大型企業或組織求穩重於求新,系統愈大愈複雜,革新速度愈慢,但可預期也不會再挹注資源擴大發展,相關工作機會註定愈來愈少,由於不再有新鮮肝投入這塊領域,將演變成留守老鳥們靠寫很快或領很少或娶了老闆女兒角逐稀有維護職缺的場面。(補充參考:丞相,起風了!從ASP.NET 5的變革談起)
如果你正要或正在學 ASP.NET MVC 5,請繼續學好學滿,相關知識技巧在 ASP.NET Core 絕大部分都能沿用。企業若無強烈的跨平台需求,ASP.NET MVC 5 的 Windows 及第三方程式庫支援較完整成熟,穩定性及技術資源勝過仍在起步的 ASP.NET Core,仍是現階段開發網站的好選擇(依據官方文件,ASP.NET 與 ASP.NET Core 為可替換選項,開發人員可視自身需求擇一使用),請安服用。
回到正題,如果 ASP.NET MVC 5 仍是現役主力,那 ASP.NET Core 值學習嗎? 看我最近寫了不少 ASP.NET Core 筆記,想當然爾是投贊成票的,個人觀點如下:
跨平台優勢
二十幾年的 Coding 人生,C# 是我用過最成熟最順手的程式語言,搭配地表最強的 Visual Studio IDE,簡直削鐵如泥。可惜早年它被封印在 Windows 裡,錯失與 Java 競爭主流開發語言霸主的先機,直到 .NET Core 終於正式跨平台,雖然晚了十幾年,但總算讓我等到了。
跨平台有什麼好處? 有選擇就是爽!
依據 Netcraft 的統計,2018 七月全球前 100 萬網站使用的網站伺服器 Apache 佔 35.2%,nginx 佔 24.9%(市佔持續擴大中),Microsoft 佔 9.4 %。各家作業系統、網站伺服器的成本、效能、穩定性、管理方便性各有優劣,各有愛好者。身為網站開發人員,ASP.NET Core 跟 Apache、Nginx、IIS 都能搭,甚至丟到 NAS Docker 跑也成,不必為了網站主機限制跟客戶戰作業系統戰伺服器,光想到嘴角就上揚。 (謎:是以前有多常被打搶?)
想像一下,跟錙銖必較的老闆報告網站用 Linux 主機、 VPS 或 Cloud 就能跑,租金省一半,老闆開心你加薪。
效能優勢
ASP.NET Core 採用輕巧的 Kestrel Web Server 處理核心 HTTP 通訊(甚至可抽換成更效能取向的伺服器以適應極端情境),一般會配合 Nginx、Apache、IIS 等反向代理伺服器(Reverse Proxy Server)補足安全、負載平衡、靜態內容快取、壓縮、HTTP 認證等需求。ASP.NET 受限於 IIS,功能豐富但較笨重,在一些評測(12)中 ASP.NET Core 的效能數字(RPS,Request Per Second)至少嬴過 ASP.NET on IIS 3-4 倍。
當然純用 Kestrel 對比 IIS,多少帶有「徒手跑步 vs 武裝跑步」相比的差偏,實際情境 Kestrel 搭配反向代理伺服器後差距應會縮小一些,但不可否認,當你不計代價極想擠出效能時,ASP.NET Core 更能超越巔峰。
趨勢 趨勢 趨勢
ASP.NET MVC 5 仍是檯面上的主流選項,但若無意外未來 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 預計在今年下半年釋出預覽並於 2019 推出正式版,處於急速抽高的青春期。比較 EF Core 與 EF6 - Microsoft Docs
官方文件提到 EF6 仍是受支援的產品,未來仍會看到 Bug 修正及小幅改善。EF Core 的 API 與 EF6 相近,但核心已重寫故未繼承 EF6 所有功能,成熟度也不及 EF6,但未來將會加入一些 EF6 沒有的新功能(替代鍵、批次更新、LINQ 查詢混用用戶端及資料庫端運算) 。
由此推論,微軟仍會繼續支援 ASP.NET / EF6,但新功能將會在 ASP.NET Core 跟 EF Core 出現。
Open Source 萬歲
.NET Core / ASP.NET Core 完全開源,開發社群的每一份子都可以回報問題、提供建議、協助修 Bug、新增功能,讓平台更貼近自己的需求。即便意見最終未被接受,還有一招大絕,那裡用不爽就改到爽,你功力的極限的就是系統功能與效能的極限 :P (呃,這樣以後不能跟老闆說「這是平台限制沒辦法了」... Orz)
結論
小結我的看法:如果你未來五到十年還打算靠 ASP.NET 吃飯,ASP.NET MVC 一定要學,寫 WebForm 工作機會將變得很少,具備 MVC 技能才有本錢跟年輕小夥子們搶飯碗,很高比例的 MVC 知識搬到 ASP.NET Core 仍受用,毫不猶豫投資下去就對了。至於 ASP.NET Core,我個人認為雖然已經 3.0 在即,但其穩定性及成熟度尚待更多實戰驗證,還有第三方元件支援度尚未完全跟上來的問題,是進行大規模商轉前要考量的風險,但時間會消除這些疑慮。我建議現在就可提早接觸,試著在小型新專案上練習,應是不錯的入水角度。現在累積實力,待未來市場接受度變高,對於提供競爭力大有助益,不妨提早投資。