Skip to content

PriceData Map-Based Storage

Performance optimization converting PriceData from plain objects to Map.

Benchmark Results (26 entries - asset prices)

OperationObjectMapSpeedup
Creation7.25μs2.02μs3.6x
Iteration1.05μs0.075μs14x
Merge8.75μs1.89μs4.6x
Has-check0.89μs0.20μs4.4x

For cache size checks (30k entries):

  • Object.keys().length: 5.4s (O(n))
  • Map.size: 0.022ms (O(1))
  • 245,000x speedup

Type Definitions

typescript
// Internal storage (fast)
type PriceData = Map<SymbolIdentifiers, number>;

// JSON serialization (RPC boundaries)
type PriceDataObject = { [ticker in SymbolIdentifiers]?: number };

Helper Functions

typescript
import {
  createPriceData,     // Create empty Map
  priceDataFromObject, // Object → Map
  priceDataToObject,   // Map → Object (RPC)
  mergePriceData,      // Merge multiple Maps
  clonePriceData,      // Clone a Map
} from "@/constants/price-data";

Usage Patterns

typescript
// Internal: Use Map methods
const prices = createPriceData();
prices.set(SymbolIdentifiers.BTCUSD, 50000);
const btcPrice = prices.get(SymbolIdentifiers.BTCUSD);
const hasETH = prices.has(SymbolIdentifiers.ETHUSD);
const count = prices.size;  // O(1)!

// RPC: Convert at boundaries
return priceDataToObject(prices);

Architecture

Internal Storage       RPC Boundary          External
──────────────────────────────────────────────────────
Map<Symbol, number> → priceDataToObject() → JSON
                    ← priceDataFromObject() ←
  • Internal: Map for performance
  • RPC returns: Plain objects (JSON-serializable)
  • Conversion: Only at boundaries, minimal overhead