Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

perf(redis): sort key tree names without lower-casing on every comparison

Offen Anfängerfreundlich
#1,551 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
76/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
dart, flutter, redis
Bereich
backend, performance

Rechercherichtung

Beginne mit RedisKeyTreeEngine.buildTree in lib/features/redis/redis_key_tree_engine.dart und den vorhandenen Tests für RedisKeyTreeEngine. Prüfe, wie Wurzelblätter, Ordnernamen und Ordnerblätter sortiert werden, und füge dann einen Test mit gemischter Groß- und Kleinschreibung hinzu, der Namen enthält, die sich bei ignorierter Groß- und Kleinschreibung gleichen. Fertig ist die Aufgabe, wenn die Tests bestehen, das vorhandene Verhalten bei Gleichständen erhalten bleibt und kein Comparator in dieser Datei toLowerCase() aufruft.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

backend enhancement P3 performance
Problem

RedisKeyTreeEngine.buildTree (lib/features/redis/redis_key_tree_engine.dart) sorts root leaves, folder names and each folder's leaves with

..sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()))

so toLowerCase() runs twice per comparison, i.e. O(n log n) string allocations for an O(n) amount of information. A single folder with tens of thousands of keys (the common case for session:* / cache:*) pays for it when the tree is built.

Measurements

Standalone Dart AOT, names like Cache_123456789_Key:

Names toLowerCase() per compare Decorated (lowercase once, sort pairs)
5,000 3.2 ms 1.5 ms
50,000 47.5 ms 24.7 ms

About 2x. Not per-frame work, but it is a one-off pause of ~50 ms on a big keyspace that also happens on every refresh.

Solution
  • Sort decorated pairs (lower, node) (or precompute lowerName on the node) so the lowercase string is created once per element.
  • Same ordering as today (case-insensitive compare of the label); keep the existing tie-break behaviour.
Acceptance
  • RedisKeyTreeEngine tests unchanged and green; add a case with mixed-case and equal-ignoring-case names to pin the order.
  • No toLowerCase() inside a comparator in that file.
  • Optional: same pattern checked in other comparators (grep -rn "toLowerCase().compareTo" in lib/).
Vorherrschende Sprache
Dart
Sterne
23
Forks
1
Ø Merge
45 Min.
Gemergte PRs (30 T.)
529

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus QueryaHub/Querya-Desktop

Alle Issues in QueryaHub/Querya-Desktop

Ähnliche Issues

Weitere Issues zu Dart

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.