Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

सलाह & चाल

यह दस्तावेज़ क्लाउड फ़ंक्शंस को डिज़ाइन करने, कार्यान्वित करने, परीक्षण करने और परिनियोजित करने के लिए सर्वोत्तम प्रथाओं का वर्णन करता है।

यथार्थता

यह खंड क्लाउड फ़ंक्शंस को डिज़ाइन और कार्यान्वित करने के लिए सामान्य सर्वोत्तम प्रथाओं का वर्णन करता है।

निष्क्रिय कार्य लिखें

आपके कार्यों को एक ही परिणाम देना चाहिए, भले ही उन्हें कई बार बुलाया जाए। यह आपको किसी आमंत्रण का पुन: प्रयास करने देता है यदि पिछला आमंत्रण आपके कोड के माध्यम से विफल रहता है। अधिक जानकारी के लिए, पृष्ठभूमि कार्यों पुनः प्रयास किया जाएगा

पृष्ठभूमि गतिविधियाँ शुरू न करें

पृष्ठभूमि गतिविधि कुछ भी है जो आपके फ़ंक्शन के समाप्त होने के बाद होती है। एक समारोह मंगलाचरण एक बार समारोह रिटर्न खत्म या अन्यथा इस तरह के फोन करके के रूप में, होने का संकेत callback Node.js पृष्ठभूमि कार्यों में तर्क। ग्रेसफुल टर्मिनेशन के बाद चलने वाला कोई भी कोड सीपीयू तक नहीं पहुंच सकता है और न ही कोई प्रगति करेगा।

इसके अलावा, जब उसी वातावरण में एक बाद के आमंत्रण को निष्पादित किया जाता है, तो आपकी पृष्ठभूमि गतिविधि फिर से शुरू हो जाती है, नए आमंत्रण में हस्तक्षेप करती है। इससे अनपेक्षित व्यवहार और त्रुटियां हो सकती हैं जिनका निदान करना कठिन है। एक समारोह के समाप्त होने के बाद नेटवर्क तक पहुंचने में आम तौर पर रीसेट (किया जा रहा कनेक्शन की ओर जाता है ECONNRESET त्रुटि कोड)।

पृष्ठभूमि गतिविधि को अक्सर अलग-अलग आमंत्रणों से लॉग में पता लगाया जा सकता है, जो कुछ भी यह कहकर लाइन के बाद लॉग किया गया है कि आमंत्रण समाप्त हो गया है। पृष्ठभूमि गतिविधि को कभी-कभी कोड में गहराई से दफन किया जा सकता है, खासकर जब अतुल्यकालिक संचालन जैसे कि कॉलबैक या टाइमर मौजूद होते हैं। यह सुनिश्चित करने के लिए अपने कोड की समीक्षा करें कि फ़ंक्शन को समाप्त करने से पहले सभी एसिंक्रोनस ऑपरेशन समाप्त हो जाएं।

हमेशा अस्थायी फ़ाइलें हटाएं

अस्थायी निर्देशिका में स्थानीय डिस्क भंडारण एक इन-मेमोरी फाइल सिस्टम है। आपके द्वारा लिखी गई फ़ाइलें आपके फ़ंक्शन के लिए उपलब्ध मेमोरी का उपभोग करती हैं, और कभी-कभी इनवोकेशन के बीच बनी रहती हैं। इन फ़ाइलों को स्पष्ट रूप से हटाने में विफल होने से अंततः स्मृति त्रुटि और बाद में ठंड शुरू हो सकती है।

आप में चयन करके एक व्यक्ति समारोह द्वारा प्रयुक्त स्मृति देख सकते हैं कार्यों की सूची जीसीपी कंसोल में और स्मृति के उपयोग की साजिश चुनने।

अस्थायी निर्देशिका के बाहर लिखने का प्रयास न करें, और फ़ाइल पथ बनाने के लिए प्लेटफ़ॉर्म/ओएस-स्वतंत्र विधियों का उपयोग करना सुनिश्चित करें।

पाइपलाइनिंग का उपयोग करके बड़ी फ़ाइलों को संसाधित करते समय आप स्मृति आवश्यकताओं को कम कर सकते हैं। उदाहरण के लिए, आप क्लाउड स्टोरेज पर किसी फ़ाइल को रीड स्ट्रीम बनाकर, स्ट्रीम-आधारित प्रक्रिया के माध्यम से पास करके और आउटपुट स्ट्रीम को सीधे क्लाउड स्टोरेज पर लिखकर प्रोसेस कर सकते हैं।

उपकरण

यह खंड क्लाउड फ़ंक्शंस को लागू करने, परीक्षण करने और इंटरैक्ट करने के लिए टूल का उपयोग करने के तरीके पर दिशानिर्देश प्रदान करता है।

स्थानीय विकास

फ़ंक्शन परिनियोजन में थोड़ा समय लगता है, इसलिए स्थानीय रूप से आपके फ़ंक्शन के कोड का परीक्षण करना अक्सर तेज़ होता है।

Firebase डेवलपर्स का उपयोग कर सकते Firebase CLI बादल कार्य एम्यूलेटर

ईमेल भेजने के लिए Sendgrid का उपयोग करें

क्लाउड फ़ंक्शंस पोर्ट 25 पर आउटबाउंड कनेक्शन की अनुमति नहीं देता है, इसलिए आप SMTP सर्वर से गैर-सुरक्षित कनेक्शन नहीं बना सकते। ईमेल भेजने के लिए सुझाया गया तरीका उपयोग करने के लिए है SendGrid । आप में ईमेल भेजने के लिए अन्य विकल्प मिल सकता है एक उदाहरण से भेजा जा रहा है ईमेल Google गणना इंजन के लिए ट्यूटोरियल।

