परफ़ॉर्मेंस मोड

PHP क्लाइंट लाइब्रेरी, Google Ads API के साथ इंटरैक्शन को आसान बनाती है. इसके लिए, आपको कम से कम कॉन्फ़िगरेशन करना पड़ता है. हालांकि, परफ़ॉर्मेंस इस बात पर निर्भर करती है कि लाइब्रेरी का इस्तेमाल और इंटिग्रेशन कैसे किया जाता है.

आम तौर पर इस्तेमाल होने वाले सबसे सही तरीके, सभी भाषाओं पर लागू होते हैं. इस गाइड में, PHP के लिए परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के बारे में बताया गया है.

Protobuf और gRPC को लागू करने के तरीके

Protobuf का इस्तेमाल, gRPC और Google Ads API, अनुरोध और जवाब वाले मैसेज के लिए करते हैं. इसके दो वर्शन उपलब्ध हैं (प्योर PHP और C एक्सटेंशन). साथ ही, protobuf और grpc, दोनों के लिए C एक्सटेंशन, सीरियलाइज़ेशन और नेटवर्क की परफ़ॉर्मेंस को काफ़ी बेहतर बनाते हैं.

ज़्यादा जानकारी के लिए, Protobuf गाइड और ट्रांसपोर्ट गाइड देखें.

PHP इंटरप्रेटर का ऑपरेशन मोड

PHP एक ऐसी स्क्रिप्टिंग भाषा है जिसका इस्तेमाल कई कामों के लिए किया जा सकता है. इसके इस्तेमाल के हिसाब से, कई ऑपरेशन मोड होते हैं. PHP-FPM (FastCGI Process Manager) या पर्सिस्टेंट ऐप्लिकेशन सर्वर, स्टैंडर्ड सीजीआई की तुलना में ज़्यादा फ़ायदेमंद होते हैं. इसकी वजह यह है कि पर्सिस्टेंट वर्कर प्रोसेस, कैश मेमोरी में सेव किए गए बाइट कोड (OPcache के ज़रिए) और संसाधनों को अलग-अलग अनुरोधों के लिए फिर से इस्तेमाल कर सकती हैं.

PHP वर्शन

रनटाइम की परफ़ॉर्मेंस में सुधार का फ़ायदा पाने के लिए, नियमित तौर पर नए PHP वर्शन पर अपग्रेड करें. इस्तेमाल किए जा सकने वाले PHP वर्शन की सूची देखें.

Google Ads API के ऐसे वर्शन जिनका इस्तेमाल नहीं किया जा रहा है

क्लाइंट लाइब्रेरी के सभी वर्शन, Google Ads API के कई वर्शन के साथ काम करते हैं. क्लाइंट लाइब्रेरी के साथ काम करने वाले Google Ads API के हर वर्शन के लिए, खास पैकेज उपलब्ध हैं.

Google Ads API के उन वर्शन के लिए बने पैकेज जो आपके ऐप्लिकेशन में इस्तेमाल नहीं किए जाते हैं उन्हें क्लाइंट लाइब्रेरी से सुरक्षित तरीके से हटाया जा सकता है. मेमोरी के इस्तेमाल को कम करने और प्रोसेस को तेज़ करने के लिए, क्लाइंट लाइब्रेरी एक सुविधा उपलब्ध कराती है. इसकी मदद से, इस्तेमाल न किए जा रहे एपीआई वर्शन को प्रोग्राम के हिसाब से हटाया जा सकता है.

उदाहरण

मान लें कि आपको कोई ऐसा क्लाइंट ऐप्लिकेशन लागू करना है जो सिर्फ़ एपीआई के सबसे नए वर्शन (v26) का इस्तेमाल करता है. साथ ही, आपको एपीआई के उन वर्शन (v23, v24, और v25) के लिए सहायता हटानी है जिनका इस्तेमाल नहीं किया जा रहा है.

अपने प्रोजेक्ट की 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
# 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

यहां दिए गए सैंपल एक्ज़ीक्यूशन आउटपुट में, फ़ाइल के साइज़ में कमी दिखाई गई है. इसमें V26 ही एकमात्र ऐसा वर्शन है जो काम करता है:

# 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

डेवलपमेंट बनाम प्रोडक्शन

PHP एक इंटरप्रेटेड लैंग्वेज है. यह निर्देशों को लागू करने से पहले, उन्हें कंपाइल करती है. यह डेवलपमेंट के दौरान फ़ायदेमंद होता है, जब सोर्स फ़ाइलें अक्सर बदलती रहती हैं और एक्ज़ीक्यूशन का समय कम अहम होता है. प्रोडक्शन एनवायरमेंट में, स्थिरता और परफ़ॉर्मेंस सबसे अहम होती हैं.

कैश मेमोरी

कैश मेमोरी में सेव करने का सुझाव दिया जाता है, क्योंकि इससे परफ़ॉर्मेंस बेहतर होती है और स्थिरता बढ़ती है. ऐसा, शेयर की गई मेमोरी में पहले से कंपाइल किए गए स्क्रिप्ट बाइट कोड को सेव करके किया जाता है.

OPcache एक स्टैंडर्ड समाधान है और यह डिफ़ॉल्ट रूप से PHP के साथ बंडल किया गया है.

अपने आप लोड होने की सुविधा

ऑटोलोडिंग की सुविधा, पहले से कंपाइल की गई क्लास मैप की जानकारी को लोड करके, परफ़ॉर्मेंस और स्थिरता को बेहतर बनाती है.

PHP क्लाइंट लाइब्रेरी, अपने-आप लोड होने के लिए PSR-4 का पालन करती है. साथ ही, यह अपनी composer.json फ़ाइल के हिस्से के तौर पर परिभाषा उपलब्ध कराती है. इसके बाद, Composer CLI के खास विकल्पों, जैसे कि --optimize-autoloader या --classmap-authoritative का इस्तेमाल, प्रोडक्शन बिल्ड में सीधे तौर पर किया जा सकता है.

लॉग इन हो रहा है

प्रोडक्शन में लॉगर को ERROR या WARNING जैसे ज़्यादा थ्रेशोल्ड पर सेट करने से, I/O ओवरहेड और मेमोरी की खपत कम करने में मदद मिलती है.

ज़्यादा जानकारी के लिए, लॉगिंग गाइड देखें.

डीबग करना और प्रोफ़ाइल बनाना

प्रोडक्शन में डीबगर और प्रोफ़ाइलर एक्सटेंशन (जैसे कि Xdebug) बंद करें, क्योंकि इनसे कोड को एक्ज़ीक्यूट करने में ज़्यादा समय लगता है.

प्रीलोड

PHP 7.4 के बाद से, OPcache प्रीलोडिंग का इस्तेमाल करके, सर्वर के चालू होने पर स्क्रिप्ट को मेमोरी में पहले से लोड किया जा सकता है. यह स्टैंडर्ड OPcache कैश मेमोरी से एक कदम आगे है.

प्रीलोड स्क्रिप्ट को खास तौर पर आपके ऐप्लिकेशन के लिए डिज़ाइन किया जाना चाहिए. PHP क्लाइंट लाइब्रेरी, पहले से लोड होने वाली सामान्य स्क्रिप्ट उपलब्ध नहीं कराती. ऐसा इसलिए, क्योंकि मेमोरी के इस्तेमाल और परफ़ॉर्मेंस में होने वाले फ़ायदे के बीच का संतुलन, हर प्रोजेक्ट और डिप्लॉयमेंट एनवायरमेंट के हिसाब से अलग-अलग होता है.