Эффективность

Клиентская библиотека PHP упрощает взаимодействие с API Google Ads, требуя минимальной настройки с вашей стороны. Однако производительность в значительной степени зависит от того, как используется и интегрируется библиотека.

Большинство общих рекомендаций применимы ко всем языкам программирования. В этом руководстве рассматриваются методы оптимизации производительности, специфичные для PHP.

Реализации Protobuf и gRPC

Protobuf используется gRPC и API Google Ads для обмена сообщениями запросов и ответов. Доступны две реализации (на чистом PHP и расширение на C), и расширения на C для обоих protobuf и grpc обеспечивают существенно лучшую сериализацию и производительность сети.

Дополнительную информацию см. в руководстве по Protobuf и руководстве по транспорту .

Режим работы интерпретатора PHP

PHP — это универсальный скриптовый язык , имеющий несколько режимов работы в зависимости от задачи. PHP-FPM (FastCGI Process Manager) или постоянные серверы приложений имеют существенное преимущество перед стандартным CGI, поскольку постоянные рабочие процессы могут повторно использовать кэшированный байт-код (через OPcache) и ресурсы между запросами.

версия PHP

Регулярно обновляйте PHP до более новой версии, чтобы воспользоваться преимуществами повышения производительности во время выполнения. Проверьте список поддерживаемых версий PHP .

Неиспользуемые версии API Google Ads

Все версии клиентской библиотеки поддерживают несколько версий Google Ads API. Для каждой версии Google Ads API, поддерживаемой клиентской библиотекой, существуют отдельные пакеты.

Пакеты, предназначенные для версий API Google Ads, которые не используются вашим приложением, можно безопасно удалить из клиентской библиотеки. Для уменьшения потребления памяти и ускорения выполнения клиентская библиотека предоставляет утилиту для программного удаления неиспользуемых версий API.

Пример

Предположим, вы разрабатываете клиентское приложение, использующее только последнюю версию API ( v25 ), и хотите удалить поддержку неиспользуемых версий API ( v22 , v23 и v24 ).

В файле composer.json вашего проекта определите скрипт Composer (с именем remove-google-ads-api-version-support ), который использует вспомогательные функции, предоставляемые клиентской библиотекой ApiVersionSupport :

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

Затем запустите скрипт Composer, указав номера версий в качестве параметров, и выведите сообщения о состоянии:

# 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

Приведенный ниже пример выходных данных демонстрирует уменьшение размера файла, при этом V25 остается единственной поддерживаемой версией:

# 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

Разработка против производства

PHP — это интерпретируемый язык , который компилирует инструкции перед их выполнением. Это выгодно на этапе разработки, когда исходные файлы часто изменяются, а время выполнения менее критично. В производственной среде первостепенное значение приобретают стабильность и производительность.

Кэш

Рекомендуется использовать кэширование, поскольку оно повышает производительность и стабильность за счет хранения предварительно скомпилированного байт-кода скрипта в общей памяти.

OPcache — это стандартное решение, которое по умолчанию входит в состав PHP.

Автозагрузка

Автоматическая загрузка повышает производительность и стабильность за счет загрузки предварительно скомпилированной информации о картах классов.

Клиентская библиотека PHP соответствует стандарту PSR-4 для автозагрузки и предоставляет определение в своем файле composer.json . Специальные параметры командной строки Composer , такие как --optimize-autoloader или --classmap-authoritative , можно использовать в сборках для продакшена без дополнительных настроек.

Ведение журнала

Установка более высокого порогового значения для логгеров, например, ERROR или WARNING в производственной среде помогает снизить накладные расходы на ввод-вывод и потребление памяти.

Дополнительную информацию см. в руководстве по ведению журнала .

Отладка и профилирование

В производственной среде следует отключать расширения отладчика и профилировщика (например, Xdebug), поскольку они вносят существенный вклад в выполнение программы.

Предварительная загрузка

Начиная с PHP 7.4, предварительная загрузка OPcache позволяет загружать скрипты в память при запуске сервера, что на шаг дальше, чем стандартное кэширование OPcache.

Скрипт предварительной загрузки должен быть разработан специально для вашего приложения. Клиентская библиотека PHP не предоставляет универсального скрипта предварительной загрузки, поскольку компромисс между использованием памяти и повышением производительности зависит от конкретного проекта и среды развертывания.