ऑथ डिपेंडेंसी को पसंद के मुताबिक बनाना

Firebase JS SDK के मॉड्यूलर डिज़ाइन से, आपको ऐप्लिकेशन बनाने के तरीके पर बेहतर कंट्रोल मिलता है. इस सुविधा की मदद से, अपने प्लैटफ़ॉर्म के हिसाब से अपनी ज़रूरत के हिसाब से सुविधाएं चुनी जा सकती हैं. साथ ही, बंडल के साइज़ को ऑप्टिमाइज़ करने के लिए, उन सुविधाओं को हटाया जा सकता है जिनकी आपको ज़रूरत नहीं है.

ऑथराइज़ेशन लाइब्रेरी शुरू करने के दो तरीके हैं: getAuth() फ़ंक्शन और initializeAuth() फ़ंक्शन. पहला, getAuth(), आपके ऐप्लिकेशन को वे सभी सुविधाएं देता है जिनसे आपको ऑथराइज़ेशन लाइब्रेरी की ��भी सुविधा��ं क��� ��़������ा ������े की सुविधा मिलती है. इसकी कमी यह है कि इससे बहुत सारे ऐसे कोड मिल जाते हैं जिनका आपके ऐप्लिकेशन में इस्तेमाल नहीं किया जा सकता. इसकी वजह से, ऐसा कोड भी मिल सकता है जो टारगेट किए गए प्लैटफ़ॉर्म पर काम नहीं करता. इसकी वजह से गड़बड़ियां हो सकती हैं. इन समस्याओं से बचने के लिए, initializeAuth() का इस्तेमाल किया जा सकता है. यह डिपेंडेंसी का मैप लेता है. getAuth() फ़ंक्शन, तय की गई सभी डिपेंडेंसी के साथ सिर्फ़ initializeAuth() को कॉल करता है. इसे दिखाने के लिए, ब्राउज़र एनवायरमेंट पर getAuth() के बराबर तरीका यहां दिया गया है:

import {initializeAuth, browserLocalPersistence, browserPopupRedirectResolver, browserSessionPersistence, indexedDBLocalPersistence} from "firebase/auth";
import {initializeApp} from "firebase/app";

const app = initializeApp({/** Your app config */});
const auth = initializeAuth(app, {
  persistence: [indexedDBLocalPersistence, browserLocalPersistence, browserSessionPersistence],
  popupRedirectResolver: browserPopupRedirectResolver,
});

अपनी डिपेंडेंसी तैयार करना

सभी ऐप्लिकेशन, signInWithPopup या signInWithRedirect फ़ंक्शन का इस्तेमाल नहीं करते. कई ऐप्लिकेशन को indexedDB की सुविधाओं की ज़रूरत नहीं पड़ेगी या कुछ ऐप्लिकेशन के लिए indexedDB और localStorage, दोनों का इस्तेमाल नहीं किया जा सकेगा. इन मामलों में, डिफ़ॉल्ट getAuth() में बहुत सारे इस्तेमाल न होने वाले ऐसे कोड शामिल होते हैं जो बिना किसी वजह के बंडल के साइज़ को बढ़ा देते हैं. इसके बजाय, ये ऐप्लिकेशन अपनी डिपेंडेंसी के हिसाब से काम कर सकते हैं. उदाहरण के लिए, अगर आपका ऐप्लिकेशन सिर्फ़ ईमेल लिंक की पुष्टि का इस्तेमाल करता है और localStorage काफ़ी है (क्योंकि आप वेब या सर्विस वर्��र स्क्रिप्ट का इस्तेमाल नहीं कर रहे हैं), तो इस तरह 'अनुमति दें' शुरू करके कई कोड ब्लॉक किए जा सकते हैं:

import {initializeAuth, browserLocalPersistence} from "firebase/auth";
import {initializeApp} from "firebase/app";

const app = initializeApp({/** Your app config */});
const auth = initializeAuth(app, {
  persistence: browserLocalPersistence,
  // No popupRedirectResolver defined
});

इस कोड की मदद से, आपने ऐसी तीन बड़ी डिपेंडेंसी हटा दी हैं जिनकी आपके ऐप्लिकेशन को ज़रूरत नहीं है. साथ ही, जब भी आपके उपयोगकर्ता आपकी साइट पर आते हैं, तो उस समय इस्तेमाल होने वाले बैंडविथ को कम कर देते हैं.

प्लैटफ़ॉर्म के हिसाब से ज़रूरी बातें

कई मामलों में, शुरू करने में होने वाली गड़बड़ियों से बचने के लिए, आपको मैन्युअल तरीके से ऑथराइज़ेशन डिपेंडेंसी तय करनी होगी. getAuth() फ़ंक्शन एक खास प्लैटफ़ॉर्म को मानता है. डिफ़ॉल्ट एंट्री पॉइंट के लिए, वह एक ब्राउज़र एनवायरमेंट है और Cordava एंट्री पॉइंट के लिए, यह एक Cordava एनवायरमेंट है. लेकिन कभी-कभी आपके खास ऐप्लिकेशन की ज़रूरतों के बीच में ये अनुमान लगाए जाते हैं. उदाहरण के लिए, वेब और सेवा वर्कर स्क्रिप्ट के लिए, डिफ़ॉल्ट getAuth() लागू करने की प्रोसेस, window ऑब्जेक्ट से पढ़ने वाला कोड फ़ेच करती है. इससे गड़बड़ियां होंगी. ऐसे मामलों में, आपके हिसाब से डिपेंडेंसी बनाना ज़रूरी है. सर्विस वर्कर के कॉन्टेक्स्ट में ऑथ लाइब्रेरी शुरू करने के लिए, यह कोड सही है:

