ASP.NET Core 值得學嗎?
4 |
連發了幾篇 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,功能豐富但較笨重,在一些評測(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 在即,但其穩定性及成熟度尚待更多實戰驗證,還有第三方元件支援度尚未完全跟上來的問題,是進行大規模商轉前要考量的風險,但時間會消除這些疑慮。我建議現在就可提早接觸,試著在小型新專案上練習,應是不錯的入水角度。現在累積實力,待未來市場接受度變高,對於提供競爭力大有助益,不妨提早投資。
Analysis of the trend of ASP.NET development. ASP.NET Core will be the future and it's time to embrace it.
Comments
# by 打雜工程師
黑大: 我們打算把一個老網站對外服務功能(原本是ASP.NET 2.0)重新開發,這網站是提供填表(約40個必填, 有切流程頁來完成,沒分支可略過不填,大概要7分鐘)和上下載文件為主,並移植到WIN 2016上,2019上線。 但公司只有我ˋ這個半路出家工程師 Q_Q,BOSS問了2個問題: 1.看起來 ASP.NET 5/6跟 .NET CORE 2.1/3.0明年會變主流,對於表單與文件管理的要求來講,應該差異不大 ,如何選? 我當下是選ASP.NET 5 MVC,理由是技術成熟,如果萬一要找人支援做也比較容易,BOSS覺得NET CORE2.X似乎 比較有發展性,而且技術既然通用,幹嘛不用新的? 我該選NET CORE嗎? 2.你用RWD會造成手機變更多【下一頁】流程,作業會更慢吧? 我當時是回說,切分成填表、上載文件和索取文件階段等2個流程,索取結果文件時,再驗證真實身分,填剩下 多個必填資料。就算是主流5.2吋/6吋手機也可以在3頁內.023結束,但BOSS想要讓人填更多欄位,希望基本資 料自動取得後3頁搞定,後續很少欄位要填,下載單純,客訴少。有想過FB、LINE,但網站資料儲存時間限制 只到活動結束,要報其他活動還得重填,有測過自然人憑證,缺點是手機上整個流程會變成15分鐘以上(憑證 來回驗證約3-5分鐘),而自然人憑證在手機上安全性疑慮不小。請問有更好的作法嗎?
# by Jeffrey
to 打雜工程師, 1) 如果系統上線時程吃緊且不容閃失,用 ASP.NET MVC 5 風險較低。用 ASP.NET Core 目前較大的阻礙在於第三方程式庫還沒完全追上來,因此可評估系統對第三方元件的依賴度,若功能單純用 ASP.NET Core 內建功能即可搞定,而 BOSS 偏好 ASP.NET Core 且因此也願意多給些試誤空間,則 ASP.NET Core 值得一試。 2) 依我的認知 RWD 應非造成更多下一頁的關鍵,手機畫面每頁小擺放元素有限才是問題根源。這類操作體驗的改善常會從省掉非必要欄位或移到後面階段再填,得從操作動線設計上著手,非單純從技術面就可解決的問題。報其他活動得重填這點我倒覺得是個很不錯的改善點,也許透過 Cookie 線索識別使用者身分,下回自動帶出前次填寫內容(若顧慮安全甚至可加入簡單登入驗證),讓老顧客少填一堆資料,應該可獲得好評。至於手機自然人憑證,我就沒研究過了。
# by 打雜工程師
黑大,我再跟BOSS討論看看,謝謝您^^
# by David
在複雜的商業運用,我很難想像沒辦法逐行 Debug 的開發環境要如何抓蟲,那根本就是對Coding人員的一種折磨,所以 Visual Studio IDE 搭配 C#,個人認為是最適合商業開發的架構。