agentsclimarketplace

Performance

Skill krzysztofsurdy/code-virtuoso/skills/knowledge/performance

Application performance optimization patterns and profiling-driven methodology. Use when the user asks to optimize application speed, reduce latency, diagnose slow queries, fix N+1 problems, implement caching layers, profile memory usage, tune database queries, apply lazy loading, configure connection pooling, or set performance budgets. Covers CPU and memory profiling, caching strategies (application, HTTP, CDN), query optimization, indexing, and load testing approaches.From its SKILL.md

Install
npx -y skills add krzysztofsurdy/code-virtuoso --skill performance

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 20 stars20 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

10.1 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it

Performance Optimization

Performance work follows one rule above all others: measure before you change anything. Intuition about bottlenecks is wrong more often than it is right. Every optimization should start with profiling, produce a hypothesis, apply a targeted fix, and verify with another measurement.

Core Principles

PrincipleMeaning
Measure firstNever optimize without profiling data - gut feelings about bottlenecks are unreliable
Optimize the critical pathFocus on the code that runs most frequently or blocks user-visible latency
Set budgetsDefine acceptable latency, throughput, and resource usage before you start
Avoid premature optimizationReadable, correct code first - optimize only when measurements show a real problem
Know your tradeoffsEvery optimization trades something (memory for speed, complexity for throughput, freshness for latency)

Profiling and Benchmarking

Profiling identifies where time and resources are spent. Without it, you are guessing.

Types of Profiling

TypeWhat It RevealsWhen to Use
CPU profilingHot functions, call frequency, execution time distributionSlow request handling, high CPU usage
Memory profilingAllocation rates, heap size, object retention, leaksGrowing memory usage, OOM errors, GC pressure
I/O profilingDisk reads/writes, network calls, blocking waitsSlow file operations, external service latency
Database profilingQuery execution time, query count per request, slow queriesHigh DB load, N+1 patterns, missing indexes

The Profiling Workflow

  1. Baseline - Capture metrics under normal conditions before any changes
  2. Identify - Find the hotspot consuming the most time or resources
  3. Hypothesize - Form a specific theory about why it is slow
  4. Fix - Apply a single, targeted change
  5. Verify - Measure again to confirm improvement and check for regressions

Performance Budgets

Define limits that trigger action when exceeded:

  • Response time: P50, P95, P99 latency targets per endpoint
  • Throughput: Minimum requests per second under expected load
  • Resource usage: CPU, memory, and connection limits per service
  • Page weight: Maximum transfer size for frontend assets

See Profiling Patterns Reference for detailed profiling workflows, bottleneck signatures, and load testing strategies.


Caching Strategies

Caching eliminates redundant computation and data fetching by storing results closer to where they are needed.

Cache Layers

LayerLocationLatencyUse Case
L1 - In-processApplication memory (object cache, memoization)NanosecondsHot data accessed many times per request
L2 - DistributedRedis, Memcached, shared cacheSub-millisecond to low millisecondsData shared across application instances
HTTP cacheBrowser, reverse proxy (Varnish, Nginx)Zero network round-trip for client cacheStatic assets, cacheable API responses
CDNEdge servers worldwideLow latency from geographic proximityStatic files, pre-rendered pages, media
Database cacheQuery result cache, buffer poolVariesRepeated identical queries

Invalidation Approaches

StrategyHow It WorksBest For
TTL-basedCache entries expire after a fixed durationData that tolerates bounded staleness
Event-basedCache is cleared when the source data changesData that must stay fresh after writes
Write-throughWrites update both the cache and the backing store simultaneouslyRead-heavy workloads needing strong consistency
Write-behindWrites update the cache immediately; backing store is updated asynchronouslyHigh write throughput where eventual consistency is acceptable

Cache Stampede Prevention

When a popular cache key expires, many concurrent requests may all try to regenerate it at once, overwhelming the backend. Three approaches prevent this:

  • Locking - Only one request regenerates; others wait or serve stale data
  • Probabilistic early recomputation - Requests randomly refresh the cache before expiration, spreading regeneration over time
  • Request coalescing - Duplicate in-flight requests are collapsed into a single backend call

See Caching Strategies Reference for implementation patterns with multi-language examples.


Database Optimization

Database queries are the most common performance bottleneck in web applications.

Index Strategy

  • Create indexes on columns used in WHERE, JOIN, and ORDER BY clauses
  • Use composite indexes that match your most frequent query patterns (leftmost prefix rule)
  • Covering indexes include all columns a query needs, avoiding table lookups entirely
  • Monitor unused indexes - they slow down writes without helping reads

N+1 Query Prevention

The N+1 problem occurs when code fetches a list of N records, then issues one additional query per record to load related data. Instead of 1 query, you execute N+1.

