1. 程式人生 > >在 Angular 8 中,我們可以期待些什麽

在 Angular 8 中,我們可以期待些什麽

好的 ceo service enum 部分 加載 大型項目 多並發 註入

轉載請註明出處:名揚天下娛樂,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。

本文由葡萄城翻譯並發布

---

技術分享圖片

Angular 作為一款優秀的前端框架,自誕生之日起,就致力於面向前端開發者提供一整套全功能解決方案。與其他流行框架所追求的理念不同,Angular並非作為一款可以並入 Web 應用程序的輕量級框架而生,而是設計為:包含了一個完整的工作流,用於從項目創建開始,持續地維護並更新你的應用程序。

2019對於 Angular來說意義非凡,因為其包含了Ivy 等功能的全新版Angular 8 將於本年內正式發布。盡管 Angular 技術團隊仍沒有對外公布 Angular 8 正式版發布日期,但其beta版在本月上線已幾乎沒有懸念。Angular 8的發布近在咫尺!

那麽,在 Angular 8 中,我們可以期待些什麽?

Angular 8 中有什麽新功能

盡管大多數開發者都在關註Ivy,但其實 Angular 8 中還是有很多值得稱道的亮點:

l JavaScript中的差異化加載

作為構建過程的一部分,Angular CLI生成的新應用程序現在將包含用於舊版JavaScript(ES5)和現代JavaScript(ES2015 +)的單獨軟件包。該包在客戶端中實現差異化加載,以提高瀏覽器的加載速度和傳輸間隔時間(TTI)。這是一個好消息,意味著支持ES2015的瀏覽器將能夠下載更小、更高效的應用程序包,而這些應用程序包的加載速度和渲染速度都比以往更快。

l Ivy (預覽版)視圖引擎搶先試用

您可在應用程序中開始使用Ivy渲染器,並向Angular團隊提供使用反饋,以便其及時做出優化和修復。

l Angular Router的向後兼容模式

Angular 添加了向後兼容模式,以降低大型項目的升級成本。Angular Router將可以使用 $ route APIs 在現有的Angular應用程序中,選擇延遲加載部分 Angular 1.x應用程序。在理想的情況下,我們甚至可以立即將Angular 1.x應用程序升級到Angular 2+。

然而,現實並非如此。直到今天,還有大量傳統的Angular應用程序仍在為企業提供服務。而這些企業沒有選擇升級的原因很簡單:它們運行良好,並且在完成重寫時無需太多投入。

然而,Angular 1.x的時代已經結束,之後不會有任何新的更新,直到2021年6月30日。因此,對於從事大型Angular 1.x應用程序開發的團隊,現在正是選擇升級的最佳時間。

l 改良的Web Worker綁定方式

Web Worker是編寫主線程運行代碼的好方法,可用於提高應用程序的速度和並發性。為了達到這一目標,Angular團隊在 CLI 中添加了改良的 Web Worker綁定支持。

l 可選的信息共享機制

為了有效收集您的反饋,更好地建設 Angular社區,Angular團隊在CLI中添加了可選的信息共享機制。在您同意的情況下,將開始收集您的命令行和構建速度等匿名信息。

l 依賴關系更新

與往常一樣,Angular團隊正在更新對TypeScript、RxJS和Node等工具的依賴關系,以便與 Angular 生態系統的其余部分保持同步。

Angular Ivy 是什麽?

技術分享圖片

作為下一代 Angular 的視圖引擎,Ivy的出現旨在徹底縮減代碼尺寸並增強系統靈活性。與目前的Angular View Engine相比,Ivy具有以下優勢:

  • 通過 Angular 編譯器生成的代碼現在將更容易讓開發者閱讀和理解
  • 項目重建時間將明顯加快
  • 有效減少了負載大小,瀏覽器用於下載和解析應用程序的時間將更短
  • 更好的模板類型檢查,以便您在項目構建初期,就可捕獲更多BUG,以防止用戶在運行時遇到它們

除此之外,Angular Ivy與現有的Angular應用程序廣泛兼容。因此,在理想的情況下,您將無需更改應用程序即可獲得Ivy的全部支持。這也是為什麽使用Angular 8和Ivy構建當前的Angular應用程序會更加便利。

Ivy(預覽版)可能存在的問題

目前已知的是,Ivy 的國際版和Angular Universal版尚未完全兼容。當然,如果您在開發過程中遇到任何使用BUG,請立即向Angular技術團隊反饋,以便他們能夠及時解決問題並將您的建議作為 Ivy 正式版的一部分。

如果您的Angular應用程序支持多語言或使用服務器端呈現數據,請不要指望它能與Ivy完美結合。除此之外,用戶可能遇到的另一個問題就是Angular Material,目前來看,使用Angular Material的應用似乎與即將發布的Angular 8預覽版Ivy不太匹配。

Angular 8 對 Web Worker 的支持

對於那些對Web Worker 還不熟悉的開發者來說,Web Worker標誌著前端開發中的一項重要創新,在此之前,所有 Web 應用程序僅限於使用單線程。而隨著 Web Worker 的出現,可以將CPU分配到單獨的硬件線程中,使瀏覽器環境擁有多線程,從而提升項目開發效率。

