perf: Eliminate unnecessary string allocations in config handling

オープン
#438 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
リファクタリング
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
rust

調査の方向性

Start in crates/terraphim_service/src/lib.rs at lines 86-89, 195-198, 342-348, 421-428, and 527-532, then trace callers of the configuration helpers. Review the performance analysis from PR #429 and check all affected return types. Done means the unnecessary clones and allocations are removed while configuration handling retains its behavior and the expected allocation improvement is verified.

索引モデルが issue の本文から書いたものです。

説明

enhancement rust

Issue Description

Unnecessary string cloning and allocations in configuration lookups add GC pressure.

Location

crates/terraphim_service/src/lib.rs (lines 86-89, 195-198, 342-348, 421-428, 527-532)

Current Code

```rust
// Line 86-89: Cloning entire HashMap
let nested_map: AHashMap<String, Value> = nested_obj
.iter()
.map(|(k, v)| (k.clone(), v.clone()))
.collect();

// Line 195-198: Unnecessary to_string()
fn get_string_extra(extra: &AHashMap<String, Value>, key: &str) -> Option {
extra.get(key).and_then(|v| v.as_str().map(|s| s.to_string()))
// ^^^^^^^^^^^^^^^^ Unnecessary allocation
}
```

Impact

  • MEDIUM priority - Performance
  • Adds GC pressure for frequent calls
  • Unnecessary memory allocations

Recommended Fix

```rust
// Return Cow to avoid allocation when possible
fn get_string_extra<'a>(
extra: &'a AHashMap<String, Value>,
key: &str
) -> Option<Cow<'a, str>> {
extra.get(key).and_then(|v| {
v.as_str().map(|s| Cow::Borrowed(s))
})
}

// For nested_map, use references instead
fn build_from_nested_extra(
nested_obj: &serde_json::Map<String, Value>
) -> Option<Arc> {
// Use get_string_extra directly on nested_obj
if let Some(provider) = nested_obj.get("llm_provider")
.and_then(|v| v.as_str())
{
// ...
}
}
```

Expected Improvement

  • 20-30% reduction in allocations for config lookups
  • Reduced memory pressure
  • Faster config operations

References

  • Identified in performance analysis for PR #429
  • Related to configuration handling
主要言語
Rust
スター
62
フォーク
5
平均マージ
2時間 27分
マージ済み PR(30日)
1

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

terraphim/terraphim-ai のほかの issue

terraphim/terraphim-ai の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。