功能建议:多项性能优化方案
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- javascript
- Ambito
- tooling
Direzione di ricerca
The issue describes five optimizations but names no source files or tests. Start by locating CONFIG, buildPageConfig(), fetchTransResult(), the TreeWalker scan, regex matching, and OBSERVER_CONFIG in the userscript; check how each currently works before evaluating the proposed changes. Done means the five optimizations are implemented and verified, including the stated fallback and cache clearing behavior.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
优化 1:页面组回退机制
可能在多个页面类型(repository/actions、repository/tree、repository)中出现,目前需要在各 pageType 的 static 下分别添加,维护成本高。
实现:在 CONFIG 中增加 pageGroupFallback 配置,指定 pageType 之间的回退链。buildPageConfig() 合并静态词典时按 public → 回退页 → 当前页 优先级合并。已在本地实现并验证。
优化 2:翻译缓存
每次文本翻译都要遍历正则规则列表,同一文本在页面重复出现(如按钮标签)会重复遍历。
实现:在 fetchTransResult() 中增加 Map 缓存,首次匹配后缓存结果,后续相同文本直接 O(1) 返回。翻页时清空缓存。
优化 3:TreeWalker 改为 querySelectorAll 定向扫描
当前使用 createTreeWalker 遍历整个 DOM 树,大量无翻译价值的节点也被遍历。
参考 benchmark:
- https://benchmarklab.azurewebsites.net/Benchmarks/ShowResult/615410(querySelectorAll 比 TreeWalker 快约 2 倍)
- https://measurethat.net/Benchmarks/ShowResult/581071
实现:改为 rootNode.querySelectorAll() 只选择翻译目标标签(a、span、button、label、h1~h6、li、td、th、div、p 等),利用浏览器原生 CSS 选择引擎。极端情况回退 TreeWalker。
优化 4:正则循环加速——触发词过滤 + 首字母分组
当前正则循环线性遍历全部规则(部分页面 150+ 条),每条文本都从头试到尾。不匹配任何正则的文本(如文件名、hash)也需完整遍历。
实现:从每条正则中提取触发词(Deploy、Build 等),构建 triggerWords Set,文本不含任何触发词时直接跳过正循环;将正则按触发词首字母分组(D → [Deploy..., Docker...]),文本以某字母开头只查对应组。
优化 5:移除 characterData 减少无效触发
当前 OBSERVER_CONFIG 启用 characterData: true,翻译文本后设置 node.data 会再次触发 MutationObserver,导致已翻译节点被二次处理。
实现:移除 characterData,仅监听 childList + attributes。新增内容通过 childList 自然被捕获。
- Lingua principale
- JavaScript
- Stelle
- 35.1k
- Fork
- 2k
- Merge medio
- 2g 1h
- PR unite (30g)
- 9
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di maboloshi/github-chinese
-
添加报告文档问题的模板Apertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
maboloshi/github-chinese#823 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
maboloshi/github-chinese#810 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 44/100
maboloshi/github-chinese#809 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
项目首页除了顶栏几乎没有翻译Apertabug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
maboloshi/github-chinese#803 · 1 commento · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
一些没有翻译完整的页面/句子(大部分是团队的设置界面)Aperta请求翻译
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
maboloshi/github-chinese#802 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di maboloshi/github-chinese
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
postcss/postcss.org#302 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
ImranR98/apps.obtainium.imranr.dev#2000 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
routing: the tray panel's stage stands still with motion reduced while a request is in flightAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
microsoft/monaco-editor#5577 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Ebony-Vinyl/dsh-our-free-model#785 ·
I maintainer di solito rispondono entro 1 giorno