Bắt đầu từ mong muốn giữ sự trực quan của Streamlit nhưng tăng hiệu năng: 'Violit', framework Web UI thuần Python
(github.com/violit-dev)Xin chào.
Tôi là một lập trình viên đang làm việc trong ngành và gần đây phát triển mã nguồn mở như một sở thích vào buổi tối sau giờ làm và cuối tuần.
Cá nhân tôi rất thích cú pháp trực quan của Streamlit, và tôi cũng biết khá nhiều bạn bè xung quanh làm nghiên cứu AI/Data đang sử dụng nó. Nhưng tôi thường thấy mọi người gặp khó khăn vì vấn đề hiệu năng khi dự án ngày càng lớn. Tôi từng giới thiệu NiceGUI như một phương án thay thế, nhưng nhiều người lại thấy khó thích nghi với cú pháp của nó. (Hình như NiceGUI ban đầu được một công ty ở Đức tạo ra để dùng nội bộ... và tôi nghĩ đây thực sự là một framework được làm rất tốt.)
Ngoài ra, tôi cũng cho rằng khi hiển thị Data thì tính “thẩm mỹ” rất quan trọng. Tuy nhiên, tôi nhận ra rằng với các framework GUI dựa trên Python hiện có, việc trang trí giao diện đẹp mắt lại khó hơn tưởng tượng. Đặc biệt, một nhược điểm lớn của NiceGUI là không dễ thoát khỏi Material Design của Quasar.
Vì vậy, tôi đã tự tạo ra Violit với mục tiêu là một công cụ “dễ như Streamlit, nhưng nhanh hơn về hiệu năng và cũng thuận tiện hơn trong việc styling”. Nền tảng kiến trúc của nó được xây dựng trên FastAPI và shoelace(Lit). Các đặc điểm chính như sau.
💜 Các đặc điểm chính của Violit
- Mức độ trực quan tương tự Streamlit tới 90%
- Nếu đã có kinh nghiệm dùng Streamlit, bạn có thể sử dụng ngay gần như không cần đường cong học tập nhờ API được thiết kế trực quan.
- O(1) Reactivity & Clean Syntax
- Không giống Streamlit, chỉ vì bấm một nút mà toàn bộ script không bị chạy lại (No Re-run).
- Ngay cả khi không có decorator tối ưu hóa như
@st.cache, bạn vẫn có thể quản lý trạng thái nhanh gọn chỉ bằng cách khai báo biến (state) đơn giản. (Tôi có tham khảo khái niệm signal của solid.js.)
- Easy Theming System
- Hiện tại hỗ trợ khoảng 30 preset theme để có thể áp dụng ngay một UI đẹp mắt.
- Trong thời gian tới, tôi cũng dự định cập nhật tính năng cho phép người dùng tự customization theme.
- Hybrid Engine & Multi-Platform
- Tùy theo lựa chọn của người dùng, framework có engine linh hoạt hỗ trợ cả chế độ Lite dùng HTMX lẫn chế độ WebSocket. Ban đầu thì ổn, nhưng về sau khi lượng người dùng tăng lên, tôi đã nghĩ liệu WebSocket có thể khiến hệ thống chậm đi hay không.
- Có thể chuyển đổi tự do giữa dịch vụ Web và chế độ ứng dụng Desktop (pywebview) mà không cần sửa code.
Tôi chưa biết dự án này sẽ mở rộng tới đâu, nhưng nếu được trau chuốt tốt, tôi có chút kỳ vọng rằng có thể xây dựng các dịch vụ mức MVP vốn thường làm bằng Django hay RoR nhanh hơn nhiều chỉ với Python. Để cho thấy khả năng thực tế, tôi cũng đã kèm theo mã ví dụ xây dựng Blog bằng Violit.
Dù vẫn còn ở giai đoạn rất sơ khai là v0.0.4 (PoC), dự án đã nhận được phản hồi khá tích cực trên Reddit và những nơi khác, và chỉ sau 2 tuần công khai đã vượt 200 sao nên tôi mạnh dạn chia sẻ cả ở đây. Trước giờ tôi hầu như luôn chỉ phát triển phần mềm cho công việc công ty... và đây là lần đầu tiên tôi làm một dự án mã nguồn mở hoàn toàn công khai như vậy. Với cá nhân tôi, đây là trải nghiệm mang lại rất nhiều niềm vui thuần túy của việc phát triển phần mềm.
Nếu khi nào bạn cần làm Web UI bằng Python, rất mong bạn ghé xem thử.. :)
- GitHub Repo. : https://github.com/violit-dev/violit
- README tiếng Hàn : https://github.com/violit-dev/violit/blob/main/README_KOR.md
- Ví dụ Blog : https://github.com/violit-dev/violit/…
16 bình luận
Hoàn toàn ủng hộ
Cảm ơn mọi người rất nhiều vì sự ủng hộ. :) Tôi sẽ cố gắng cập nhật thật chăm chỉ và vui vẻ. Niềm vui này rất lớn.
Gần đây tôi đã thử tự động hóa công việc bằng pywebview. Vì là ứng dụng desktop nên tôi đang băn khoăn không biết nên xử lý phần web thế nào... nếu dùng cái này trong pywebview thì có thể dễ dàng sử dụng cả trên web không?
Liệu có thể dễ dàng di chuyển một ứng dụng được phát triển bằng PyWebView sang website bằng cách sử dụng violit không?
Có vẻ câu hỏi trước của tôi chưa đủ cụ thể nên xin hỏi lại.
Hiện tại tôi đang làm và sử dụng một ứng dụng desktop bằng pywebview.
Tôi thấy Violit hỗ trợ đa nền tảng web/desktop (pywebview) nên khá tò mò.
nhưng tôi muốn hỏi liệu ở quy mô dịch vụ thực tế, kiến trúc đó có thật sự được thiết kế để vẫn giữ cùng một codebase và mở rộng thành dịch vụ web hay không. (Xét từ góc độ cấu trúc triển khai pywebview → web)
Xin chào. Mức độ khó khi migration phụ thuộc rất nhiều vào cấu trúc của App hiện có mà bạn đã xây dựng.
Nếu ứng dụng hiện tại được triển khai chỉ bằng js api của pywebview hoặc cách tải HTML cục bộ, không có web server riêng như FastAPI, thì để triển khai lên web bạn sẽ phải viết lại tầng giao tiếp từ đầu. Vì vậy, có thể sẽ khó chuyển ngay đoạn mã bạn đã viết bằng pywebview sang web một cách dễ dàng.
Phần này có thể xem là không liên quan đến violit. Thay vì violit chuyển đổi App hiện có được tạo bằng pywebview, có thể hiểu là nếu xây bằng violit thì ngay từ đầu nó được thiết kế để hỗ trợ đồng thời web và pywebview (desktop).
Cảm ơn bạn.
Bên dưới, tôi đã chuẩn bị sẵn trang web demo và tài liệu để bạn có thể dùng thử ngay.
Bạn hãy xem thử nhé. :)
Xin lưu ý, cả hai website đều được tạo bằng Violit.
Cảm ơn bạn. Tôi đang cân nhắc thử dùng cái này cho công việc ở công ty.!!
Vâng, cảm ơn bạn. Hãy dùng thử, và nếu có chỗ nào bất tiện thì hãy cho tôi biết nhé.
Có vẻ như cần bổ sung thêm phần mã kiểm thử và tài liệu hóa.
Bên dưới, tôi đã chuẩn bị sẵn trang web demo và tài liệu để bạn có thể dùng thử ngay.
Bạn nên xem thử một lần. :)
Xin lưu ý, cả hai website đều được xây dựng bằng Violit.
Vâng, cảm ơn bạn vì phản hồi rất hữu ích. Hiện tại phần triển khai vẫn đang ở mức POC, nên ở cấp độ public interface và design vẫn có khá nhiều thay đổi không tương thích, vì vậy kế hoạch hiện tại là sẽ bổ sung mã kiểm thử từ phiên bản 0.5.
Đúng như bạn nói, trước mắt chúng tôi đang tiến hành mở trang chủ và làm tài liệu, nên có lẽ sẽ sớm ra mắt. Dù sao thì đối tượng mục tiêu đầu tiên cũng là những người dùng streamlit hiện có, và vì cú pháp gần như giống hệt nên trước đây chúng tôi có phần cảm thấy nhu cầu tài liệu hóa không quá lớn.
Mong bạn chờ thêm một chút nhé~
Sẽ rất tuyệt nếu có một trang web demo để có thể dùng thử ngay.
Tôi đã chuẩn bị sẵn trang web demo để bạn có thể dùng thử ngay bên dưới, cùng với tài liệu Documentation.
Bạn nên xem thử một lần. :)
Xin lưu ý là cả hai website đều được xây dựng bằng Violit.
Vâng, cảm ơn bạn vì ý kiến rất hay. Vì vẫn còn là phiên bản ban đầu nên hiện chưa có trang chủ, nhưng nếu sau này làm trang chủ thì có lẽ bạn sẽ có thể thử dùng nhiều widget khác nhau trên web. Trên hết, hiện tại chúng tôi đang dần điều chỉnh thiết kế để nhấn mạnh rằng có thể tạo ra giao diện đẹp hơn so với các lựa chọn thay thế khác. :)