La biblioteca cliente de PHP facilita las interacciones con la API de Google Ads con una configuración mínima de tu parte. Sin embargo, el rendimiento depende en gran medida de cómo se use y se integre la biblioteca.
La mayoría de las prácticas recomendadas generales se aplican a todos los idiomas. En esta guía, se abordan las optimizaciones de rendimiento específicas de PHP.
Implementaciones de Protobuf y gRPC
gRPC y la API de Google Ads usan Protobuf para los mensajes de solicitud y respuesta. Hay dos implementaciones disponibles (PHP puro y una
extensión de C), y las extensiones de C para protobuf y grpc proporcionan
una serialización y un rendimiento de red considerablemente mejores.
Consulta la guía de Protobuf y la guía de transporte para obtener más información.
Modo de operación del intérprete de PHP
PHP es un lenguaje de programación versátil y tiene varios modos de operación según el uso. PHP-FPM (FastCGI Process Manager) o los servidores de aplicaciones persistentes tienen una ventaja notable sobre CGI estándar, ya que los procesos de trabajador persistentes pueden reutilizar el código de bytes almacenado en caché (a través de OPcache) y los recursos en todas las solicitudes.
Versión de PHP
Actualiza con regularidad a una versión más reciente de PHP para beneficiarte de las mejoras de rendimiento del entorno de ejecución. Consulta la lista de versiones de PHP compatibles.
Versiones de la API de Google Ads sin usar
Todas las versiones de la biblioteca cliente admiten varias versiones de la API de Google Ads. Para cada versión de la API de Google Ads que admite la biblioteca cliente, hay paquetes dedicados para esa versión.
Los paquetes dedicados a las versiones de la API de Google Ads que tu aplicación no usa se pueden quitar de forma segura de la biblioteca cliente. Para reducir el espacio en memoria y acelerar la ejecución, la biblioteca cliente proporciona una utilidad para quitar las versiones de la API que no se usan de manera programática.
Ejemplo
Supongamos que implementas una aplicación cliente que solo usa la versión más reciente de la API (v26) y quieres quitar la compatibilidad con las versiones de la API que no se usan (v23, v24 y v25).
En el archivo composer.json de tu proyecto, define una secuencia de comandos de Composer (llamada
remove-google-ads-api-version-support) que aproveche la utilidad que proporciona
la biblioteca cliente en ApiVersionSupport:
"scripts": {
"remove-google-ads-api-version-support": [
"Google\\Ads\\GoogleAds\\Util\\ApiVersionSupport::remove"
]
}
Luego, ejecuta la secuencia de comandos de Composer con los números de versión como parámetros y, luego, imprime los mensajes de estado:
# 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
# v23, v24, and
# v25 of the Google Ads API.
echo "# Removing support..."
composer run-script remove-google-ads-api-version-support -- \
23 \
24 \
25
# 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
En el siguiente resultado de la ejecución de ejemplo, se muestra la reducción del tamaño del archivo, con
V26 como la única versión compatible restante:
# Supported Google Ads API versions:
V23
V24
V25
V26
# Vendor folder size:
135M ./vendor
# Removing support...
> Google\Ads\GoogleAds\Util\ApiVersionSupport::remove
Removing support for the version 23 of Google Ads API...
Done
Removing support for the version 24 of Google Ads API...
Done
Removing support for the version 25 of Google Ads API...
Done
# Supported Google Ads API versions:
V26
# Vendor folder size:
60M ./vendor
Desarrollo versus producción
PHP es un lenguaje interpretado que compila instrucciones antes de ejecutarlas. Esto es ventajoso durante el desarrollo, cuando los archivos de origen cambian con frecuencia y el tiempo de ejecución es menos crítico. En los entornos de producción, la estabilidad y el rendimiento se convierten en las principales preocupaciones.
Caché
Se recomienda el almacenamiento en caché porque mejora el rendimiento y aumenta la estabilidad, ya que almacena el código de bytes de la secuencia de comandos precompilada en la memoria compartida.
OPcache es la solución estándar y se incluye con PHP de forma predeterminada.
Carga automática
La carga automática mejora el rendimiento y la estabilidad, ya que carga la información del mapa de clases precompilada.
La biblioteca cliente de PHP cumple con el estándar PSR-4 para la carga automática y proporciona
la definición como parte de su archivo composer.json. Las opciones de la CLI de Composer dedicadas, como --optimize-autoloader o
--classmap-authoritative, se pueden usar de inmediato en las compilaciones de
producción.
Logging
Configurar los registradores con un umbral más alto, como ERROR o WARNING, en producción
ayuda a reducir la sobrecarga de E/S y el consumo de memoria.
Consulta la guía de Logging para obtener más información.
Depuración y generación de perfiles
Inhabilita las extensiones del depurador y del generador de perfiles (como Xdebug) en producción, ya que introducen una sobrecarga de ejecución considerable.
Precargar
Desde PHP 7.4, se puede usar la precarga de OPcache para precargar secuencias de comandos en la memoria durante el inicio del servidor, lo que va un paso más allá del almacenamiento en caché estándar de OPcache.
Se debe diseñar una secuencia de comandos de precarga específicamente para tu aplicación. La biblioteca cliente de PHP no proporciona una secuencia de comandos de precarga genérica porque la compensación entre el uso de memoria y la mejora del rendimiento es específica de cada proyecto y entorno de implementación.