प्रदर्शन

यह खंड प्रदर्शन को अनुकूलित करने के लिए सर्वोत्तम प्रथाओं का वर्णन करता है।

निर्भरता का बुद्धिमानी से उपयोग करें

क्योंकि कार्यों स्थितिरहित, निष्पादन वातावरण अक्सर (क्या एक ठंडा शुरुआत के रूप में जाना जाता है के दौरान) खरोंच से आरंभ नहीं हो जाता। जब कोई कोल्ड स्टार्ट होता है, तो फ़ंक्शन के वैश्विक संदर्भ का मूल्यांकन किया जाता है।

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

भविष्य के आह्वान में वस्तुओं का पुन: उपयोग करने के लिए वैश्विक चर का उपयोग करें

इस बात की कोई गारंटी नहीं है कि क्लाउड फ़ंक्शन की स्थिति को भविष्य के आह्वान के लिए संरक्षित किया जाएगा। हालाँकि, क्लाउड फ़ंक्शंस अक्सर पिछले आह्वान के निष्पादन वातावरण को पुन: चक्रित करता है। यदि आप वैश्विक दायरे में एक चर घोषित करते हैं, तो इसके मूल्य को पुन: गणना किए बिना बाद के आमंत्रणों में पुन: उपयोग किया जा सकता है।

इस तरह आप उन वस्तुओं को कैश कर सकते हैं जो प्रत्येक फ़ंक्शन आमंत्रण पर फिर से बनाना महंगा हो सकता है। ऐसी वस्तुओं को फ़ंक्शन बॉडी से वैश्विक दायरे में ले जाने से महत्वपूर्ण प्रदर्शन में सुधार हो सकता है। निम्न उदाहरण प्रति फ़ंक्शन इंस्टेंस में केवल एक बार एक भारी वस्तु बनाता है, और इसे दिए गए उदाहरण तक पहुंचने वाले सभी फ़ंक्शन आमंत्रणों में साझा करता है:

console.log('Global scope');
const perInstance = heavyComputation();
const functions = require('firebase-functions');

exports.function = functions.https.onRequest((req, res) => {
    console.log('Function invocation');
    const perFunction = lightweightComputation();

    res.send(`Per instance: ${perInstance}, per function: ${perFunction}`);
});

वैश्विक दायरे में नेटवर्क कनेक्शन, लाइब्रेरी संदर्भ और एपीआई क्लाइंट ऑब्जेक्ट्स को कैश करना विशेष रूप से महत्वपूर्ण है। देखें अनुकूलन नेटवर्किंग उदाहरण के लिए।

वैश्विक चर का आलसी आरंभीकरण करें

यदि आप वैश्विक दायरे में वेरिएबल्स को इनिशियलाइज़ करते हैं, तो इनिशियलाइज़ेशन कोड हमेशा कोल्ड स्टार्ट इनवोकेशन के माध्यम से निष्पादित किया जाएगा, जिससे आपके फंक्शन की लेटेंसी बढ़ जाएगी। कुछ मामलों में, यह अगर वे एक में उचित रूप से संभाला नहीं कर रहे हैं सेवाओं के लिए रुक-रुक कर समय समाप्ति बुलाया जा रहा है का कारण बनता है try / catch ब्लॉक। यदि सभी कोड पथों में कुछ वस्तुओं का उपयोग नहीं किया जाता है, तो मांग पर उन्हें आलसी रूप से प्रारंभ करने पर विचार करें:

const functions = require('firebase-functions');
let myCostlyVariable;

exports.function = functions.https.onRequest((req, res) => {
    doUsualWork();
    if(unlikelyCondition()){
        myCostlyVariable = myCostlyVariable || buildCostlyVariable();
    }
    res.status(200).send('OK');
});

यह विशेष रूप से महत्वपूर्ण है यदि आप एक फ़ाइल में कई फ़ंक्शन परिभाषित करते हैं, और विभिन्न फ़ंक्शन विभिन्न चर का उपयोग करते हैं। जब तक आप आलसी इनिशियलाइज़ेशन का उपयोग नहीं करते हैं, आप उन वेरिएबल्स पर संसाधनों को बर्बाद कर सकते हैं जिन्हें इनिशियलाइज़ किया गया है लेकिन कभी उपयोग नहीं किया गया है।

कम से कम इंस्टेंस सेट करके ठंड की शुरुआत को कम करें

डिफ़ॉल्ट रूप से, क्लाउड फ़ंक्शंस आने वाले अनुरोधों की संख्या के आधार पर उदाहरणों की संख्या को मापता है। क्लाउड फ़ंक्शंस को अनुरोधों को पूरा करने के लिए तैयार रहने के लिए न्यूनतम संख्या निर्धारित करके आप इस डिफ़ॉल्ट व्यवहार को बदल सकते हैं। इंस्टेंस की न्यूनतम संख्या सेट करने से आपके एप्लिकेशन की कोल्ड स्टार्ट कम हो जाती है। हम अनुशंसा करते हैं कि यदि आपका आवेदन विलंबता-संवेदनशील है तो न्यूनतम संख्या में इंस्टेंस सेट करें।

देखें नियंत्रण स्केलिंग व्यवहार इन क्रम विकल्पों पर अधिक जानकारी के लिए।

अतिरिक्त संसाधन

"Google क्लाउड प्रदर्शन एटलस" वीडियो में प्रदर्शन का अनुकूलन के बारे में और अधिक जानकारी प्राप्त बादल कार्य शीत बूट समय