성능

PHP 클라이언트 라이브러리는 최소한의 구성으로 Google Ads API와의 상호작용을 쉽게 해줍니다. 그러나 성능은 라이브러리가 사용되고 통합되는 방식에 따라 크게 달라집니다.

이러한 권장사항의 대부분은 모든 언어에 적용할 수 있습니다. 이 가이드에서는 PHP 관련 함수를 살펴봅니다.

Protobuf 구현

ProtobufgRPC 및 Google Ads API에서 요청 및 응답 메시지에 사용됩니다. 두 가지 구현을 사용할 수 있지만 C로 작성된 구현이 성능이 더 좋습니다.

자세한 내용은 Protobuf 가이드를 참고하세요.

PHP 인터프리터의 작동 모드

PHP는 다목적 스크립트 언어이며 사용에 따라 다양한 작업 모드가 있습니다. PHP CGI (공통 게이트웨이 인터페이스)는 실행 간에 리소스를 공유할 수 있으므로 상당한 이점이 있습니다.

PHP 버전

일반적으로 최신 PHP 버전은 전반적인 성능이 더 우수하므로 최신 버전으로 정기적으로 업그레이드하는 것이 좋습니다. 지원되는 PHP 버전 목록

사용하지 않는 Google Ads API 버전

모든 버전의 클라이언트 라이브러리는 여러 Google Ads API 버전을 지원합니다. 클라이언트 라이브러리에서 지원하는 각 Google Ads API 버전에는 해당 버전 전용 패키지가 있습니다.

사용되지 않는 Google Ads API 버전에 전용된 패키지는 클라이언트 라이브러리에서 안전하게 삭제할 수 있습니다. 실행 속도를 높이거나 메모리 사용량을 줄이는 데 유용할 수 있으므로 클라이언트 라이브러리는 이를 프로그래매틱 방식으로 실행하는 유틸리티를 제공합니다.

최신 API 버전인 v18만 사용하는 클라이언트 라이브러리를 구현하고 있으며 사용하지 않는 API 버전인 v17v16에 대한 지원을 삭제하려고 한다고 가정해 보겠습니다.

프로젝트의 composer.json 파일에서 클라이언트 라이브러리에서 제공하는 유틸리티를 활용하는 컴포저 스크립트 (이름: 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

아래 샘플 실행 출력은 파일 크기가 50MB 감소했음을 나타내며 지원되는 버전은 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 파일의 일부로 정의를 제공합니다. 그러면 --optimize-autoloader 또는 --classmap-authoritative와 같은 Composer의 전용 옵션을 즉시 사용할 수 있습니다.

로깅

로거를 ERROR와 같은 높은 수준으로 설정하면 실행 시간 오버헤드와 메모리 사용량을 줄이는 데 도움이 됩니다.

자세한 내용은 로깅 가이드를 참고하세요.

디버깅 및 프로파일링

디버거 및 프로파일러 도구는 일반적으로 실행 시간 오버헤드가 있으므로 사용 중지하는 것이 좋습니다.

프리로드

PHP 7.4부터 OPcache 미리 로드를 사용하여 메모리에 스크립트를 미리 로드할 수 있으므로 일반 캐싱보다 한 단계 더 나아갑니다.

스크립트는 이 기능을 활용하도록 설계되어야 하지만 PHP 클라이언트 라이브러리는 OPcache 미리 로드를 구현하는 일반적인 방법이 없고 메모리 사용량과 성능 향상 간의 절충점이 특정 프로젝트 및 실행에 매우 구체적이므로 이를 활용하지 않습니다.