Dioxus 0.5: viết lại Signals, loại bỏ lifetime, hot reload CSS và hơn thế nữa
- Dioxus Labs có một quy tắc không chính thức là chỉ cho phép một lần viết lại mỗi năm.
- Dioxus là một thư viện để xây dựng GUI bằng Rust, ban đầu bắt đầu như một bản viết lại của Yew.
- Dioxus 0.5 đã thay đổi theo hướng đơn giản hơn, vững chắc hơn và trau chuốt hơn theo yêu cầu của cộng đồng.
Các tính năng mới
- Viết lại hoàn toàn
dioxus-core, loại bỏ toàn bộ mã unsafe.
- Chuyển sang API dựa trên
Signal không cần clone, không dùng use_state và use_ref.
- Loại bỏ mọi lifetime và trạng thái
cx: Scope.
- Giới thiệu một hàm
launch duy nhất để khởi động ứng dụng cho mọi nền tảng.
- Hot reload tài sản hỗ trợ Tailwind và Vanilla CSS.
- Viết lại sự kiện để có thể truy cập các kiểu sự kiện
WebSys gốc của từng nền tảng.
- Mở rộng component để thêm thuộc tính phần tử (ví dụ: Link nhận toàn bộ thuộc tính của
<a/>).
- Tích hợp error boundary thống nhất và tích hợp server future với Suspense.
- Tăng tốc diffing trên desktop lên 5 lần và custom asset handler cho streaming byte.
- Streaming server function và hot reload full-stack.
- Nhiều cải tiến QoL, sửa lỗi, v.v.
Vấn đề lifetime
- Để làm Dioxus đơn giản hơn, mọi lifetime đã được loại bỏ.
- Vấn đề lifetime dễ khiến người mới học Rust e ngại, và ngay cả các lập trình viên Rust nhiều kinh nghiệm cũng thấy bối rối.
- Dioxus 0.5 loại bỏ lifetime và
Scope, đồng thời đưa vào signals là giải pháp quản lý trạng thái kiểu Copy.
Loại bỏ scope và lifetime
- Ở phiên bản mới, scope và lifetime
'bump đã bị loại bỏ.
- Việc khai báo component và dùng các hàm runtime bên trong component trở nên dễ hơn nhiều.
Loại bỏ toàn bộ mã unsafe
- Việc loại bỏ lifetime
'bump và scope đã giúp loại bỏ rất nhiều mã unsafe.
- dioxus-core 0.5 không còn mã unsafe.
Signals
- Giới thiệu signals như khối xây dựng trạng thái cốt lõi cho component.
Signal<T> là Copy ngay cả khi giá trị T bên trong không phải là Copy.
- Signals cung cấp cơ chế subscribe thông minh hơn, nên chỉ những component đọc signal mới được render lại.
Hot reload CSS
- Hỗ trợ hot reload file CSS, trong đó CLI
dx theo dõi file và stream các bản cập nhật ngay lập tức vào ứng dụng.
Viết lại hệ thống sự kiện
- Dioxus 0.5 phơi bày các kiểu sự kiện gốc của từng nền tảng và đưa vào các trait cung cấp API đa nền tảng.
Phát hành đa nền tảng
- API đa nền tảng mới giúp dễ dàng nhắm tới nhiều nền tảng bằng cùng một ứng dụng.
Hệ thống tài sản beta
- Hệ thống tài sản mới có tên manganis được tích hợp với CLI để kiểm tra, đóng gói và tối ưu hóa tài sản trong ứng dụng.
Tăng tốc render trên desktop lên 5 lần
- Đã triển khai nhiều tối ưu hóa để cải thiện tốc độ render.
Mở rộng thuộc tính
- Hữu ích khi cung cấp thêm chức năng cho các phần tử cụ thể.
Rút gọn thuộc tính
- Có thể dùng cú pháp rút gọn thuộc tính khi truyền thuộc tính vào phần tử và component.
Gộp thuộc tính nhiều dòng
- Thêm tính năng gộp thuộc tính để dễ tạo thuộc tính có điều kiện.
Streaming server function
- Hỗ trợ server function có thể stream dữ liệu tới client.
Nền tảng CLI full-stack
- Có thể dùng lệnh
dx để phục vụ ứng dụng full-stack.
Hỗ trợ router cho LiveView
- Router hoạt động ngay trong ứng dụng LiveView.
Custom asset handler
- Hỗ trợ custom asset handler trên desktop để stream dữ liệu tới trình duyệt một cách hiệu quả.
Xử lý file native
- Hỗ trợ đúng cách tính năng kéo-thả tệp trên desktop.
Xử lý lỗi
- Có thể dễ dàng xử lý lỗi trong ứng dụng bằng error boundary và trait throw.
Hot reload mặc định và chế độ "dev" cho desktop
- Kích hoạt hot reload theo mặc định và cải thiện đáng kể trải nghiệm phát triển ứng dụng desktop.
Cập nhật template dioxus
- Thành viên core team mới Miles đã cải tổ lớn tài liệu và template.
Dioxus-Community và Dioxus-std
- Dioxus Community đã cập nhật các crate hệ sinh thái quan trọng để phù hợp với bản phát hành 0.5.
Các tính năng sắp ra mắt
- Ổn định hóa và tích hợp hệ thống tài sản, code splitting cho
.wasm, Islands và khả năng tương tác có thể resume, server components, công cụ cho lập trình viên được cải thiện, cùng việc làm mới mobile và full-stack.
Xem trước sự trở lại của Dioxus-Blitz
- Với "Blitz 2.0", việc tích hợp Servo cho phép render native bằng cùng công cụ CSS đang vận hành Firefox thông qua WGPU.
Cách đóng góp
- Có thể đóng góp bằng cách dịch tài liệu, thử các "good first issue", cải thiện tài liệu, đóng góp cho CLI, trả lời câu hỏi trong cộng đồng Discord, v.v.
Ý kiến của GN⁺
- Dioxus 0.5 là một bản cập nhật quan trọng cho phát triển GUI dựa trên Rust, mang lại môi trường phát triển dễ hơn và an toàn hơn cho lập trình viên.
- Việc loại bỏ lifetime và scope giúp giảm độ phức tạp trong phát triển Rust, còn API dựa trên Signal giúp quản lý trạng thái đơn giản hơn.
- Hot reload CSS và các cải tiến trong hệ thống sự kiện sẽ góp phần nâng cao năng suất phát triển frontend.
- Hot reload và tính năng launch đa nền tảng giúp lập trình viên có được trải nghiệm phát triển nhất quán trên nhiều nền tảng khác nhau.
- Những thay đổi này được kỳ vọng sẽ tạo tác động tích cực tới cộng đồng Rust và phát triển web, đặc biệt hữu ích cho những người xây dựng ứng dụng web và desktop bằng Rust.
1 bình luận
Ý kiến trên Hacker News
Trải nghiệm của người dùng đầu tiên về những thay đổi trong Dioxus 0.5
lifetimesvà giải quyết vấn đề phảicloningliên tục, nên có thể kỳ vọng trải nghiệm phát triển dễ chịu hơn.Câu hỏi về hỗ trợ SVG
Sự tò mò về lập trình Rust và câu hỏi về cách hoạt động của crate
generational-boxgenerational-boxgiữ giá trị mà không cần sao chép, và liệu điều đó có an toàn hay không.Trải nghiệm phát triển trang chủ Freenet bằng Dioxus
Cảm nhận về các yếu tố làm nên thành công của React và sự đổi mới của Dioxus
signalstrong bản phát hành này.Ý kiến về RSX khi so sánh với SwiftUI
Lo ngại về việc loại bỏ
lifetimestrong Dioxuslifetimestrong Dioxus và thắc mắc điều này đã ảnh hưởng thế nào tới hiệu năng.Câu hỏi về khả năng tích hợp với web component
Câu hỏi về cách render ứng dụng native