微軟於.NET 8第三預覽版中,在ASP.NET Core加入原生AOT(Ahead-Of-Time)的支援,供開發者將程式碼編譯成為原生碼,生成自封式(Self-Contained)ASP.NET Core應用程式。官方提到,這項新功能的發展初期,會先專注於支援雲端原生API應用程式。

ASP.NET Core是一個以.NET架構為基礎的網頁應用程式跨平臺開發框架,由於ASP.NET Core相依於.NET,因此原本ASP.NET Core就可以用到AOT編譯,但是支援重點主要還是在提升效能和可擴展性上,整體支援並不完整。

而.NET 8第三預覽版在ASP.NET Core加入原生AOT,使得ASP.NET Core能夠獲得更完整的AOT優勢。使用原生AOT編譯的應用程式,可減少磁碟空間使用,原生AOT應用程式會生成一個可執行檔,其中包含應用程式和所需的外部相依項目程式碼子集,而這個優點會讓容器映像檔更小,進而縮短部署的時間。

由於AOT程式碼不再需要JIT編譯,也就可以縮短程式啟動時間,應用程式可以更快處理請求,容器調度效能將獲得改善,不同版本的應用程式轉換更順暢。原生AOT程式碼還能夠減少記憶體需求,讓應用程式部署密度提高,並且改善可擴展性。

針對需要部署多個執行個體的工作負載,像是雲端基礎設施和超大規模服務,ASP.NET Core原生AOT的支援將帶來更為明顯的好處。經官方測試,將應用程式以原生AOT編譯,啟動時間可減少達80%,應用程式的大小也可減少了87%。

不過,並非所有ASP.NET Core的功能都與原生AOT相容,部分開發者常用的函式庫也可能不支援原生AOT。ASP.NET Core的原生AOT限制主要在反射(Reflection)和動態程式碼生成相關部分,雖然原生AOT支援型別資訊的反射,但執行時可能會發生一些問題,因為AOT編譯中的樹型剪裁,無法靜態確定特定型別的成員是否透過反射存取,因此可能使這些成員被移除,在執行時發生問題,開發者需要特別標記動態存取的成員,才能避免成員被移除。

微軟提醒,程式碼仰賴反射執行時程式碼生成並非總是很明顯,因此開發者應該要仔細檢查程式碼,避免意外地將原生AOT用於不相容之處。

除此之外,這個預覽版還加入了一個值得注意的功能,便是Blazor元件的伺服器端渲染(Server-Side Rendering,SSR),微軟讓開發者可以使用Blazor元件建置伺服器端渲染的使用者介面,以提升客戶端的互動性。ASP.NET Core原本就已經支援MVC和Razor Pages進行伺服器端渲染,但是這些框架,缺乏可重用的網頁使用者介面元件,而Blazor剛好可以彌補這個不足。

伺服器端預覽是指讓伺服器在收到請求時生成HTML,優點是載入速度快,因為使用者介面的渲染工作在伺服器上已經完成,客戶端便不需要下載大量的JavaScript套件。而微軟在Blazor元件加入伺服器端渲染,也就進一步使Blazor能夠同時滿足客戶端和伺服器端等,所有網頁使用者介面的需求。這項功能仍在早期預覽階段,在功能上還有許多限制。

熱門新聞

Advertisement