Rendimento

La libreria client PHP semplifica le interazioni con l'API Google Ads con una configurazione minima da parte tua. Tuttavia, il rendimento dipende in modo significativo da come la libreria viene utilizzata e integrata.

La maggior parte delle best practice generali sono applicabili a tutte le lingue. Questa guida illustra le ottimizzazioni del rendimento specifiche per PHP.

Implementazioni di Protobuf e gRPC

Protobuf viene utilizzato da gRPC e dall'API Google Ads per i messaggi di richiesta e risposta. Sono disponibili due implementazioni (PHP puro e un'estensione C) e le estensioni C per protobuf e grpc offrono prestazioni di serializzazione e di rete notevolmente migliori.

Per saperne di più, consulta la guida a Protobuf e la guida al trasporto.

Modalità operativa dell'interprete PHP

PHP è un linguaggio di scripting versatile e ha diverse modalità di funzionamento a seconda dell'utilizzo. PHP-FPM (FastCGI Process Manager) o i server delle applicazioni persistenti hanno un vantaggio notevole rispetto a CGI standard perché i processi di lavoro persistenti possono riutilizzare il bytecode memorizzato nella cache (tramite OPcache) e le risorse tra le richieste.

Versione di PHP

Esegui regolarmente l'upgrade a una versione più recente di PHP per usufruire dei miglioramenti delle prestazioni del runtime. Consulta l'elenco delle versioni di PHP supportate.

Versioni dell'API Google Ads inutilizzate

Tutte le versioni della libreria client supportano più versioni dell'API Google Ads. Per ogni versione dell'API Google Ads supportata dalla libreria client, esistono pacchetti dedicati per quella versione.

I pacchetti dedicati alle versioni dell'API Google Ads non utilizzate dalla tua applicazione possono essere rimossi in sicurezza dalla libreria client. Per ridurre il footprint della memoria e velocizzare l'esecuzione, la libreria client fornisce un'utilità per rimuovere le versioni API inutilizzate in modo programmatico.

Esempio

Supponiamo che tu stia implementando un'applicazione client che utilizza solo l'ultima versione dell'API (v25) e che tu voglia rimuovere il supporto per le versioni dell'API inutilizzate (v22, v23 e v24).

Nel file composer.json del tuo progetto, definisci uno script Composer (denominato remove-google-ads-api-version-support) che sfrutta l'utilità fornita dalla libreria client in ApiVersionSupport:

"scripts": {
  "remove-google-ads-api-version-support": [
    "Google\\Ads\\GoogleAds\\Util\\ApiVersionSupport::remove"
  ]
}

Quindi, esegui lo script Composer con i numeri di versione come parametri e stampa i messaggi di stato:

# Change the current directory to the project directory.
cd /path/to/the/project

# Install the project.
composer install

# Output the vendor folder size and the list of Google Ads API versions that are
# supported before removing support for unused Google Ads API versions.
echo "# Supported Google Ads API versions:"
find ./vendor/googleads/google-ads-php/src/Google/Ads/GoogleAds/V* \
  -maxdepth 0 | grep -oE 'V[0-9]+$'
echo "# Vendor folder size:"
du -sh ./vendor

# Use the Composer script to remove the unused versions
# v22, v23, and
# v24 of the Google Ads API.
echo "# Removing support..."
composer run-script remove-google-ads-api-version-support -- \
  22 \
  23 \
  24

# Output the vendor folder size and the list of Google Ads API versions that are
# supported after removing support for unused Google Ads API versions.
echo "# Supported Google Ads API versions:"
find ./vendor/googleads/google-ads-php/src/Google/Ads/GoogleAds/V* \
  -maxdepth 0 | grep -oE 'V[0-9]+$'
echo "# Vendor folder size:"
du -sh ./vendor

Il seguente output di esecuzione di esempio mostra la riduzione delle dimensioni del file, con V25 come unica versione supportata rimanente:

# Supported Google Ads API versions:
V22
V23
V24
V25
# Vendor folder size:
135M    ./vendor
# Removing support...
> Google\Ads\GoogleAds\Util\ApiVersionSupport::remove
Removing support for the version 22 of Google Ads API...
Done
Removing support for the version 23 of Google Ads API...
Done
Removing support for the version 24 of Google Ads API...
Done
# Supported Google Ads API versions:
V25
# Vendor folder size:
60M     ./vendor

Sviluppo e produzione

PHP è un linguaggio interpretato che compila le istruzioni prima di eseguirle. Ciò è vantaggioso durante lo sviluppo, quando i file di origine cambiano frequentemente e il tempo di esecuzione è meno critico. Negli ambienti di produzione, stabilità e prestazioni diventano le preoccupazioni principali.

Cache

La memorizzazione nella cache è consigliata perché migliora le prestazioni e aumenta la stabilità memorizzando il bytecode dello script precompilato nella memoria condivisa.

OPcache è la soluzione standard ed è inclusa in PHP per impostazione predefinita.

Caricamento automatico

Il caricamento automatico migliora le prestazioni e la stabilità caricando le informazioni sulla mappa delle classi precompilate.

La libreria client PHP è conforme a PSR-4 per il caricamento automatico e fornisce la definizione come parte del file composer.json. Le opzioni dell'interfaccia a riga di comando di Composer dedicate, come --optimize-autoloader o --classmap-authoritative, possono essere utilizzate immediatamente nelle build di produzione.

Logging

L'impostazione dei logger su una soglia più alta, ad esempio ERROR o WARNING in produzione, consente di ridurre l'overhead I/O e il consumo di memoria.

Per saperne di più, consulta la guida alla registrazione.

Debug e profilazione

Disattiva le estensioni del debugger e del profiler (ad esempio Xdebug) in produzione perché introducono un sovraccarico di esecuzione sostanziale.

Precarica

A partire da PHP 7.4, il precaricamento di OPcache può essere utilizzato per precaricare gli script in memoria all'avvio del server, andando oltre la memorizzazione nella cache OPcache standard.

Uno script di precaricamento deve essere progettato appositamente per la tua applicazione. La libreria client PHP non fornisce uno script di precaricamento generico perché il compromesso tra memoria utilizzata e miglioramento delle prestazioni è specifico per ogni progetto e ambiente di deployment.