- Nhà phát triển đã viết lại Desktop Docs, vốn trước đây là một ứng dụng Electron dành cho Mac, bằng Rust, và kết luận rằng đây là một lựa chọn đúng đắn
- Ứng dụng ban đầu làm bằng Electron có dung lượng lớn tới 1GB và thường xuyên bị sập do các vấn đề về hiệu năng
- Đặc biệt, có vấn đề suy giảm hiệu năng khi xử lý ảnh/video quy mô lớn
- Sau khi xây dựng lại bằng Rust + Tauri, dung lượng ứng dụng giảm 83%, tốc độ lập chỉ mục cải thiện hơn 3 lần, và độ ổn định cũng được nâng cao
- Kích thước ứng dụng: 1GB → 172MB (giảm 83%)
- Bộ cài: 232MB → 69.5MB (giảm 70%)
- Lập chỉ mục video: với video dài 38 phút, thời gian rút từ 10~14 phút xuống còn 3 phút
- Vận hành ổn định hơn rất nhiều so với ứng dụng Electron vốn thiếu ổn định
- Quá trình xây dựng lại và các lựa chọn
- Ứng dụng Electron tiêu tốn hơn 200MB bộ nhớ chỉ riêng Chromium, ngay cả khi chạy nền, và thậm chí gọi video cũng có thể gây crash
- Ở ứng dụng mới, CLIP embedding và kho vector Redis vẫn được giữ nguyên
- Tuy nhiên, toàn bộ pipeline xử lý ảnh/video và file I/O đã được viết lại bằng Rust
- Phần UI cũng không port từ mã cũ mà được viết lại từ đầu, kết quả là hoàn thiện được một giao diện gọn gàng và đơn giản hơn
- Khó khăn kỹ thuật
- Đường cong học Rust khá dốc, và cộng đồng Tauri vẫn chưa trưởng thành bằng Electron
- Trong quá trình đóng gói Redis vào ứng dụng, đã phát sinh vấn đề về xử lý quyền hạn và triển khai
- Dù vậy, so với Electron, khả năng kiểm soát tổng thể và hiệu năng đều được cải thiện
- Kết luận
- Dù vẫn chưa đạt mức tương đương hoàn toàn về tính năng, nhưng các tính năng cốt lõi hoạt động nhanh hơn và ổn định hơn rất nhiều
- “Hãy mạnh dạn vứt bỏ những đoạn mã tuy chạy được nhưng được viết sai cách”
7 bình luận
Electron tích hợp sẵn Chromium, còn Tauri thì dùng engine đã được cài trên hệ điều hành, nên có sự khác biệt.
Tauri (OS WebView) phù hợp hơn khi cần bản phân phối nhẹ và hiệu năng nhanh, nhưng với các dịch vụ mà bảo mật, độ tin cậy và khả năng kiểm soát tính năng là quan trọng thì cách tiếp cận của Electron (tích hợp Chromium) phù hợp hơn.
Tôi không rõ lắm vấn đề trong đoạn mã, nhưng tôi nghĩ đặc tính của nền tảng được phản ánh khá nhiều.
Nếu là Flutter thì
rinfcũng rất hay.Tôi từng dùng Electron, nhưng chưa từng đụng đến Tauri, nên chắc cũng phải thử một lần.
Ý kiến trên Hacker News
Tôi đang làm một ứng dụng desktop bằng Rust và egui, nhưng vì đây là lần đầu tiên tôi làm cả Rust lẫn phát triển desktop nên cảm thấy khá khó khi phải học quá nhiều khái niệm cùng lúc. Lĩnh vực của tôi là công cụ phân tích cơ khí, nên backend cần hiệu năng cao còn frontend cần trực quan hóa dữ liệu. Tôi muốn hỏi khi dùng Tauri thì việc phải quản lý cùng lúc nhiều stack như Rust, JS, HTML có gây vất vả không
Gần đây tôi đã có trải nghiệm chuyển một dự án từ Tauri sang Electron. Sự khác biệt trong cách render của webview trên các nền tảng khiến tôi đau đầu. Tôi muốn hỏi liệu bạn có từng gặp bug UI khi làm đa nền tảng không. Yêu cầu UI của tôi khá đơn giản còn phần tính toán thì phức tạp, nên tôi nghĩ dù có tốn chi phí QA thì vẫn xứng đáng. Tôi muốn biết trải nghiệm của mình có phải là trường hợp hiếm hay chênh lệch render thực sự là vấn đề phổ biến. Ngoài ra tôi cũng muốn hỏi bạn dùng Tauri 1.0 hay 2.0. Bản 2.0 phát hành chính thức đúng lúc tôi đang chuyển từ v1 sang, mà việc migration đúng là ác mộng và tài liệu thì thực sự quá thiếu. Tôi muốn biết bây giờ tài liệu đã tốt hơn chưa
Tôi cũng từng đi theo con đường tương tự. Tôi đã làm một trình xem webcam đơn giản được tối ưu cho kính hiển vi USB, vì trước đó không có lựa chọn nào đủ ổn nên tự làm luôn. Gần như mọi tính năng đều được triển khai trong renderer. Khi chuẩn bị gửi lên App Store, tôi bắt đầu tự hỏi một trình xem webcam mà nặng 500mb có hợp lý không, nên đã port sang Tauri V2 và giảm dung lượng xuống còn gần 15mb
Tôi thực sự thích mục đích của ứng dụng này. Những ứng dụng khác trong lĩnh vực này thường quá chậm chạp và bất tiện, nên tôi rất quan tâm đến bản viết lại này. Tuy vậy, vì tôi là nhiếp ảnh gia nên phần lớn media của tôi ở định dạng RAW, mà tôi không chắc ứng dụng có hỗ trợ hay không, hoặc nhìn vào cụm “tất cả các định dạng ảnh và video chính” thì có lẽ là không. Tôi muốn biết có tài liệu chính thức, diễn đàn người dùng hay kênh nào khác để kiểm tra những chi tiết như vậy không
Tôi không phải người dùng Mac và nhóm của tôi cũng không cân nhắc viết lại sang Rust, nhưng tôi rất vui khi đọc bài này. Tôi kỳ vọng các bài “Show HN” có đúng độ dài như thế này, tóm tắt các đánh đổi kỹ thuật cần thiết để giải quyết vấn đề thực tế. Cảm ơn bạn
Sẽ rất tuyệt nếu có tài liệu benchmark cập nhật so sánh Tauri, Flutter, Electron, React Native và các framework đa nền tảng hiện đại khác. Các chỉ số chính nên gồm kích thước bundle, mức dùng bộ nhớ (RAM), thời gian khởi động, mức dùng CPU khi có tải, dung lượng đĩa, v.v. Đặc biệt với những framework như Tauri, nơi khả năng render và hiệu năng thay đổi theo phiên bản webview, sẽ rất hữu ích nếu có thêm ma trận tương thích theo nền tảng như WebView2, WKWebView, v.v. Nếu các khác biệt này được tổng hợp trực quan thành bảng thì nhà phát triển sẽ đưa ra lựa chọn tốt hơn rất nhiều
Ở công ty cũ, tôi từng bảo trì một ứng dụng desktop Electron cho Windows và Mac. Ứng dụng quá nặng, và việc cập nhật bằng Squirrel là cực hình.
Cuối cùng chúng tôi giữ GUI ở dạng web SPA (dựa trên Inferno), còn phần như tải webview thì thay bằng các ứng dụng native nhỏ riêng cho từng nền tảng (C# và Swift). Nhờ vậy dung lượng tải xuống và mức dùng bộ nhớ giảm khoảng 90%, đồng thời chuyển sang phân phối-cập nhật qua app store của từng nền tảng. Tôi nghĩ đó là quyết định đúng đắn nhất
Tôi lo về thời gian phê duyệt cập nhật và sự bất định, nên rất tò mò không biết những điểm nào đã được cải thiện khi chuyển từ Squirrel sang native
Nếu ứng dụng cuối cùng là cho Mac, tôi thật sự tò mò vì sao bạn chọn Rust/Tauri thay vì Swift/SwiftUI
Tôi tò mò điều gì khiến bạn chọn Tauri thay vì egui. Có phải vì trải nghiệm với Electron không? Tôi cũng đang định port một ứng dụng Python Qt sang Rust, nhưng lo rằng các thư viện GUI của Rust hiện vẫn chưa đầy đủ như Qt, rồi cuối cùng sẽ bị mắc kẹt giữa chừng
Nhìn nút "Try" trên landing page chính, người dùng sẽ dễ nghĩ là có bản dùng thử, nhưng thực tế lại dẫn thẳng đến mua hàng. Sẽ tốt hơn nếu có dù chỉ là bản dùng thử 1 tuần.
Tôi rất thích chính sách giấy phép backup dùng vĩnh viễn. $99 là rào cản gia nhập khá cao, nhưng nếu nhắm đến creator/studio thì cũng hợp lý, còn với người tiêu dùng phổ thông thì có lẽ mức $20-$25 sẽ ổn hơn.
Bài viết nhấn mạnh vào hiệu năng, nhưng landing page lại không hề nhắc đến. Giống như video dài 38 phút kia, các thông tin như benchmark, xử lý song song, yêu cầu VRAM cũng rất quan trọng. Tôi muốn biết khi xử lý hàng trăm đến hàng nghìn giờ media thì thực tế ra sao.
Thật khó tin khi một tác vụ mất 10~14 phút trên Electron lại xuống còn 3 phút với Tauri. Electron chỉ orchestration CLIP và ffmpeg thôi mà, nên tôi tò mò overhead lớn như vậy xuất phát từ đâu.
Trước đây tôi cũng từng làm một công cụ tìm kiếm media dựa trên phiên âm video bằng Electron, nhưng không gặp nhiều vấn đề hiệu năng.
Thông thường lý do chọn Electron hay Tauri là vì đa nền tảng, nên tôi tò mò tại sao ngay từ đầu lại chỉ làm bản Mac, nhất là khi xử lý media khối lượng lớn thì còn có thể tận dụng Nvidia nữa.
Gần đây tôi cũng dùng lại Swift sau 10 năm và từng phân vân giữa Tauri với Swift cho một dự án mới, rồi cuối cùng chọn Swift; so với khoảng năm 2014 thì mọi thứ đã tiến bộ rất nhiều và trải nghiệm gần như rất dễ chịu.
Nếu phần nói về người dùng đang hoạt động là thật thì có vẻ bạn đã đạt được một mức thành công nhất định rồi; tôi tò mò trước đó bạn đã có mạng lưới hay tệp khán giả nào trong ngành studio/creator chưa. Tôi cũng muốn nghe thêm về phần marketing
Bạn nói là cũng từng tự làm một công cụ tương tự, nên tôi tò mò vì sao bạn chưa phát hành nó.
Các bản Windows và Linux cũng dự kiến sẽ ra mắt trong vài tháng tới nếu có nhu cầu.
Chúng tôi có được người dùng từ HN, đợt ra mắt trên reddit và một phần quảng bá trên LinkedIn. Phần lớn vẫn là truyền miệng.
Về câu chuyện hiệu năng Electron và xử lý video thì nếu đào sâu sẽ còn rất nhiều điều để nói. Tôi cũng không phải chuyên gia Electron, nên có thể là do chúng tôi không dùng worker đúng cách nên phát sinh bottleneck.
Khi chuyển sang Rust, chúng tôi cũng đưa vào scene detection để giảm số frame cần lập chỉ mục, nhờ đó giảm đáng kể tải xử lý. Chúng tôi cũng thêm các tùy chọn tăng tốc GPU cho ffmpeg nên hiệu năng cải thiện khá nhiều. Việc tạo embedding cho ảnh cũng đã được tối ưu theo kiểu batch processing. Tuy vậy nếu đẩy quá mức thì instance của model vẫn có thể bị crash
Trong bảng so sánh hiệu năng được liên kết trên HN, có vẻ như Electron tốt hơn Tauri trong hầu hết các trường hợp....
Nội dung so sánh hiệu năng trong phần bình luận có cảm giác khá rõ là đã chọn lọc những giá trị có lợi cho Electron trong số các số liệu của kho lưu trữ đó. Dù các con số có chênh lệch đôi chút, phần có số liệu gần nhất có lẽ là mục so sánh "chênh lệch bộ nhớ trống trước khi chạy và sau khi chạy". Tuy nhiên, ngay ở mục phía trên, tổng dung lượng bộ nhớ của tiến trình chính và tiến trình con khi đang chạy được ghi là 258M đối với Electron, nên khá khó để chấp nhận con số mức thay đổi sử dụng bộ nhớ trước và sau khi chạy chỉ là 91MB. Ngoài ra, trong một bình luận trả lời trên HN cũng có ý cho rằng khó tin vào các số liệu đo trong kho lưu trữ đó, vì thời gian khởi động của ứng dụng làm bằng Tauri được ghi là hơn 7 giây.
Ừm, có vẻ phần lớn vấn đề đến từ các sự cố liên quan đến engine WebView + OS/driver hơn là từ sự khác biệt giữa Electron hay Tauri.