Detection signals:

  • Query count scales linearly with result set size
  • Many nearly identical queries differing only in a single parameter
  • Profiler shows dozens or hundreds of queries for a single page load

Prevention strategies:

  • Eager loading (JOIN or separate batch query upfront)
  • Batch loading (collect IDs, fetch all related records in one query)
  • DataLoader pattern (automatic batching and deduplication within a request)

Connection Pooling

Opening a database connection is expensive (TCP handshake, authentication, TLS negotiation). Connection pools maintain a set of reusable connections:

  • Size the pool based on expected concurrency - too small causes queueing, too large overwhelms the database
  • Always return connections to the pool promptly - leaked connections exhaust the pool
  • Set idle timeouts to reclaim unused connections
  • Use external poolers (like PgBouncer for PostgreSQL) when application-level pooling is insufficient

See Database Optimization Reference for query patterns, explain plan analysis, and multi-language examples.


Memory and Resource Management

Memory Optimization Patterns

PatternDescription
Object poolingReuse expensive objects instead of allocating and discarding them
StreamingProcess large datasets as streams instead of loading everything into memory
Lazy initializationDefer creation of expensive objects until they are actually needed
Weak referencesHold references that do not prevent garbage collection
Buffer reuseAllocate buffers once and reuse them across operations

Lazy Loading

Lazy loading defers work until the result is actually needed. It reduces startup time and memory usage but adds complexity and can cause unexpected latency later.

Where lazy loading helps:

  • Loading related database records only when accessed
  • Initializing expensive service connections on first use
  • Loading UI components or assets only when they become visible

Where lazy loading hurts:

  • When the deferred work always happens anyway (just adds overhead)
  • When it moves latency from a predictable startup phase to unpredictable user interactions
  • When it creates N+1 query patterns (see Database Optimization above)

Batch Operations

Replace individual operations with batch alternatives wherever possible:

  • Batch inserts instead of inserting one row at a time
  • Batch API calls instead of calling an external service N times
  • Bulk file operations instead of processing files individually

Quick Reference: Common Bottleneck Patterns

SymptomLikely CauseFirst Investigation Step
Slow response times, low CPUI/O waits (database, network, disk)Profile I/O and check query logs
High CPU, normal response timesInefficient algorithms or excessive computationCPU profile to find hot functions
Growing memory over timeMemory leak (unreleased references, unbounded caches)Heap dump comparison over time
Intermittent slowness under loadResource contention (locks, connection pool exhaustion)Check pool sizes and lock wait times
Fast locally, slow in productionNetwork latency, missing caches, different data volumesCompare profiling data between environments

Reference Files

ReferenceContents
Caching StrategiesCache layers, invalidation patterns, stampede prevention with multi-language examples
Database OptimizationQuery optimization, N+1 prevention, connection pooling, batch operations with multi-language examples
Profiling PatternsProfiling workflows, bottleneck signatures, performance budgets, load testing strategies

Integration with Other Skills

SituationRecommended Skill
Performance issues caused by poor architectureInstall knowledge-virtuoso from krzysztofsurdy/code-virtuoso for clean architecture guidance
Need to refactor slow code pathsInstall knowledge-virtuoso from krzysztofsurdy/code-virtuoso for refactoring techniques
API response time optimizationInstall knowledge-virtuoso from krzysztofsurdy/code-virtuoso for API design principles
Database schema and query designInstall knowledge-virtuoso from krzysztofsurdy/code-virtuoso for testing strategies to verify optimizations

What ships with it: 3 files

23.4 KB alongside SKILL.md

Gives 0 of the 12 instructions most databases sql skills give in ~2.0k tokens

Counted across 609 of the 712 authors here whose files we hold, read 2026-09-06

  • Index all foreign key columnsin 26 of 609
  • Use cursor pagination instead of offsetin 25 of 609, across 20 files
  • Use timestamptz for timestampsin 21 of 609
  • Specify columns instead of using select starin 20 of 609, across 10 files
  • Use parameterized queries for all database interactionsin 20 of 609, across 19 files
  • Use Enum for categorical datain 17 of 609, across 7 files
  • Order by frequently filtered columnsin 17 of 609, across 7 files
  • Batch data insertsin 17 of 609, across 7 files
  • Use expand-contract pattern for schema changesin 17 of 609
  • Use materialized views for real-time aggregationsin 16 of 609, across 6 files
  • Partition tables by timein 16 of 609, across 6 files
  • Use smallest appropriate data typesin 16 of 609, across 6 files

Said here and by no other author read

  • profile code to identify bottlenecks
  • form a hypothesis before applying a fix
  • apply a single targeted fix
  • define performance budgets before starting
  • optimize the critical path
  • implement caching to reduce redundant computation

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.