perf(grid): CJK text lays out ~40x slower than Latin/Cyrillic; add a CJK fallback family to the monospace stack
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 66/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Domaine
- desktop, performance
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Dart
- Étoiles
- 23
- Forks
- 1
- Merge moyen
- 31 min
- PR mergées (30 j)
- 570
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de QueryaHub/Querya-Desktop
-
enhancement ui
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
QueryaHub/Querya-Desktop#1689 ·
Les mainteneurs répondent en général sous 1 jour
-
ui(dialogs): make destructive query and DML preview dialogs adaptive and prevent table name overflowOuvertebug frontend
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
QueryaHub/Querya-Desktop#1642 ·
Les mainteneurs répondent en général sous 1 jour
-
bug error-handling settings
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
QueryaHub/Querya-Desktop#1637 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
QueryaHub/Querya-Desktop#1636 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement marketplace
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
QueryaHub/Querya-Desktop#1635 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de QueryaHub/Querya-Desktop
Issues similaires
-
Standalone dash flashes as its own RSVP step (e.g. Russian dialogue)Peut-être pris @bezig01 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
daniel-pimenta-cc/ledor#53 ·
-
Iteration CounterOuverteenhancement firebase
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
brysonddelozier/scribbles#24 ·
-
bug good first issue P2-Medium
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
basictech01/uniun#305 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
daohoangson/flutter_widget_from_html#1657 ·
Les mainteneurs répondent en général sous 3 jours
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
RevenueCat/purchases-flutter#1973 ·
Les mainteneurs répondent en général sous 1 jour