27 điểm bởi xguru 2024-10-05 | 4 bình luận | Chia sẻ qua WhatsApp
  • Tauri là một framework để xây dựng các tệp nhị phân nhỏ gọn và nhanh cho mọi nền tảng desktop chính (macOS, Linux, Windows) và di động (iOS, Android)
  • Có thể tích hợp bất kỳ framework frontend nào biên dịch xuống HTML, JavaScript, CSS, và khi cần có thể sử dụng các ngôn ngữ như Rust, Swift, Kotlin cho logic backend
  • Cung cấp bộ JavaScript API phong phú, nên trong đa số trường hợp không cần phải viết mã bằng Rust, Swift hay Kotlin

Khi nào nên dùng Tauri?

  • Khi bạn muốn một codebase UI duy nhất cho mọi nền tảng
  • Khi bạn muốn tiếp cận nhiều người dùng nhất có thể trên chính nền tảng của họ (ví dụ: Windows, macOS, Linux, Android, iOS)
  • Khi bạn là lập trình viên frontend web và muốn viết ứng dụng native
  • Khi bạn là lập trình viên Rust và muốn xây dựng ứng dụng với UI đẹp mắt, đồng thời có tùy chọn viết bằng Rust
  • Khi bạn có một đội ngũ lập trình viên web và muốn mở rộng sang thị trường ứng dụng native với mức đầu tư ban đầu thấp
  • Khi bạn có một đội ngũ lập trình viên Rust và muốn viết mọi thứ bằng Rust

Ưu điểm và cải tiến của 2.0

Cải thiện trải nghiệm bắt đầu

  • Tập trung vào trải nghiệm lập trình viên (DX), và nỗ lực làm cho quy trình ban đầu này mượt mà như chính việc xây dựng và triển khai ứng dụng cuối cùng
  • Tạo ra dự án create-tauri-app (CTA) để lập trình viên có thể bắt đầu từ con số 0 và có một ứng dụng Tauri đang chạy chỉ trong vài phút thay vì vài giờ

Hot-Module Replacement

  • Mở rộng hot module replacement (HMR), vốn đã được cân nhắc từ bản 1.x để cải thiện quy trình phát triển, sang cả thiết bị di động và trình giả lập
  • Mọi thay đổi ở frontend của ứng dụng không cần build lại toàn bộ ứng dụng, và có thể xem trước theo thời gian thực cách nó sẽ hiển thị trên thiết bị hoặc hệ điều hành đang phát triển

Plugin

  • Trong Tauri 2.0, một hệ thống plugin tiên tiến hơn đã được xây dựng. Nhiều phần chức năng trước đây đã được chuyển sang các plugin chính thức để cộng đồng có thể đóng góp cho Tauri dễ dàng hơn
  • Hệ thống plugin cũng hỗ trợ plugin di động. Trên iOS có thể viết hoặc tái sử dụng mã native bằng Swift, trên Android bằng Kotlin, dùng annotation (@Command trên Android) hoặc triển khai subclass (YourPluginClass: Plugin trên iOS), hoặc gọi mã Swift hay Kotlin từ các lệnh Tauri dựa trên Rust để trực tiếp phơi bày hàm cho frontend Tauri
  • Các plugin chính thức được cung cấp sẽ đi theo major version của Tauri
    • Autostart: tự động chạy ứng dụng khi hệ thống khởi động
    • Barcode Scanner: quét mã vạch như QR code, EAN-13 trong ứng dụng di động
    • Biometric: hộp thoại xác thực sinh trắc học trên Android và iOS
    • Clipboard: đọc và ghi clipboard hệ thống
    • Command Line Interface (CLI): phân tích cú pháp đối số từ giao diện dòng lệnh
    • Deep Linking: đặt ứng dụng Tauri làm trình xử lý mặc định cho URL
    • Dialog: hộp thoại hệ thống native cho mở và lưu tệp, hộp thoại thông báo
    • File System: truy cập hệ thống tệp
    • Global Shortcut: đăng ký phím tắt toàn cục
    • HTTP Client: truy cập HTTP client được viết bằng Rust
    • Localhost: sử dụng máy chủ localhost trong ứng dụng production
    • Logging: logging có thể cấu hình
    • NFC: đọc và ghi thẻ NFC trên Android và iOS
    • Notifications: gửi thông báo native cho người dùng
    • OS Information: đọc thông tin về hệ điều hành
    • Persisted Scope: duy trì các thay đổi phạm vi lúc chạy vào hệ thống tệp
    • Positioner: di chuyển cửa sổ tới các vị trí thông dụng
    • Process: truy cập tiến trình hiện tại
    • Shell: truy cập shell hệ thống để quản lý tệp và URL bằng ứng dụng mặc định, đồng thời tạo tiến trình con
    • Single Instance: đảm bảo chỉ một instance của ứng dụng Tauri chạy tại một thời điểm
    • SQL: plugin Tauri cung cấp giao diện để frontend giao tiếp với cơ sở dữ liệu SQL thông qua sqlx
    • Store: lưu trữ key-value bền vững
    • Stronghold: cơ sở dữ liệu an toàn được mã hóa
    • System Tray
    • Updater: cập nhật trong ứng dụng cho ứng dụng Tauri
    • Upload: tải tệp lên qua HTTP
    • Websocket: mở kết nối WebSocket từ JavaScript bằng Rust client
    • Window Customization
    • Window State: duy trì kích thước và vị trí cửa sổ

Cái chết của Allowlist, Allowlist muôn năm

  • allowlist không còn tồn tại nữa, vì hệ thống này đã nhanh chóng chạm tới giới hạn
  • Nó được tạo ra chỉ dành riêng cho các chức năng cốt lõi của Tauri, nhưng không bao quát toàn bộ API của Tauri
  • Hệ thống mới không chỉ bao phủ toàn bộ bề mặt API cốt lõi của Tauri mà còn hỗ trợ nhà phát triển ứng dụng và plugin triển khai kiểm soát truy cập và giới hạn phạm vi riêng theo một cách tiếp cận thống nhất
  • Tạo ra một hệ thống kiểm soát truy cập vừa linh hoạt vừa dễ sử dụng bằng permissions - "công tắc bật/tắt cho các lệnh Tauri", scopes - "xác thực tham số cho các lệnh Tauri", capabilities - "liên kết quyền hạn và phạm vi với Windows và WebView"
  • Có thể tạo các tệp quyền hạn hoặc phạm vi có tên và tái sử dụng, kết hợp chúng với các quyền hạn hoặc phạm vi có tên khác
  • Nhờ đó có thể xây dựng các tập mô tả chi tiết hơn, bao gồm nhiều quyền hạn và phạm vi đơn giản hoặc phức tạp
  • Với phần bổ sung này, lõi Tauri giờ đây có thể hiểu liệu thông điệp gọi lệnh từ frontend WebView có được phép đi đến hàm lệnh hay không

Viết lại giao tiếp liên tiến trình (IPC)

  • Lớp IPC đã được viết lại để giờ đây hỗ trợ tính năng được mong đợi từ lâu là Raw Payload, đồng thời thay đổi cách hoạt động nội bộ
  • Trước đây, mọi IPC payload đều được tuần tự hóa và giải tuần tự hóa dưới dạng JSON, gây ra overhead. Điều này trở nên dễ nhận thấy khi truyền hơn vài kilobyte giữa frontend và backend
  • Hệ thống mới hỗ trợ Raw Request. Điều này cho phép dùng trực tiếp byte thô hoặc sử dụng quy trình (giải) tuần tự hóa riêng (ví dụ: bson, protobuf, avro...) để tăng tốc truyền dữ liệu lớn từ backend sang frontend hoặc ngược lại

Hướng dẫn triển khai

  • Trong Tauri 2.0, sự đa dạng trong triển khai đã tăng lên đáng kể nhờ hệ sinh thái di động và các đóng góp từ cộng đồng
  • Tài liệu triển khai có kèm hướng dẫn chính thức về cách triển khai lên Apple Appstore, Google Play, Microsoft Store, CrabNebula Cloud, Flathub, Snapcraft, AUR và các định dạng phân phối khác

4 bình luận

 
plumpmath 2024-10-10

https://github.com/DioxusLabs/dioxus

Nếu chỉ phát triển bằng Rust, cái này có vẻ tốt hơn nhỉ. Vừa mới biết luôn. Ban đầu định tập trung vào Tauri, nhưng nghe nói có thể phát triển toàn bộ chỉ với một ngôn ngữ là Rust nên chuyển sang cái này~* Nghe nói có thể truy cập native trực tiếp, nhanh hơn IPC.

 
xguru 2024-10-10

Dioxus - Thư viện UI cho Rust lấy cảm hứng từ React
Trước đây khi tôi từng đăng một lần thì có lẽ vì lúc đó là bản 0.3 nên đã có bình luận nói rằng vẫn còn khá nhiều trở ngại.

Dioxus 0.5: Ứng dụng web, desktop và di động phát triển bằng Rust
Bây giờ đã là 0.5 rồi nên có thể mọi thứ đã khác.

 
tsboard 2024-10-05

Đây thật sự là một tin rất đáng kinh ngạc. Có vẻ nó cũng sẽ hữu ích cho việc phát triển ứng dụng native trên Windows, và có lẽ cũng sẽ được sử dụng rất hiệu quả trên di động.

 
bus710 2024-10-05

Viết lại IPC à.... Có vẻ sẽ rất hợp để gửi dữ liệu lớn như video nhỉ.