Производительность

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

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

Реализация протобуфа

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

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

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

PHP — универсальный язык сценариев , который имеет множество режимов работы в зависимости от использования. PHP CGI (Common Gateway Interface) имеет заметное преимущество, поскольку он может распределять ресурсы между выполнениями.

PHP-версия

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

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

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

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

Пример

Предположим, вы реализуете клиентскую библиотеку, использующую только последнюю версию API: v18 , и хотите удалить поддержку неиспользуемых версий API: v17 и v16 .

В файле 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 Google Ads API versions.
echo "# Supported Google Ads API versions:"
find ./vendor/googleads/google-ads-php/src/Google/Ads/GoogleAds/V* -maxdepth 0 | grep -o '..$'
echo "# Vendor folder size:"
du -sh ./vendor

# Use the Composer script to remove the unused versions v16 and v17 of the Google Ads API.
echo "# Removing support..."
composer run-script remove-google-ads-api-version-support -- 16 17

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

В приведенном ниже примере результатов выполнения показано уменьшение размера файла на 50 МБ и единственной поддерживаемой версией является V18 :

# Supported Google Ads API versions:
V16
V17
V18
# Vendor folder size:
110M    ./vendor
# Removing support...
> Google\Ads\GoogleAds\Util\ApiVersionSupport::remove
Removing support for the version 16 of Google Ads API...
Done
Removing support for the version 17 of Google Ads API...
Done
# Supported Google Ads API versions:
V18
# Vendor folder size:
60M     ./vendor

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

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

Кэш

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

OPcache — наиболее часто используемое решение, доступное по умолчанию.

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

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

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

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

Установка регистраторов на высокий уровень, например ERROR может помочь сократить время выполнения и потребление памяти.

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

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

Мы рекомендуем отключить инструменты отладчика и профилировщика, поскольку они обычно требуют некоторого времени выполнения.

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

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

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