ASP.NET Core值得學嗎?
「喵的媽呀,微軟又推新東西了?」
「WebForm 玩完了嗎?」
「我 ASP.NET MVC 還沒開始玩耶,是不是不用學了?」
先簡單答復以上疑問:
是的,ASP.NET Core 是下一代的 ASP.NET,能跨平臺執行,預期是未來的主流。它是兩年前推出的新東西沒錯,但做信息這行一天到晚學新東西剛好而已好嗎?你要是體驗過前端框架「放煙火式的生命周期」,這根本不算什么。
至于 WebForm,再戰十年或二十年應該不是問題。大型企業或組織求穩重于求新,系統愈大愈復雜,革新速度愈慢,但可預期也不會再挹注資源擴大發展,相關工作機會注定愈來愈少,由于不再有新人投入這塊領域,將演變成留守老鳥們靠寫很快或領很少或娶了老板女兒角逐希有維護職缺的場面。
如果你正要或正在學 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,功能豐富但較笨重,在一些評測(1 2)中 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 在即,但其穩定性及成熟度尚待更多實戰驗證,還有第三方元件支持度尚未完全跟上來的問題,是進行大規模商轉前要考察的風險,但時間會消除這些疑慮。我建議現在就可提早接觸,試著在小型新項目上練習,應是不錯的入水角度。現在累積實力,待未來市場接受度變高,對于提供競爭力大有助益,不妨提早投資。