perf(cache): use Arc<str> for etag/content_type in ContentCachePort
Replace String with Arc<str> for etag and content_type fields in the content cache. String::clone() allocates and copies the full string on every cache hit (O(n)), while Arc<str>::clone() is O(1) — just an atomic ref-count increment. This eliminates 2 heap allocations per cache hit on the hottest download path. At 1000 req/s that is 2000 fewer alloc/dealloc cycles per second. Changed files: - cache_ports.rs: trait signatures String → Arc<str> - file_content_cache.rs: CacheEntry fields, get/put methods, tests - stubs.rs: StubContentCachePort signatures - file_retrieval_service.rs: caller creates Arc<str> before put()
This commit is contained in:
@@ -197,13 +197,14 @@ impl FileRetrievalService {
|
||||
|
||||
// Store in cache
|
||||
if let Some(cache) = &self.content_cache {
|
||||
let etag = format!("\"{}-{}\"", id, modified_at);
|
||||
let etag: Arc<str> = format!("\"{}-{}\"", id, modified_at).into();
|
||||
let ct: Arc<str> = Arc::from(&*mime_type);
|
||||
cache
|
||||
.put(
|
||||
id.to_string(),
|
||||
content_bytes.clone(),
|
||||
etag,
|
||||
mime_type.clone(),
|
||||
ct,
|
||||
)
|
||||
.await;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user