import {initializeAuth, indexedDBLocalPersistence} from "firebase/auth";
import {initializeApp} from "firebase/app";

const app = initializeApp({/** Your app config */});
const auth = initializeAuth(app, {
  persistence: indexedDBLocalPersistence,
  // No popupRedirectResolver defined
});

यह कोड, Auth को indexedDB परसिस्टेंस (जो वर्कर के कॉन्टेक्स्ट में उपलब्ध है) के साथ शुरू करने का निर्देश देता है. साथ ही, यह popupRedirectResolver डिपेंडेंसी को हटा देता है, जो यह मानकर चलता है कि डीओएम कॉन्टेक्स्ट उपलब्ध है.

कुछ अन्य प्लैटफ़ॉर्म पर निर्भरता को मैन्युअल रूप से तय करने की कुछ अन्य वजहें भी हो सकती हैं. 'अनुमति दें' में popupRedirectResolver फ़ील्ड के बारे में बताने पर, कुछ मामलों में लाइब्रेरी शुरू करने पर अलग से काम करती है. मोबाइल ब्राउज़र पर, लाइब्रेरी आपके पुष्टि करने वाले डोमेन के लिए, पहले से एक iframe अपने-आप खोलेगी. ऐसा ज़्यादातर उपयोगकर्ताओं को बेहतर अनुभव देने के लिए किया जाता है, लेकिन ऐप्लिकेशन शुरू होत�� ही अतिरिक्त कोड लोड करने से परफ़ॉर्मेंस पर असर पड़ सकता है. initializeAuth() का इस्तेमाल करके और browserPopupRedirectResolver डिपेंडेंसी को मैन्युअल रूप से उन फ़ंक्शन पर पास करके इस व्यवहार से बचा जा सकता है जिन्हें इसकी ज़रूरत है:

import {initializeAuth, browserLocalPersistence, browserPopupRedirectResolver, indexedDBLocalPersistence, signInWithRedirect, GoogleAuthProvider} from "firebase/auth";
import {initializeApp} from "firebase/app";

const app = initializeApp({/** Your app config */});
const auth = initializeAuth(app, {
  persistence: [indexedDBLocalPersistence, browserLocalPersistence],
});

// Later
signInWithRedirect(auth, new GoogleAuthProvider(), browserPopupRedirectResolver);

अगर हमने initializeAuth() को डिपेंडेंसी के तौर पर browserPopupRedirectResolver दिया होता, तो signInWithRedirect() को किए गए कॉल में तीसरे पैरामीटर की ज़रूरत नहीं होती. हालांकि, उस डिपेंडेंसी को सीधे signInWithRedirect() कॉल पर ले जाने से, शुरू करने के दौरान शुरुआती परफ़ॉर्मेंस हिट हटा दिया जाता है. निर्भरता को बढ़ाने के साथ कई चीज़ें बदल सकती हैं, लेकिन सबसे अहम बात यह है कि लाइब्रेरी को मैन्युअल तरीके से शुरू करके, इससे होने वाले नुकसान के बारे में फ़ैसले लिए जा सकते हैं.

पसंद के मुताबिक शुरू करने की सुविधा का इस्तेमाल कब करना चाहिए

रीकैप के तौर पर, पसंद के मुताबिक शुरू करने की सुविधा से, आपको अपने ऐप्लिकेशन में, अनुमति देने वाले SDK टूल के इस्तेमाल पर बेहतर कंट्रोल मिलता है. स्टैंडर्ड getAuth() फ़ंक्शन, शुरू करने के लिए अच्छा है. साथ ही, इसका इस्तेमाल ज़्यादातर मामलों में किया जा सकता है. ज़्यादातर ऐप्लिकेशन के लिए, आपके लिए getAuth() की ज़रूरत हो सकती है. हालांकि, मैन्युअल डिपेंडेंसी मैनेजमेंट पर स्विच करने (या ज़रूरत) की कई वजहें हो सकती हैं:

  • ऐसे ऐप्लिकेशन के लिए जिनके बंडल का साइज़ और लोड होने में लगने वाला समय बहुत ज़्यादा ज़रूरी होते हैं, उनके लिए पसंद के मुताबिक अनुमति शुरू करने की सुविधा, कई किलोबाइट डेटा की बचत कर सकती है. यह डिपेंडेंसी को शुरू करने के समय के बजाय इस्तेमाल के समय पर ले जाकर, शुरुआती लोड समय को भी कम कर सकता है.
  • नॉन-DOM कॉन्टेक्स्ट में चलने वाले कोड (जैसे, वेब और सर्विस वर्कर) के लिए, initializeAuth() का इस्तेमाल करना ज़रूरी है, ताकि गड़बड़ियों से बचा ज�� सके.