7 điều học được khi xây dựng một framework TUI hiện đại
Terminal rất nhanh
- Trình giả lập terminal hiện đại là phần mềm cực kỳ tinh vi
- Có thể dùng kết xuất tăng tốc bằng phần cứng để giảm hiện tượng nhấp nháy màn hình
- Ba mẹo để giảm nhấp nháy:
- Đừng xóa màn hình mà hãy ghi đè lên
- Ghi ra đầu ra chuẩn trong một lần duy nhất
- Sử dụng giao thức Synchronized Output
- Textual dùng mặc định 60fps để mang lại hoạt ảnh mượt mà
DictViews thật đáng ngạc nhiên
- Các phương thức
keys() và items() của dict trong Python trả về KeysView và ItemsView
- Có thể dễ dàng tìm các mục đã thay đổi bằng cách dùng phép đối xứng sai khác của đối tượng
ItemsView
- Trong Textual, điều này được dùng để tối ưu cập nhật khi các thuộc tính CSS thay đổi
lru_cache rất nhanh
- Decorator
@lru_cache của mô-đun functools dùng để cache giá trị trả về của hàm
- Trong Textual, việc dùng
@lru_cache cho các hàm nhỏ được gọi thường xuyên giúp cải thiện hiệu năng
- Cần kiểm tra thông tin cache (
cache_info()) để xác nhận việc cache có hiệu quả hay không
Đối tượng bất biến là tốt nhất
- Có thể tận dụng lợi ích của đối tượng bất biến bằng cách dùng tuple,
NamedTuple hoặc dataclass đông cứng trong Python
- Dùng đối tượng bất biến giúp viết mã không có tác dụng phụ, từ đó dễ kiểm thử và cache hơn
Unicode art rất hữu ích
- Các sơ đồ dùng ký tự khung Unicode rất hữu ích cho tài liệu hóa
- Khi dùng cùng docstring được viết tốt, nó càng phát huy hiệu quả
Phân số là chính xác
- Mô-đun
fractions của Python giúp tránh lỗi số thực dấu phẩy động
- Trong Textual, khi chia màn hình theo tỷ lệ, người ta dùng phân số để triển khai bố cục chính xác
Emoji thật khủng khiếp
- Hỗ trợ emoji trong terminal rất khó đoán và phức tạp
- Dù dùng cơ sở dữ liệu Unicode để kiểm tra độ rộng của emoji, các emoji mới vẫn có thể tạo ra kết quả khó lường
- Emoji đa codepoint còn gây ra vấn đề lớn hơn
Tóm tắt của GN⁺
- Bài viết này cung cấp các mẹo và thủ thuật hữu ích khi phát triển ứng dụng terminal bằng Python
- Chia sẻ những lời khuyên thực tiễn rút ra từ kinh nghiệm phát triển framework Textual
- Giải thích cách xử lý các vấn đề phức tạp như emoji để giúp ích cho các lập trình viên
- Các dự án có tính năng tương tự gồm có urwid và prompt_toolkit
1 bình luận
Ý kiến trên Hacker News
Nhà phát triển TUI cuối cùng sẽ phải coi việc xử lý Unicode, ký tự quốc tế và emoji như một dự án riêng
Không thích việc Textual cố bắt chước React
Sau khi thử dùng Textual, hóa ra vẫn phải dùng CSS
TUI này đẹp, nhưng tôi không nghĩ ra tình huống thực tế nào để dùng nó
kitty cung cấp nhiều tính năng hơn
Không hiểu vì sao các kỹ sư phần mềm lại quan tâm đến TUI đến vậy
Monodraw chỉ dành cho MacOS, nhưng cũng có lựa chọn thay thế tốt trên nền tảng khác
"Ghi đè, không xóa" là cách làm game thời xưa
Có cách ước lượng phiên bản Unicode bằng cách kiểm tra vị trí con trỏ trong terminal
Sau khi đánh giá nhiều thư viện TUI, FTXUI là thứ dễ dùng và đáng tin cậy nhất