在Angular 8更新之前,使用 Web Worker需要註意的問題是:在worker中運行的代碼不能與應用程序的其余部分位於同一JavaScript腳本文件中。它必須是分開的。因此,對於曾經希望借助Angular CLI等工具,自動將JavaScript文件拆分、綁定到更少文件夾下的效果往往不佳。而Angular 8的新特性之一便是改進了使用Angular CLI捆綁WebWorker的支持,這項改進意味著您將走向多並發、自動化的Web Worker之路。

Angular 8 對 TypeScript 的支持

關於 Angular 8 中的依賴更新,包括了對Angular依賴項和最新版本的更新,如RxJS和TypeScript等框架。這看起來似乎是一個微小的改進,但卻同樣受歡迎,特別是TypeScript部分。

Angular 8 的性能提升

雖然 Angular 8 帶來了很多令人稱贊的功能,但是真正促使我們升級的很大一部分原因取決於其性能的提升!為證實這一點,我們將對 Angular 7.2 和Angular 8.0.0-beta.7 進行全面對比。

該性能測試是基於ng new創建的新應用程序運行,並使用ng build --prod構建的。測試本身使用了Chrome的審核標簽完成,通過 “Applied Fast 3G,4X CPU Slowdown” 的設置來模擬在移動設備上運行。

Angular 7.2

使用Angular 7.2的正式版本生成main.js的大小為240KB。具體數據如下圖:

技術分享圖片

Angular 8.0.0-beta.7

Angular 8 beta版本的main.js文件大小與Angular 7.2相同:240KB。由此可見,文件大小沒有任何改變,但讓我們對比一下性能數據:

技術分享圖片

Angular 8 看起來更棒!相對於Angular 7.2,獲得了相當不錯的性能提升。

於是,在 Angular 8 中,我們可以得到些什麽

正如我們所看到的,Angular 8的新增特性除 Ivy 之外並不是很亮眼,盡管這些特性非常好用,但對於大多數應用程序來說並不重要。

基於這一點,您應該將應用程序升級到Angular 8,還是堅持使用Angular 7?毫無疑問,你應該升級它們。即便功能上沒有任何大的重大更新,但通過 Angular 8 新增的差異化加載,您將獲得顯著的性能提升。

更重要的是,升級到Angular 8將確保您的應用程序為Ivy做好準備,即便目前 Ivy只是Angular 8提供的一個可選預覽。如果您的應用程序需要兼容 Ivy,那麽最好從現在開始嘗試。

/// <summary>
///獲取用戶,這些用戶可以訪問受密碼保護的API
/// </summary>
/// <param name="provider">hengtongyoule.com/</param>
/// <returns></returns>
public static List<TestUser> GetUsers(ServiceProvider provider)
{
var webAppIdentityDemoUser = provider.GetRequiredService<UserManager<WebAppIdentityDemoUser>>();
IList<WebAppIdentityDemoUser>www.michenggw.com users = null;
//獲取Identity的User表用戶,條件是屬於Administrator角色的用戶
users = webAppIdentityDemoUser.GetUsersInRoleAsync("Administrator").Result;

List<TestUser> testUserList = new List<TestUser>();
foreach (WebAppIdentityDemoUser user in users)
{
testUserList.Add(new TestUser() { SubjectId = user.Id.ToString(), Username = user.UserName, Password = user.PasswordHash });
}
return testUserList;
}
復制代碼
  (2) 然後在Startup類的ConfigureServices方法中使用IdentityServer註入測試用戶:

復制代碼
ServiceProvider provider = services.BuildServiceProvider();

var builder = services.AddIdentityServer(www.18037.cn)
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(www.17093.cn Config.GetApis())
.AddInMemoryClients(Config.GetClients(www.dfgjpt.com))
.AddTestUsers(Config.GetUsers(provider));
復制代碼
  (3) 定義客戶端, 使用密碼授予訪問此API(資源範圍:api1)

    在config.cs類中,定義客戶端,通過修改AllowedGrantTypes枚舉來簡單地向現有客戶端添加對授權類型的支持, 將以下代碼添加到客戶端配置中, 裏面支持二個Client授權類型,分別是ClientCredentials使用憑證來訪問令牌和ResourceOwnerPassword 使用密碼來訪問令牌。

復制代碼
public static IEnumerable<www.60910.cn Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "client",

// no interactive user, use the clientid/secret for authentication
AllowedGrantTypes = GrantTypes.ClientCredentials,

// secret for authentication
ClientSecrets =
{
new Secret("secret".Sha256())
},

// scopes that client has access to
AllowedScopes = { www.tianjiuyule178.com"api1" }
},
// resource owner password grant client
new Client
{
ClientId = "ro.client",
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,

ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes = { "api1" }

或者,您也可以選擇一條更加快捷且簡便的方式,比如使用一款相當成熟的商業化開發工具——WijmoJS。這樣,您就不必考慮項目中前端框架的兼容性和版本更新問題,因為它不但同時兼容了Angular、React、Vue、TypeScript和Ionic 等框架,還時刻緊隨技術潮流,第一時間保持對框架最新版本的全面支持。

在 Angular 8 中,我們可以期待些什麽