Un'API deve funzionare il più velocemente possibile per servire un numero potenzialmente enorme di client. Usa questi suggerimenti per ottimizzare le tue API per la massima velocità.

La rapida adozione dell'architettura dei microservizi ha consolidato il ruolo delle API come principale mezzo di comunicazione per lo sviluppo moderno. Le API forniscono un mezzo efficiente per lo scambio di dati tra client e applicazioni lato server, nonché tra diversi sistemi di back-end.

Express.js offre una soluzione elegante per la creazione di API RESTful. Ma è essenziale dare la priorità alle misure delle prestazioni durante lo sviluppo.

Ciò garantisce che le tue API non solo funzionino in modo efficace, ma funzionino anche in modo ottimale. In definitiva, un'app Web con buone prestazioni si traduce in una migliore esperienza utente e maggiori possibilità di successo.

Ottimizzazione delle prestazioni per le API REST di Express.js

Express.js utilizza la natura asincrona e l'architettura basata sugli eventi di Node.js per raggiungere livelli eccezionali di velocità e prestazioni.

instagram viewer

Tuttavia, l'ottimizzazione di Express.js API REST può portare benefici ancora maggiori. Questi includono tempi di risposta significativamente migliorati, maggiore affidabilità e maggiore efficienza delle tue applicazioni, che portano a esperienze utente fluide e coinvolgenti.

Dando la priorità alle prestazioni delle tue API, spiani la strada al successo del tuo software nel suo insieme.

Ecco alcuni dei suggerimenti che puoi utilizzare per migliorare le prestazioni delle tue API REST.

1. Ottimizza le query del database

Il recupero e la manipolazione efficiente dei dati da un database può avere un impatto sostanziale sulle prestazioni delle API REST.

Ottimizzando le query del database, puoi ridurre significativamente il tempo di esecuzione delle query e ridurre il consumo di risorse. Questo alla fine migliorerà le prestazioni della tua applicazione Express.js nel suo complesso.

Ecco alcuni suggerimenti utili per ottimizzare le query del database.

  1. Utilizzo indici di database. Identifica le colonne utilizzate di frequente nelle query e crea gli indici appropriati su tali colonne. Ciò consente al motore di database di individuare e recuperare rapidamente i dati richiesti, con conseguente esecuzione più rapida delle query.
  2. Implementare l'impaginazione. Quando si ha a che fare con set di dati di grandi dimensioni, utilizzare l'impaginazione. Anziché recuperare tutti i dati contemporaneamente, limita la quantità di dati restituiti in ogni query.
  3. Evitare query ridondanti. Analizza il tuo codice, identifica e ometti qualsiasi query ridondante. Il refactoring delle query di conseguenza può portare a sostanziali miglioramenti delle prestazioni.

2. Usa la memorizzazione nella cache in tutta la tua app

La memorizzazione nella cache è una tecnica utilizzata per archiviare i dati a cui si accede di frequente in una cache, un sistema di archiviazione temporaneo. In poche parole, quando un client richiede dati, il server controlla prima la sua cache invece di interrogare direttamente il database.

Se trova i dati richiesti nella cache, li restituisce immediatamente, ignorando la necessità di ulteriori elaborazioni o l'effettivo accesso al database. Ciò migliora notevolmente le prestazioni delle API riducendo i tempi di risposta e riducendo al minimo il carico sull'applicazione, in particolare durante l'elaborazione di più query.

Ecco un semplice esempio di codice che dimostra come implementare la memorizzazione nella cache.

cost espresso = richiedere('esprimere');
cost NodoCache = richiedere('cache dei nodi');

cost cache = nuovo NodeCache();
cost app = espresso();

app.get('/API/dati', (req, res) => {
cost cacheKey = 'dati';
cost cachedData = cache.get (cacheKey);

Se (!Dati memorizzati nella cache) {
cost fetchedData = fetchDataFromDatabase();
cache.set (cacheKey, fetchedData);
dati memorizzati nella cache = dati recuperati;
}

res.json (cachedData);
});

funzionefetchDataFromDatabase() {
//... la logica di recupero dei dati va qui ...
ritorno dati;
}

Il codice sopra mostra come funziona la memorizzazione nella cache utilizzando la libreria node-cache. Inizialmente, controlla se i dati richiesti sono già memorizzati nella cache. Se i dati non sono presenti, attiva la funzione per recuperare i dati dal database, quindi archivia i dati recuperati nella cache. Infine, restituisce i dati richiesti al client come risposta JSON.

