「喵的妈呀,微软又推新东西了?」
「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 在即,但其稳定性及成熟度尚待更多实战验证,还有第三方元件支持度尚未完全跟上来的问题,是进行大规模商转前要考察的风险,但时间会消除这些疑虑。我建议现在就可提早接触,试着在小型新项目上练习,应是不错的入水角度。现在累积实力,待未来市场接受度变高,对于提供竞争力大有助益,不妨提早投资。