Các tính năng mới trong Angular 10

  • TSlib, thư viện thời gian chạy cho TypeScript chứa các hàm trợ giúp, đã được cập nhật lên TSlib 2.0. Công cụ phân tích tĩnh TSLint cho TypeScript đã được cập nhật lên TSLint 6.
  • Một giao diện trình biên dịch (compiler interface) đã được thêm vào để bao bọc trình biên dịch ngtsc thực tế. Trình biên dịch dành riêng cho dịch vụ ngôn ngữ quản lý nhiều tệp đánh máy bằng giao diện dự án, tạo Scriptinfos nếu cần.
  • Cấu hình trình duyệt cho các dự án mới đã được cập nhật để loại trừ các trình duyệt cũ hơn, ít được sử dụng hơn. Không hỗ trợ Internet Explorer 9, Internet Explorer 10 và Internet Explorer Mobile.
  • Định dạng gói Angular không còn bao gồm các gói ESM5 hoặc FESM5, tiết kiệm thời gian tải xuống và cài đặt khi chạy cài đặt sợi hoặc npm cho các gói và thư viện Angular.
  • Đối với trình biên dịch, các khoảng tên (name spans) đã được thêm vào để đọc thuộc tính và gọi phương thức.
  • EntryPointFinder, một công cụ tìm điểm nhập (program-based entry-point) dựa trên chương trình, đã được thêm vào có thể được tạo ra từ các lần nhập trong một chương trình được chỉ định bởi tệp tsjconfig.json. Điều này dự kiến sẽ nhanh hơn DirectoryWalkerEntryPointFinder khi chương trình đang hoạt động chỉ nhập một phần nhỏ các điểm nhập được cài đặt.
  • Tính năng tự động hoàn thành (Autocompletion ) đang bị xóa khỏi các thực thể HTML, chẳng hạn như & amp, vì giá trị đáng ngờ và vấn đề về hiệu suất.
  • Ánh xạ rõ ràng đang được hiển thị từ việc đóng vào các tệp devmode. Tính năng này nhằm vào các công cụ phát triển (development tools) phải chuyển các đầu vào xây dựng sản xuất thành các sản phẩm tương đương với chế độ Dev (devmode) của chúng.
  • Trong một thay đổi đột phá, generic đã được thực hiện bắt buộc đối với ModuleWithProviders. Tham số kiểu generic đã được yêu cầu để mẫu ModuleWithProviders hoạt động với đường dẫn biên dịch và kết xuất Ivy, nhưng trước khi cam kết này, View Engine đã cho phép bỏ qua kiểu generic. Nếu nhà phát triển đang sử dụng ModuleWithProviders không có loại generic, quá trình di chuyển phiên bản 10 sẽ cập nhật mã. Nhưng nếu một nhà phát triển đang sử dụng View Engine và tùy thuộc vào thư viện mà bỏ qua loại generic, lỗi xây dựng sẽ được đưa ra. Trong trường hợp này, ngcc sẽ không trợ giúp và quá trình di chuyển sẽ chỉ bao gồm mã ứng dụng. Tác giả thư viện nên được liên hệ để sửa chữa thư viện của họ. Để giải quyết vấn đề, bạn có thể đặt bỏ qua jumpLibChecks thành false trong tsconfig hoặc cập nhật ứng dụng để chỉ sử dụng Ivy.
  • TypeScript 3.9 hiện đã được giới thiệu, với sự hỗ trợ cho TypeScript 3.8 đã bị loại bỏ. Đây là một thay đổi đột phá. TypeScript 3.6 và TypeScript 3.7 cũng không còn được hỗ trợ nữa.
  • Cải tiến hiệu suất kiểm tra kiểu (Type-checking) đã được thực hiện cho compiler-cli.
  • Để cải thiện hiệu suất, việc tính toán basePaths đã được thực hiện lazy, vì vậy công việc chỉ được thực hiện nếu cần trong TargetedEntryPointFinder. Trước đây, basePaths được tính toán bất cứ khi nào trình tìm kiếm được khởi tạo, điều này gây lãng phí công sức trong trường hợp điểm vào được nhắm mục tiêu đã được xử lý.
  • Hợp nhất nhiều tệp dịch được hỗ trợ. Trước đây, chỉ cho phép một tệp dịch cho mỗi ngôn ngữ. Giờ đây, người dùng có thể chỉ định nhiều tệp cho mỗi ngôn ngữ và các giao dịch từ mỗi tệp sẽ được hợp nhất bằng messaging ID .
  • Có thể định cấu hình thời gian chờ khóa không đồng bộ (Async locking timeouts) . Điều này bổ sung hỗ trợ cho tệp ngcc.config.js để thiết lập các tùy chọn retryAttempts và retryDelay cho AsyncLocker. Kiểm tra tích hợp thêm một kiểm tra mới cho thời gian chờ và sử dụng ngcc.config.js để giảm thời gian chờ nhằm ngăn quá trình kiểm tra diễn ra quá lâu.
  • Trong một thay đổi đột phá, các cảnh báo về các phần tử không xác định hiện được ghi lại dưới dạng lỗi. Mặc dù điều này sẽ không phá vỡ một ứng dụng, nhưng nó có thể làm hỏng các công cụ mà không mong đợi gì được ghi lại thông qua console.error.
  • Trong một thay đổi đột phá khác, bất kỳ trình phân giải nào trả về EMPTY sẽ hủy điều hướng. Để cho phép điều hướng tiếp tục, các nhà phát triển phải cập nhật các trình phân giải (resolvers) để cập nhật một số giá trị, chẳng hạn như default! Empty.
  • Việc bổ sung thông tin phụ thuộc và bộ chọn ng-content vào siêu dữ liệu. Tính năng trình biên dịch được đề xuất này sẽ cung cấp siêu dữ liệu bổ sung hữu ích cho các công cụ như Angular Language Service, cung cấp khả năng cung cấp đề xuất cho các chỉ thị / thành phần (directives/components) được xác định trong thư viện.
  • Cải thiện hiệu suất, đạt được bằng cách giảm kích thước của tệp kê khai điểm nhập (entrypoint manifest) và kỹ thuật bộ nhớ đệm trong tệp kê khai (manifest). Ngoài ra, bộ nhớ đệm của các phụ thuộc được thực hiện trong tệp kê khai điểm nhập và đọc từ đó thay vì được tính toán mọi lúc. Trước đây, ngay cả khi một entrypoint không cần xử lý, ngcc (trình biên dịch tương thích Angular Ivy) sẽ phân tích cú pháp các tệp của entrypoint để tính toán các phụ thuộc, điều này sẽ mất rất nhiều thời gian cho các mô-đun Large_node.
  • Để cải thiện hiệu suất ngcc, hiện cho phép báo cáo ngay lập tức về một tệp khóa cũ. Ngoài ra, một bản sao được lưu trong bộ đệm ẩn của tệp tsconfig đã được phân tích cú pháp được lưu trữ có thể được sử dụng lại nếu đường dẫn tsconfig giống nhau.
  • Trong một thay đổi đột phá, logic đã được cập nhật liên quan đến định dạng các khoảng thời gian trong ngày kéo dài đến nửa đêm. Khi định dạng thời gian bằng mã định dạng b hoặc B, chuỗi được hiển thị không xử lý đúng các khoảng thời gian trong ngày kéo dài nhiều ngày. Thay vào đó, logic trở lại trường hợp mặc định của AM. Logic này đã được cập nhật để nó khớp với thời gian trong một ngày kéo dài quá nửa đêm, vì vậy giờ đây nó sẽ hiển thị đầu ra chính xác, chẳng hạn như vào ban đêm trong trường hợp tiếng Anh. Các ứng dụng sử dụng formatDate () hoặc DatePipe hoặc mã định dạng b và B sẽ bị ảnh hưởng bởi thay đổi này.
  • Đối với bộ định tuyến, bộ bảo vệ CanLoad bây giờ có thể trả về Urltree. Một trình bảo vệ CanLoad trả về Urltree hủy điều hướng và chuyển hướng hiện tại. Điều này phù hợp với hành vi hiện tại có sẵn cho các bảo vệ CanActivate cũng đã được thêm vào. Điều này không ảnh hưởng đến tải trước. Một trình bảo vệ CanLoad chặn bất kỳ tải trước nào; bất kỳ tuyến đường nào có trình bảo vệ CanLoad sẽ không được tải trước và các tuyến bảo vệ sẽ không được thực thi như một phần của quá trình tải trước.
  • Việc truyền khoảng giá trị chính xác trong một ExpressionBinding của một biểu thức microsyntax tới ParsedProperty, đến lượt nó sẽ truyền khoảng cách tới các AST của mẫu (cả VE và Ivy). Đề xuất này cũng dành cho trình biên dịch.
  • Trong một bản sửa lỗi cho lõi, logic sẽ được thêm vào di chuyển lớp chưa được trang trí để trang trí các lớp dẫn xuất của các lớp chưa được trang trí sử dụng các tính năng Angular.
  • Trong một thay đổi vi phạm, loại của Urlmatcher sẽ phản ánh rằng nó luôn có thể trả về giá trị rỗng.
    Đối với nhân viên dịch vụ, một bản sửa lỗi đã được đưa ra cho tình huống có khả năng nhân viên dịch vụ sẽ không bao giờ đăng ký khi có một tác vụ đang chạy lâu hoặc thời gian chờ định kỳ.
  • Một số bản sửa lỗi đã được thực hiện bao gồm trình biên dịch tránh các biểu thức không xác định trong mảng holey và lõi tránh lỗi di chuyển khi một biểu tượng không tồn tại được nhập. Ngoài ra còn có một cách giải quyết trong lõi đối với lỗi nội tuyến Terser. Một bản sửa lỗi khác xác định đúng các mô-đun bị ảnh hưởng bởi ghi đè trong TestBed.
  • Angular NPM không còn chứa một số nhận xét jsdoc nhất định để hỗ trợ tối ưu hóa nâng cao của Trình biên dịch đóng cửa. Đây là một thay đổi đột phá. Hỗ trợ cho Trình biên dịch đóng gói trong các gói đã được thử nghiệm và bị hỏng một thời gian. Bất kỳ ai sử dụng Trình biên dịch đóng cửa có khả năng tốt hơn nên sử dụng các gói Angular được xây dựng từ các nguồn trực tiếp hơn là sử dụng các phiên bản được xuất bản trên NPM. Như một cách giải quyết tạm thời, người dùng có thể xem xét sử dụng đường ống xây dựng hiện tại của họ với cờ đóng cửa –compilation_level = SIMPLE. Cờ này sẽ đảm bảo rằng đường ống xây dựng tạo ra các tạo tác có thể xây dựng, có thể chạy được, với chi phí là kích thước tải trọng tăng lên do tính năng tối ưu hóa nâng cao bị tắt.

Leave a Comment