3. Abilita la compressione HTTP

La compressione HTTP è una tecnica che puoi utilizzare per ridurre la dimensione dei dati trasferiti tra un client e un server. Implica la compressione delle risposte API sul lato server e la decompressione sul lato client.

Abilitando la compressione HTTP, la dimensione dei payload di risposta può essere notevolmente ridotta, portando a tempi di risposta più rapidi.

Ecco un esempio di codice che mostra come abilitare la compressione HTTP usando il compressione middleware.

espresso = richiedere('esprimere');
cost compressione = richiedere('compressione');

cost app = espresso();
app.use (compressione());

app.get('/API/dati', (req, res) => {
// Gestisci la tua logica API
});

Questo frammento di codice utilizza il middleware per comprimere le risposte dell'API prima di restituirle al client.

4. Implementa l'elaborazione parallela utilizzando Promise.all

Elaborazione parallela utilizzando Prometti.tutto Il metodo è una tecnica utilizzata per migliorare le prestazioni delle API eseguendo più attività asincrone contemporaneamente.

Sfruttando la potenza delle promesse JavaScript, Promise.all ti consente di eseguire una raccolta di promesse contemporaneamente, anziché attendere che ogni promessa si risolva in sequenza.

Questa tecnica è particolarmente utile quando disponi di attività indipendenti che possono essere eseguite contemporaneamente, ad esempio effettuare più richieste API correlate a endpoint diversi. Eseguendo queste attività in parallelo, puoi ridurre significativamente il tempo di esecuzione complessivo e migliorare la reattività della tua API.

Ecco un semplice esempio di codice che dimostra come implementare l'elaborazione parallela usando Promise.all.

cost espresso = richiedere('esprimere');
cost assi = richiedere('assio');

cost app = espresso();

app.get('/API/dati', asincrono (req, res) => {
Tentativo {
cost richiesta1 = axios.get(' https://api.example.com/endpoint1');
cost richiesta2 = axios.get(' https://api.example.com/endpoint2');
cost richiesta3 = axios.get(' https://api.example.com/endpoint3');

cost [risposta1, risposta2, risposta3] = aspettaPromettere.Tutto([
richiesta1,
richiesta2,
richiesta3
]);

// Elabora le risposte secondo necessità
} presa (errore) {
res.stato(500).json({ errore: 'errore' });
}
});

In questo esempio, il codice effettua richieste API a tre diversi endpoint. Utilizzando la funzione Promise.all, passando un array di promesse, il codice attende che finiscano tutti prima di restituire le risposte in un array.

Quando hai ricevuto tutte le risposte, puoi elaborarle come richiesto. Tuttavia, dovresti prestare attenzione a questo approccio ed evitare un utilizzo eccessivo, in quanto potrebbe sovraccaricare il server causando colli di bottiglia nella risposta API.

5. Utilizzare il pool di connessioni al database

Il pool di connessioni al database è un metodo che comporta la creazione di un pool di connessioni al database riutilizzabili per gestire in modo efficiente più richieste client.

Invece di stabilire una nuova connessione per ogni richiesta, l'applicazione riutilizza le connessioni esistenti dal pool, riducendo l'overhead di stabilire nuove connessioni, con conseguente query più veloce ed efficiente esecuzione.

Di seguito è riportato un breve esempio di codice che illustra come utilizzare il pool di connessioni al database con Mangusta in un'applicazione Express.js.

cost mangusta = richiedere('mangusta');
cost { connessione } = richiedere('mangusta');

cost Opzioniconnessione = {
piscinaDimensioni: 10,
useNewUrlParser: VERO,
usaTopologia unificata: VERO
};

mangusta.connect('mongodb://localhost/miodatabase', connectionOptions);

In questo esempio, la proprietà della dimensione del pool di connessioni è impostata su 10, che specifica il numero massimo di connessioni nel pool.

Impostando questa configurazione, l'API può riutilizzare le connessioni, con conseguente miglioramento delle prestazioni dell'API riducendo l'overhead di stabilire nuove connessioni per ogni richiesta.

Dare priorità alle prestazioni dell'API per il profitto

Esistono diversi passaggi che puoi eseguire per ottimizzare le prestazioni delle tue API Express.js. Le API giocano a ruolo cruciale, quindi è essenziale che ti concentri sulle loro prestazioni per garantire il successo complessivo del tuo Software.