Leistung

Die PHP-Clientbibliothek erleichtert die Interaktion mit der Google Ads API und erfordert nur eine minimale Konfiguration. Die Leistung hängt jedoch maßgeblich davon ab, wie die Bibliothek verwendet und eingebunden wird.

Die meisten allgemeinen Best Practices gelten für alle Sprachen. In diesem Leitfaden werden spezifische Leistungsoptimierungen für PHP behandelt.

Protobuf- und gRPC-Implementierungen

Protobuf wird von gRPC und der Google Ads API für Anfragen- und Antwortnachrichten verwendet. Es sind zwei Implementierungen verfügbar (reines PHP und eine C-Erweiterung). Die C-Erweiterungen für protobuf und grpc bieten eine deutlich bessere Serialisierungs- und Netzwerkleistung.

Weitere Informationen finden Sie im Protobuf-Leitfaden und im Transport leitfaden.

Betriebsmodus des PHP-Interpreters

PHP ist eine vielseitige Skriptsprache mit mehreren Betriebs modi, je nach Verwendung. PHP-FPM (FastCGI Process Manager) oder persistente Anwendungsserver haben einen deutlichen Vorteil gegenüber dem Standard-CGI, da persistente Worker-Prozesse zwischen Anfragen zwischengespeicherten Bytecode (über OPcache) und Ressourcen wiederverwenden können.

PHP-Version

Führen Sie regelmäßig ein Upgrade auf eine neuere PHP-Version durch, um von Verbesserungen der Laufzeitleistung zu profitieren. Eine Liste der unterstützten PHP-Versionen finden Sie hier: Liste der unterstützten PHP-Versionen.

Nicht verwendete Google Ads API-Versionen

Alle Versionen der Clientbibliothek unterstützen mehrere Google Ads API-Versionen. Für jede Version der Google Ads API, die von der Clientbibliothek unterstützt wird, gibt es spezielle Pakete für diese Version.

Die Pakete, die für Versionen der Google Ads API bestimmt sind, die von Ihrer Anwendung nicht verwendet werden, können sicher aus der Clientbibliothek entfernt werden. Um den Speicherbedarf zu reduzieren und die Ausführung zu beschleunigen, bietet die Clientbibliothek ein Dienstprogramm, mit dem nicht verwendete API-Versionen programmatisch entfernt werden können.

Beispiel

Angenommen, Sie implementieren eine Clientanwendung, die nur die neueste API-Version (v26) verwendet, und Sie möchten die Unterstützung für die nicht verwendeten API-Versionen (v23, v24 und v25) entfernen.

Definieren Sie in der Datei composer.json Ihres Projekts ein Composer-Skript mit dem Namen remove-google-ads-api-version-support, das das von der Clientbibliothek in ApiVersionSupport bereitgestellte Dienstprogramm nutzt:

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

Führen Sie dann das Composer-Skript mit den Versionsnummern als Parameter aus und geben Sie Statusmeldungen aus:

# 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

Die folgende Beispielausgabe zeigt die Reduzierung der Dateigröße, wobei V26 die einzige verbleibende unterstützte Version ist:

# 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

Entwicklung und Produktion

PHP ist eine interpretierte Sprache, die Anweisungen kompiliert bevor sie ausgeführt werden. Dies ist bei der Entwicklung von Vorteil, wenn sich Quelldateien häufig ändern und die Ausführungszeit weniger kritisch ist. In Produktionsumgebungen sind Stabilität und Leistung die wichtigsten Aspekte.

Cache

Caching wird empfohlen, da es die Leistung verbessert und die Stabilität erhöht, indem vorkompilierter Skript-Bytecode im gemeinsam genutzten Speicher gespeichert wird.

OPcache ist die Standardlösung und ist standardmäßig in PHP enthalten.

Automatisches Aufladen

Automatisches Aufladen verbessert die Leistung und Stabilität, indem vorkompilierte Klassenmap-Informationen geladen werden.

Die PHP-Clientbibliothek entspricht PSR-4 für das automatische Aufladen und stellt die Definition als Teil der Datei composer.json bereit. Spezielle Composer-CLI-Optionen wie --optimize-autoloader oder --classmap-authoritative können dann sofort in Produktions Builds verwendet werden.

Logging

Wenn Sie Logger in der Produktion auf einen höheren Schwellenwert wie ERROR oder WARNING setzen, können Sie den E/A-Overhead und die Speichernutzung reduzieren.

Weitere Informationen finden Sie im Leitfaden zum Logging.

Debugging und Profilerstellung

Deaktivieren Sie Debugger- und Profiler-Erweiterungen (z. B. Xdebug) in der Produktion, da sie einen erheblichen Ausführungs-Overhead verursachen.

Vorab laden

Seit PHP 7.4 kann OPcache-Vorabladen verwendet werden, um Skripts beim Serverstart in den Speicher vorab zu laden. Dies geht einen Schritt weiter als das Standard- OPcache-Caching.

Ein Vorabladenskript muss speziell für Ihre Anwendung entwickelt werden. Die PHP-Clientbibliothek bietet kein generisches Vorabladenskript, da der Kompromiss zwischen Arbeitsspeichernutzung und Leistungssteigerung für jedes Projekt und jede Bereitstellungsumgebung spezifisch ist.