Agent Skills: OneKey Performance Optimization

Performance optimization for React/React Native — re-renders, memoization, FlashList, memory leaks, and bundle size.

UncategorizedID: onekeyhq/app-monorepo/1k-performance

Repository

OneKeyHQLicense: NOASSERTION
2,337498

Install this agent skill to your local

pnpm dlx add-skill https://github.com/OneKeyHQ/app-monorepo/tree/HEAD/.skillshare/skills/1k-performance

Skill Files

Browse the full folder contents for 1k-performance.

Download Skill

Loading file tree…

.skillshare/skills/1k-performance/SKILL.md

Skill Metadata

Name
1k-performance
Description
Performance optimization for React/React Native — re-renders, memoization, FlashList, memory leaks, and bundle size.

OneKey Performance Optimization

Performance optimization patterns and best practices for React/React Native applications in the OneKey monorepo.

Quick Reference

| Category | Key Optimization | When to Use | |----------|------------------|-------------| | Concurrent Requests | Limit to 3-5, use executeBatched | Multiple API calls, network-heavy operations | | Bridge Optimization | Minimize crossings, batch data | React Native bridge overhead, iOS/Android | | List Rendering | FlashList, windowSize={5}, content-visibility | Lists with 100+ items | | Memoization | memo, useMemo, useCallback | Expensive computations, prevent re-renders | | Heavy Operations | InteractionManager, setTimeout | UI blocking operations |

Critical Performance Rules

❌ FORBIDDEN: Too Many Concurrent Requests

// ❌ BAD - Can freeze UI with 15+ requests
const requests = items.map(item => fetchData(item));
await Promise.all(requests);

✅ CORRECT: Batched Execution with Concurrency Limit

async function executeBatched<T>(
  tasks: Array<() => Promise<T>>,
  concurrency = 3,
): Promise<Array<PromiseSettledResult<T>>> {
  const results: Array<PromiseSettledResult<T>> = [];
  for (let i = 0; i < tasks.length; i += concurrency) {
    const batch = tasks.slice(i, i + concurrency);
    const batchResults = await Promise.allSettled(
      batch.map((task) => task()),
    );
    results.push(...batchResults);
  }
  return results;
}

const tasks = items.map(item => () => fetchData(item));
await executeBatched(tasks, 3); // Max 3 concurrent

🚨 Built-in Optimizations

Already Optimized - NO ACTION NEEDED:

| Component | Optimization | Details | |-----------|--------------|---------| | ListView | windowSize={5} | Auto-limits visible items | | Tabs | contentVisibility: 'hidden' | Hides inactive tabs | | Dialog | contentVisibility: 'hidden' | Hides when closed |

Detailed Guide

For comprehensive performance optimization strategies, see performance.md.

Topics covered:

  • Concurrent request control
  • React Native bridge optimization
  • Heavy operations offloading
  • List rendering (windowSize, FlashList, content-visibility)
  • Memoization & callbacks
  • State updates optimization
  • Image optimization
  • Async operations & race conditions
  • Real-world iOS AppHang case study

Related Skills

  • /1k-coding-patterns - General coding patterns and conventions
  • /1k-sentry-analysis - Sentry error analysis (includes performance issues)
  • /react-native-best-practices - React Native specific optimizations