> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo usar getRecentPerformanceSamples

> Conoce los casos de uso, ejemplos de código, parámetros de solicitud, estructura de respuesta y consejos de getRecentPerformanceSamples.

El método RPC [`getRecentPerformanceSamples`](https://www.helius.dev/docs/api-reference/rpc/http/getrecentperformancesamples) proporciona una instantánea del rendimiento reciente de la red Solana. Devuelve una lista de muestras, tomadas aproximadamente cada 60 segundos, que detallan la cantidad de transacciones y slots procesados durante esos períodos. Estos datos son muy valiosos para supervisar el rendimiento y el estado de la red. Para obtener más contexto sobre las métricas de rendimiento de Solana, como TPS y tiempos de slot, consulta la [guía de Solana para empresas](https://www.helius.dev/blog/solana-for-enterprise).

## Casos de uso comunes

* **Supervisión del estado de la red:** Controla las tasas de procesamiento de transacciones y la producción de slots para evaluar el estado general de la red e identificar posibles congestiones o ralentizaciones.
* **Análisis de rendimiento:** Analiza los datos históricos de rendimiento para comprender el comportamiento de la red en distintas condiciones.
* **Paneles de control:** Muestra indicadores clave de rendimiento (KPI), como transacciones por segundo (TPS) y slots por minuto, en paneles de supervisión.
* **Planificación de capacidad:** Observa las tendencias de carga de la red para tomar decisiones de escalamiento de aplicaciones o infraestructura.

## Parámetros de la solicitud

1. **`limit`** (`usize`, opcional):
   * La cantidad de muestras de rendimiento más recientes que se devolverán.
   * Valor máximo: `720` (representa aproximadamente 12 horas de datos, ya que las muestras se toman cada 60 segundos).
   * Si se omite, el nodo RPC devolverá una cantidad predeterminada de muestras (el valor predeterminado exacto puede variar según el proveedor de RPC).

## Estructura de la respuesta

El campo `result` de la respuesta JSON-RPC es un arreglo de objetos de muestras de rendimiento, devueltos en orden cronológico inverso (primero la muestra más reciente). Cada objeto tiene la siguiente estructura:

* **`slot`** (`u64`): El número de slot en el que se registró esta muestra de rendimiento.
* **`numTransactions`** (`u64`): La cantidad total de transacciones (incluidas las transacciones de voto y sin voto) procesadas durante el `samplePeriodSecs` previo a este `slot`.
* **`numSlots`** (`u64`): La cantidad de slots procesados durante el `samplePeriodSecs` previo a este `slot`.
* **`samplePeriodSecs`** (`u16`): La duración, en segundos, durante la que se tomó esta muestra (normalmente `60`).
* **`numNonVoteTransactions`** (`u64`): La cantidad de transacciones procesadas durante el `samplePeriodSecs` que no fueron transacciones de voto de consenso.

## Ejemplos

### 1. Obtener las últimas 5 muestras de rendimiento

Este ejemplo solicita las cinco muestras de rendimiento más recientes de la red.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getRecentPerformanceSamples",
      "params": [5]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchRecentPerformance() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const samples = await connection.getRecentPerformanceSamples(5);
      if (samples && samples.length > 0) {
        console.log(`Fetched ${samples.length} performance samples:`);
        samples.forEach((sample, index) => {
          console.log(`--- Sample ${index + 1} ---`);
          console.log(`  Slot: ${sample.slot}`);
          console.log(`  Number of Slots in Period: ${sample.numSlots}`);
          console.log(`  Total Transactions: ${sample.numTransactions}`);
          console.log(`  Non-Vote Transactions: ${sample.numNonVoteTransactions}`);
          console.log(`  Sample Period (seconds): ${sample.samplePeriodSecs}`);
          const tps = sample.numTransactions / sample.samplePeriodSecs;
          const nonVoteTps = sample.numNonVoteTransactions / sample.samplePeriodSecs;
          console.log(`  Average TPS (Total): ${tps.toFixed(2)}`);
          console.log(`  Average TPS (Non-Vote): ${nonVoteTps.toFixed(2)}`);
        });
      } else {
        console.log('No performance samples returned.');
      }
    } catch (error) {
      console.error('Error fetching recent performance samples:', error);
    }
  }

  fetchRecentPerformance();
  ```
</CodeGroup>

### 2. Obtener la cantidad predeterminada de muestras de rendimiento

Este ejemplo omite el parámetro `limit` y solicita la cantidad predeterminada de muestras del nodo RPC.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getRecentPerformanceSamples"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchDefaultPerformanceSamples() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const samples = await connection.getRecentPerformanceSamples(); // No limit parameter
      if (samples && samples.length > 0) {
        console.log(`Fetched ${samples.length} (default) performance samples:`);
        // Process or log samples as needed - e.g., the first one
        const sample = samples[0];
        console.log(`--- Most Recent Sample ---`);
        console.log(`  Slot: ${sample.slot}`);
        console.log(`  Total Transactions: ${sample.numTransactions}`);
        console.log(`  Non-Vote Transactions: ${sample.numNonVoteTransactions}`);
        console.log(`  Slots in Period: ${sample.numSlots}`);
        console.log(`  Sample Period (seconds): ${sample.samplePeriodSecs}`);
      } else {
        console.log('No performance samples returned.');
      }
    } catch (error) {
      console.error('Error fetching default performance samples:', error);
    }
  }

  fetchDefaultPerformanceSamples();
  ```
</CodeGroup>

## Consejos para desarrolladores

* **Intervalo de muestreo:** Las muestras suelen tomarse cada 60 segundos, pero este valor es aproximado. El campo `samplePeriodSecs` de la respuesta indica la duración real de cada muestra.
* **Límite de datos históricos:** El valor máximo de 720 muestras para `limit` proporciona un período de aproximadamente 12 horas de datos históricos. Para analizar el rendimiento a más largo plazo, es necesario registrar y agregar los datos de forma externa.
* **Transacciones de voto y sin voto:** `numTransactions` incluye todas las transacciones, mientras que `numNonVoteTransactions` cuenta específicamente las que no forman parte del proceso de votación por consenso. Esta última suele ser un mejor indicador de la actividad de la red impulsada por los usuarios.
* **Variabilidad entre nodos:** Los datos exactos pueden variar ligeramente entre distintos nodos RPC según su estado de sincronización y su vista local de la red cuando se toma una muestra.

Al utilizar `getRecentPerformanceSamples`, los desarrolladores y observadores de la red pueden obtener información valiosa sobre el estado operativo y el rendimiento de la red Solana.
