Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

perf(grid): CJK text lays out ~40x slower than Latin/Cyrillic; add a CJK fallback family to the monospace stack

未关闭
#1,553 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
66/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
dart, flutter

调研方向

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.

由索引模型根据 Issue 内容生成。

描述

data-grid enhancement P3 performance ui
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 monospace first 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.
主要语言
Dart
星标
23
派生
1
平均合并
31 分钟
30 天内合并 PR
570

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

QueryaHub/Querya-Desktop 的其他 Issue

查看 QueryaHub/Querya-Desktop 的全部 Issue

相似的 Issue

更多 Dart Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。