- Thông qua backend dựa trên Avalonia, ứng dụng .NET MAUI nay có thể chạy trên desktop Linux và trình duyệt (WebAssembly)
- Vẫn giữ nguyên codebase MAUI hiện có nhưng thay lớp kết xuất bằng Avalonia, từ đó đồng thời đạt được cải thiện hiệu năng và mở rộng nền tảng
- Hoạt động với cùng một engine kết xuất trên desktop Linux như Ubuntu, Debian, Fedora, Linux nhúng và môi trường WebAssembly
- Trên Windows và macOS cũng ghi nhận hiệu năng tăng hơn 2 lần, đồng thời cung cấp UI nhất quán không khác biệt giữa các nền tảng
- Đây là dự án mang đến cho lập trình viên MAUI hỗ trợ Linux·web và chu kỳ phát triển dễ dự đoán, đồng thời trở thành nền tảng để mở rộng hệ sinh thái Avalonia
Tổng quan về Avalonia MAUI Backend
- Avalonia MAUI Backend có cấu trúc giữ nguyên codebase MAUI nhưng thay thế bằng lớp kết xuất Avalonia
- Có thể mở rộng ứng dụng MAUI hiện có sang các nền tảng bổ sung như Linux, trình duyệt
- Đồng thời cải thiện hiệu năng desktop và đảm bảo tính nhất quán giữa các nền tảng
- Bản demo thực tế là ứng dụng MAUI dựa trên WebAssembly, có thể chạy trong trình duyệt mà không cần plugin
- Dù mới là bản build ban đầu, nó đã chứng minh MAUI có thể hoạt động trên các hệ điều hành desktop chính và trình duyệt
Hỗ trợ nền tảng chính
- Hỗ trợ desktop Linux
- Chạy như ứng dụng desktop hạng nhất trên Ubuntu, Debian, Fedora...
- Sử dụng bộ kết xuất Avalonia để cung cấp chất lượng ở mức ứng dụng desktop hiệu năng cao
- Hỗ trợ Linux nhúng
- Chạy với cùng backend như Avalonia trên thiết bị nhúng như bảng điều khiển Raspberry Pi, HMI công nghiệp
- Hỗ trợ WebAssembly
- Hiện thực ứng dụng MAUI chạy trong trình duyệt không cần phụ thuộc native
- Dự kiến sẽ tiếp tục phát triển tới mức có thể phân phối qua trình duyệt trong tương lai
- Hỗ trợ Windows và macOS
- Tích hợp với kiến trúc kết xuất desktop đã trưởng thành của Avalonia
- Trên macOS, quan sát thấy hiệu năng cải thiện hơn 2 lần so với Mac Catalyst
Hiệu quả phát triển và tính nhất quán
- Đội ngũ Avalonia chỉ phát triển hướng tới một nền tảng duy nhất (Avalonia)
- Không cần các triển khai riêng biệt cho iOS, Android, Windows, macOS, Linux, WebAssembly
- Giảm lỗi theo nền tảng và khác biệt trong kết xuất
- Do dùng cùng một engine kết xuất, UI được thể hiện giống nhau trên mọi nền tảng
- Khi thêm tính năng hoặc sửa lỗi, có thể áp dụng ngay cho tất cả nền tảng
- Rút ngắn chu kỳ phát triển và đảm bảo chất lượng dễ dự đoán
Vì sao Avalonia xây dựng backend cho MAUI
- Ưu tiên hỗ trợ lập trình viên .NET client, giúp người dùng MAUI có được hỗ trợ Linux·trình duyệt và cải thiện hiệu năng
- Thông qua dự án này, Avalonia học hỏi về tính thân thiện với di động, các vấn đề API và những điểm cần cải thiện trong tooling
- Kỳ vọng hiệu ứng thu hút vào hệ sinh thái khi lập trình viên MAUI trải nghiệm bộ kết xuất và tính năng của Avalonia
- Mục tiêu không phải thay thế MAUI mà là mang đến nhiều lựa chọn rộng hơn cho lập trình viên MAUI hiện tại
Ý nghĩa với lập trình viên MAUI
- Cung cấp hỗ trợ Linux và mô hình UI dựa trên vẽ nhất quán mà lập trình viên MAUI đã liên tục yêu cầu
- Avalonia cung cấp các tính năng như sau
- Kết xuất tăng tốc phần cứng
- Hệ thống layout·style nhất quán
- Animation tần số quét cao
- Kết xuất tùy biến và hiệu ứng hình ảnh
- Độ bao phủ nền tảng rộng
- Nền tảng được đầu tư và hỗ trợ liên tục
- Đã được sử dụng trong các môi trường thương mại như Unity, JetBrains, Schneider Electric
- Vẫn giữ nguyên mã MAUI hiện có trong khi đồng thời đạt được cải thiện hiệu năng trên Linux·web·desktop
Hiệu năng và kết xuất thế hệ tiếp theo
- Với UI stack dạng vẽ thân thiện GPU, đạt hiệu năng cao hơn toolkit native
- Đang phối hợp với nhóm Google Flutter để đưa bộ kết xuất GPU Impeller vào .NET
- Khi công nghệ này được áp dụng, backend MAUI cũng sẽ kế thừa tốc độ kết xuất nhanh hơn, tiết kiệm pin hơn và animation mượt hơn
Kế hoạch sắp tới
- Tiếp tục cải thiện chất lượng backend thông qua hợp tác với các kỹ sư MAUI
- Khi hỗ trợ Linux và trình duyệt đạt đến mức trưởng thành, MAUI sẽ hoàn thiện thành một framework UI đa nền tảng thực sự
- Sau khi ổn định, dự kiến công bố mã nguồn mở theo giấy phép MIT
- Sẽ tiếp tục chia sẻ tiến độ phát triển, benchmark và preview
1 bình luận
Ý kiến Hacker News
Việc mang kiểu tính năng này lên web thực sự rất thú vị
Nhưng khi thử demo thì không hề có cảm giác “giống web”
Không thể tìm bằng Ctrl+F, cũng không thể chọn văn bản hay sao chép địa chỉ liên kết
Trên di động cũng không thể nhấn giữ ảnh để chia sẻ, và trình đọc màn hình cũng không hoạt động
Những điểm này cộng dồn lại tạo cảm giác rằng “đây không phải web thật sự”
Nó giống như một hòn đảo nội dung phong phú bị tách khỏi trình duyệt kiểu Java applet cuối thập niên 90 hay Flash, Silverlight đầu những năm 2000
Thiếu những tính năng này thì theo đúng định nghĩa không thể gọi là “web thật sự”
Cuối cùng nó dẫn tới câu hỏi mang tính triết học là “web là gì”
Khiến người ta phải nghĩ xem đó chỉ là phương tiện truyền tải media, hay là một thứ gì đó lớn hơn
Dạo này có nhiều người đã mệt mỏi với web bị app-hóa (app-lification) và nhớ về web mở ngày xưa
Tôi đã thử demo bằng trình đọc màn hình và nó hoàn toàn không hoạt động
Đây cũng không phải hướng đi mà Microsoft chủ đích nhắm tới
Chỉ là vì Avalonia hỗ trợ WASM nên khi đặt MAUI lên trên nó thì chạy được
Nhưng như vậy về bản chất chỉ là render một desktop GUI toolkit bằng WASM
Trông ngầu đấy, nhưng cảm giác giống phiên bản hiện đại của Silverlight hơn là web app
Dù vậy, việc có thể nhắm tới desktop Linux vẫn là một lợi thế lớn
Cũng sẽ có nhiều người thích kiểu render giao diện đồng nhất về hình thức như Avalonia hơn là việc MAUI dùng native control của từng nền tảng
Chỉ với CSS/JS/HTML của trình duyệt hiện đại cũng đã làm được phần lớn mọi thứ
Tôi thích XAML, nhưng JSX cũng là khái niệm tương tự và cuối cùng biên dịch ra HTML thật
Tôi cũng đã nghĩ y như vậy từ thời Silverlight — không hiểu vì sao người ta cứ muốn làm lại Flash mãi
Unity Web build đã là một “C# Flash” tốt hơn rồi
Những tính năng cơ bản như vậy mà không có thì với tôi là không thể cân nhắc được (non-starter)
MAUI không hỗ trợ desktop Linux thì ngay từ đầu đã không nằm trong diện cân nhắc
Bản bổ sung lần này có khá hơn phần nào, nhưng tôi vẫn nghĩ dùng trực tiếp Avalonia sẽ tốt hơn
Dù vậy, có thêm lựa chọn này cho các dự án hiện có vẫn là điều đáng mừng
Cuối cùng thì ngoài Kotlin Multiplatform hay Electron, giờ cũng có thể làm các ứng dụng “UX kiểu điện thoại” chậm chạp với animation kỳ quặc trên Linux
Nhưng bộ widget thì chỉ đến mức nút bấm và checkbox nên khá thất vọng
Tôi thắc mắc vì sao các bản demo UI toolkit ngày nay lại thua cả demo thời Delphi 1
Nó đã hỗ trợ Windows/Mac/Linux/WASM rồi
Có vẻ phần việc lần này là dành cho những ai muốn mở rộng ứng dụng MAUI hiện có sang Linux/WASM
Có thể xem tiến độ trên blog Avalonia
Một trong những lý do khiến mọi người ngại MAUI trong hệ sinh thái .NET là vì chính Microsoft cũng không dùng nó
Ngay cả Teams cũng dựa trên Electron
Điều đó khiến người ta tự hỏi: “Microsoft còn không dùng thì tại sao chúng ta phải dùng?”
Bộ phận Windows phụ trách WinUI/Win32, Office phụ trách React, còn bộ phận developer thì phụ trách WPF và MAUI
Kết quả là mỗi bộ phận đi một hướng và UI toolkit bị phân mảnh
Cuối cùng mọi toolkit đều chỉ nhận được mức hỗ trợ nửa vời
Teams cũng như vậy khi chuyển từ Angular sang React
Dù sao thì việc họ không dùng MAUI vẫn là sự thật
Có vẻ người ta chuộng các công nghệ đã được kiểm chứng như Avalonia hay WinForms hơn
Không rõ về lâu dài Microsoft sẽ thực sự chống lưng cho cái nào
Cũng có Blazor, nhưng nó giống công cụ làm ứng dụng nội bộ hơn là thứ để thay React
Nhân tiện, tôi cũng không chắc Google có tích cực dùng Flutter cho ứng dụng của chính họ hay không
Teams phát hành năm 2017, còn MAUI được công bố năm 2022
Thời điểm chuyển sang React cũng là trước khi có MAUI
Tuy vậy, việc Microsoft không “dogfooding” MAUI đủ nhiều vẫn đáng lo
Gần đây còn có tin cắt giảm nhân sự liên quan đến MAUI, khiến cảm giác niềm tin nội bộ đang yếu đi
Cũng nên tính đến việc Flutter khởi đầu sớm hơn 5 năm
Dù sao thì vẫn khó xóa được ấn tượng rằng Microsoft không thật sự dốc sức cho MAUI
Kết cục lúc nào cũng là ngừng hỗ trợ
Dùng công nghệ web tiêu chuẩn tốt cho sức khỏe tinh thần hơn
(Không phải là đang bênh MAUI)
Để tránh nhầm lẫn, xin tóm lại
.NET MAUI vốn là framework để tạo ứng dụng cho Android, iOS, macOS và Windows từ một codebase duy nhất
Lần này chỉ là bổ sung thêm Linux và trình duyệt
Tôi thử tạo ứng dụng Hello World trên Mac thì phần thiết lập khá phức tạp
Nhưng sau một thời gian dài lại được dùng XAML cũng thấy vui
Tôi đang làm phần mềm phục vụ phát triển nên cần một GUI đa nền tảng
Ban đầu tôi thử MAUI nhưng ngay từ khâu cài đặt đã là ác mộng
Ngay cả các tính năng UI cơ bản cũng không được hỗ trợ
Sau đó tôi thử AvaloniaUI và trải nghiệm hoàn toàn ngược lại
Cài đặt đơn giản, và chỉ cần tìm kiếm một chút là có thể dễ dàng làm được những thứ như cửa sổ trong suốt không viền
Tích hợp với Visual Studio có hơi tiếc một chút, nhưng vẫn vượt xa MAUI
Cảm giác như Silverlight hồi sinh
Tham khảo: wiki Microsoft Silverlight
Demo gần như không hoạt động trên Chrome
Trò xếp hình trượt phản hồi chậm, và mũi tên quay lại thì bị treo
Refresh thì quay về màn hình đầu
Bộ chọn giờ và bộ chọn ngày cũng bị lệch căn chỉnh và thao tác rất khó chịu
Tổng thể là rất tệ
Chủ đề liên quan
Tôi đã chạy demo “Word puzzle” trong mục “Launch MAUI in your browser”
Khi bấm ‘Randomize’, các ô bắt đầu bị xáo trộn, nhưng nếu quay lại bằng mũi tên phía trên thì màn hình bị khóa cứng hoàn toàn
Câu đố vẫn nằm ở nền, menu thì chồng lên trên và không thể bấm gì cả
Tình trạng này xảy ra giống nhau trên nhiều trình duyệt
Liên kết demo
Click-drag không ổn định và cũng không có phản hồi thị giác
Các ô không di chuyển mà chỉ dịch chuyển tức thời
Thà bấm một cái hoặc có animation di chuyển còn hơn
Người dùng khác cũng nêu đúng vấn đề này
Máy tính RPN thì thậm chí còn không thể đưa số vào stack
Tôi thực sự rất cần một UI toolkit có thể dùng để làm chương trình CAD thật sự
Đã chán ngấy các ứng dụng trông như webview rồi
Tôi cực ghét xu hướng web UI của 10 năm qua
Cứ to dần theo hướng ưu tiên cảm ứng, nhiều khoảng trắng, đầy animation vô ích
Tôi muốn quay lại kiểu UI cũ tập trung vào mật độ thông tin và tính khả dụng
Đó là điểm tôi thích ở các website Nhật Bản
Xem demo reel của Avalonia thì thấy ngay cả với stack GUI .NET cũng có thể làm được những thứ như trình biên tập video hay công cụ phân tích bản đồ
Avalonia Showcase
Nếu chỉ đến mức làm app thời tiết hay to-do thì không có ý nghĩa gì
WPF và WinForms cũng vẫn còn tồn tại thôi