Performance

La bibliothèque cliente PHP facilite les interactions avec l'API Google Ads en limitant la configuration de votre côté. Toutefois, les performances dépendent fortement de la manière dont la bibliothèque est utilisée et intégrée.

La plupart des bonnes pratiques générales s'appliquent à toutes les langues. Ce guide traite des optimisations des performances spécifiques à PHP.

Implémentations Protobuf et gRPC

Protobuf est utilisé par gRPC et l'API Google Ads pour les messages de requête et de réponse. Deux implémentations sont disponibles (PHP pur et une extension C). Les extensions C pour protobuf et grpc offrent des performances réseau et de sérialisation nettement supérieures.

Pour en savoir plus, consultez le guide Protobuf et le guide sur le transport.

Mode de fonctionnement de l'interpréteur PHP

PHP est un langage de script polyvalent qui propose plusieurs modes de fonctionnement selon l'utilisation. PHP-FPM (FastCGI Process Manager) ou les serveurs d'applications persistants présentent un avantage notable par rapport à CGI standard, car les processus de nœud de calcul persistants peuvent réutiliser le bytecode mis en cache (via OPcache) et les ressources entre les requêtes.

Version de PHP

Mettez régulièrement à niveau votre version de PHP pour bénéficier d'améliorations des performances d'exécution. Consultez la liste des versions PHP compatibles.

Versions inutilisées de l'API Google Ads

Toutes les versions de la bibliothèque cliente sont compatibles avec plusieurs versions de l'API Google Ads. Pour chaque version de l'API Google Ads compatible avec la bibliothèque cliente, il existe des packages dédiés.

Vous pouvez supprimer sans risque de la bibliothèque cliente les packages dédiés aux versions de l'API Google Ads qui ne sont pas utilisées par votre application. Pour réduire l'empreinte mémoire et accélérer l'exécution, la bibliothèque cliente fournit un utilitaire permettant de supprimer les versions d'API inutilisées de manière programmatique.

Exemple

Supposons que vous implémentiez une application cliente qui n'utilise que la dernière version de l'API (v25) et que vous souhaitiez supprimer la compatibilité avec les versions d'API inutilisées (v22, v23 et v24).

Dans le fichier composer.json de votre projet, définissez un script Composer (nommé remove-google-ads-api-version-support) qui utilise l'utilitaire fourni par la bibliothèque cliente dans ApiVersionSupport :

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

Exécutez ensuite le script Composer avec les numéros de version comme paramètres et affichez les messages d'état :

# 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

L'exemple de sortie d'exécution suivant montre la réduction de la taille du fichier, avec V25 comme seule version compatible restante :

# 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

Développement et production

PHP est un langage interprété qui compile les instructions avant de les exécuter. C'est un avantage pendant le développement, lorsque les fichiers sources changent fréquemment et que le temps d'exécution est moins critique. Dans les environnements de production, la stabilité et les performances deviennent les principales préoccupations.

Cache

La mise en cache est recommandée, car elle améliore les performances et augmente la stabilité en stockant le bytecode de script précompilé dans la mémoire partagée.

OPcache est la solution standard et est fourni avec PHP par défaut.

Réapprovisionnement automatique

L'chargement automatique améliore les performances et la stabilité en chargeant les informations de la carte de classe précompilée.

La bibliothèque cliente PHP est conforme à la norme PSR-4 pour le chargement automatique et fournit la définition dans son fichier composer.json. Les options de la CLI Composer dédiées, telles que --optimize-autoloader ou --classmap-authoritative, peuvent ensuite être utilisées prêtes à l'emploi dans les builds de production.

Journalisation

Définir des enregistreurs sur un seuil plus élevé, tel que ERROR ou WARNING en production, permet de réduire le surcoût d'E/S et la consommation de mémoire.

Pour en savoir plus, consultez le guide de Logging.

Débogage et profilage

Désactivez les extensions de débogueur et de profileur (telles que Xdebug) en production, car elles entraînent une surcharge d'exécution importante.

Précharger

Depuis PHP 7.4, la préchargement OPcache peut être utilisé pour précharger des scripts en mémoire au démarrage du serveur, ce qui va plus loin que la mise en cache OPcache standard.

Un script de préchargement doit être conçu spécifiquement pour votre application. La bibliothèque cliente PHP ne fournit pas de script de préchargement générique, car le compromis entre l'utilisation de la mémoire et le gain de performances est spécifique à chaque projet et environnement de déploiement.