perf(grid): CJK text lays out ~40x slower than Latin/Cyrillic; add a CJK fallback family to the monospace stack
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 66/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Lĩnh vực
- desktop, performance
Hướng nghiên cứu
Start with lib/features/workspace/grid/grid_cell_renderer.dart and QueryaTypography.monoFontFamilyFallback; trace how the editor, cell inspectors, and ERD card get their font styles. Share a platform-specific CJK fallback list while keeping monospace first, then run or add a CJK layout benchmark and check that timings fall below 100 us per paragraph without visible changes to Latin or Cyrillic text.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Problem
Text containing CJK characters is laid out ~40x slower than Latin / Cyrillic text, in every place that sets only fontFamily: 'monospace' (result grid cells: lib/features/workspace/grid/grid_cell_renderer.dart, and the editor stack in QueryaTypography.monoFontFamilyFallback, which has no CJK family).
When the primary family has no glyph the engine runs a system font-fallback search through fontconfig for the paragraph, and the result is not reused: the second batch of 400 new strings costs the same as the first.
Measurements
Profile build on Linux, TextPainter.layout of 400 unique 18-character strings per alphabet, fontSize: 12, fontFamily: 'monospace' (what grid cells use today), same machine, same session:
| Alphabet | us / paragraph (first 400) | us / paragraph (next 400) |
|---|---|---|
| ASCII | 25.5 | 9.1 |
| Cyrillic | 10.5 | 9.8 |
| Latin extended (pl / de / fr) | 10.1 | 9.7 |
| symbols / punctuation (— … → €) | 12.5 | 12.6 |
| CJK | 442.6 | 392.0 |
Adding an explicit CJK family to the style's fallback list (Noto Sans CJK was installed here):
| Style | us / paragraph, CJK |
|---|---|
monospace (today) |
384-403 |
monospace + fontFamilyFallback: ['Noto Sans CJK HK'] |
30-59 |
'Noto Sans CJK HK' directly |
19-24 |
A visible window of a grid is ~1000+ cells, so a result with CJK text pays hundreds of ms of text layout on the UI isolate on every new result set and on scroll, versus ~10-30 ms with a fallback family. Latin / Cyrillic data is not affected, and the family name itself (monospace vs concrete vs a missing family) makes no measurable difference for ASCII (10-20 us in all variants).
Solution
- Give grid cells (and
QueryaTypography) a per-platform CJK fallback tail, e.g. Linux:Noto Sans Mono CJK SC/JP/KR,Noto Sans CJK SC/JP/KR,WenQuanYi Micro Hei; macOS:PingFang SC,Hiragino Sans,Apple SD Gothic Neo; Windows:Microsoft YaHei,Yu Gothic,Malgun Gothic. A family that is not installed costs ~2-5 us per paragraph (measured with 9 missing families in the editor stack), so a long tail is cheap. - Put the list in one place (
QueryaTypography) and use it for grid cells (currently the literal'monospace'), the editor, cell inspectors and the ERD card. - Keep
monospacefirst so Latin text keeps rendering in the user's monospace font.
Acceptance
- Grid cells use the shared fallback list.
- A widget or benchmark test lays out CJK strings and reports us/paragraph before / after (target: well below 100 us).
- No visible change for Latin / Cyrillic data.
- Ngôn ngữ chính
- Dart
- Star
- 23
- Fork
- 1
- Merge trung bình
- 31 phút
- Pull request đã merge (30 ngày)
- 570
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của QueryaHub/Querya-Desktop
-
enhancement ui
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
QueryaHub/Querya-Desktop#1689 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
ui(dialogs): make destructive query and DML preview dialogs adaptive and prevent table name overflowĐang mởbug frontend
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
QueryaHub/Querya-Desktop#1642 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug error-handling settings
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 78/100
QueryaHub/Querya-Desktop#1637 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
QueryaHub/Querya-Desktop#1636 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement marketplace
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
QueryaHub/Querya-Desktop#1635 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của QueryaHub/Querya-Desktop
Issue tương tự
-
good-first-issue P3
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
flutter/dart-intellij-third-party#758 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Bug: Incorrect location coordinates on logged Sound Meter dataCó thể đã có người làm @Jashan32 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
area/archive bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
DarkFlippers/qUnleashed#374 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent:in-progress agent:ready feature P2 · 中 区域: 悬浮窗
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
ASDW51/DanmuFloat#178 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Missing workoutsĐang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
InlitX/GymMane#237 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày