ปรับแต่งทรัพยากร Dependency ของการตรวจสอบสิทธิ์

การออกแบบโมดูลนี้ของ Firebase JS SDK ทำให้คุณควบคุมการสร้างแอปได้ดีขึ้นมาก ความยืดหยุ่นนี้ทำให้คุณปรับ���ต่งทรัพยากร Dependency สำหรับแพลตฟอร์มและเพิ่มประสิทธิภาพขนาดแพ็กเกจได้โดยการตัดฟีเจอร์ที่ไม่ต้องการออก

การเริ่มต้นไลบรารีการตรวจสอบสิทธิ์มี 2 วิธี ได้แก่ ฟังก์ชัน getAuth() และฟังก์ชัน initializeAuth() ฟีเจอร์แรกคือ getAuth() จะมีทุกอย่างที่แอปของคุณต้องการเพื่อใช้ประโยชน์จากฟีเจอร์ทั้งหมดที่มีในไลบรารีการตรวจสอบสิทธิ์ ข้อเสียคือระบบจะดึงโค้ดจำนวนมากที่แอปอาจไม่ได้ใช้ นอกจากนี้ยังอาจดึงโค้ดที่เพียงไม่รองรับในแพลตฟอร์มที่คุณกำหนดเป้าหมายอยู่และทำให้เกิดข้อผิดพลาดด้วย เพื่อหลีกเลี่ยงปัญหาเหล่านี้ คุณสามารถใช้ initializeAuth() ซึ่งจะใช้แผนที่ทรัพยากร Dependency ฟังก์ชัน getAuth() จะเรียกใช้ initializeAuth() พร้อมทรัพยากร Dependency ทั้งหมดที่ระบุ เพื่อให้เห็นภาพ นี่คือฟังก์ชันที่เทียบเท่ากับ 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,
});

การปรับแต่งทรัพยากร Dependency

แอปบางแอปไม่ได้ใช้ฟังก์ชันในตระกูล signInWithPopup หรือ signInWithRedirect แอปจำนวนมากไม่จำเป็นต้องมีความยืดหยุ่นแบบที่ indexedDB มีให้ หรือไม่จำเป็นต้องรองรับทั้ง indexedDB และ localStorage หากไม่มีให้เลือก ในกรณีเหล่านี้ getAuth() เริ่มต้นจะมีโค้ดที่ไม่มีการใช้งานจำนวนมากซึ่งจะเพิ่มขนาด Bundle โดยไม่มีเหตุผล แอปเหล่านี้จะปรับแต่ง ทรัพยากร Dependency ได้ ตัวอย่างเช่น หากแอปของคุณใช้เพียงการตรวจสอบสิท��ิ์ลิงก์อีเมลและ 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
});

โค้ดนี้ช่วยขจัดทรัพยากร Dependency ขนาดใหญ่ 3 รายการที่แอปของคุณไม่จำเป็นต้องใช้ออกไป ซึ่งช่วยลดจำนวนแบนด์วิดท์ที่ผู้ใช้ต้องใช้เมื่อเข้าชมเว็บไซต์ของคุณลงได้อย่างมาก

ข้อควรพิจารณาเฉพาะแพลตฟอร์ม

ในหลายกรณี คุณต้องระบุทรัพยากร Dependency ของการตรวจสอบสิทธิ์ด้วยตนเองเพื่อหลีกเลี่ยงข้อผิดพลาดในการเริ่มต้น ฟังก์ชัน getAuth() จะถือว่ามาจากแพลตฟอร์มที่เฉพาะเจาะจง จุดแรกเข้าเริ่มต้นเป็นสภาพแวดล้อมของเบราว์เซอร์และสำหรับจุดแรกเข้าของ Cordova นั่นก็คือสภาพแวดล้อม Cordova แต่บางครั้งความต้องการของแอปพลิเคชัน ของคุณก็ขัดแย้งกับสมมติฐานเหล่านี้ ตัวอย่างเช่น สำหรับสคริปต์เว็บและโปรแกรมทำงานของบริการ การใช้งาน getAuth() เริ่มต้นจะดึงโค้ดที่อ่านจากออบเจ็กต์ window ซึ่งจะทำให้เกิดข้อผิดพลาด ในกรณีเหล่านั้น คุณจำเป็นต้องปรับทรัพยากร Dependency เอง โค้ดต่อไปนี้มีความเหมาะสมที่จะเริ่มต้นไลบรารีการตรวจสอบสิทธิ์ในบริบทของ Service Worker

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
});

โค้ดนี้จะสั่งให้การตรวจสอบสิทธิ์เริ่มต้นกับการคงอยู่ของ indexedDB (ซึ่งจะพร้อมใช้งานในบริบทของผู้ปฏิบัติงาน) และละเว้นทรัพยากร Dependency ของ popupRedirectResolver ซึ่งจะถือว่าบริบท DOM พร้อมใช้งาน

มีเหตุผลอื่นๆ ที่คุณอาจกำหนดทรัพยากร Dependency ในบางแพลตฟอร์มด้วยตัวเอง การกำหนดช่อง popupRedirectResolver ในการเริ่มต้นการตรวจสอบสิทธิ์ในบางกรณี ไลบรารีจะดำเนินการเพิ่มเติมในการเริ่มต้น ในเบราว์เซอร์ในอุปกรณ์เคลื่อนที่ ไลบรารีจะเปิด iframe ไปยังโดเมน Auth ของคุณชั่วคราวโด���อัตโนมัติ การทำเช่นนี้ทำให้ผู้ใช้ส่วนใหญ่ได้รับประสบการณ์การใช้งานที่ราบรื่น แต่ก็อาจส่งผลกับประสิทธิภาพได้ด้วยการโหลดโค้ดเพิ่มเติมทันทีที่แอปเริ่มทำงาน คุณหลีกเลี่ยงลักษณะการทำงานนี้ได้โดยใช้ initializeAuth() และส่ง���รัพยากร Dependency ของ 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);

หากเราระบุ browserPopupRedirectResolver ในทรัพยากร Dependency ไปยัง initializeAuth() แล้ว ก็ไม่จำเป็นต้องใช้พารามิเตอร์ที่ 3 ในการเรียกใช้ signInWithRedirect() แต่เมื่อย้ายทรัพยากร Dependency นั้นไปยังการเรียกไปยัง signInWithRedirect() โดยตรง ระบบจะนำ Hit ด้านประสิทธิภาพเริ่มต้นระหว่างการกำหนดค่าออก มีทั้งข้อดีและข้อเสีย แต่สิ่งสำคัญคือคุณสามารถตัดสินใจเกี่ยวกับข้อดีข้อเสียเหล่านั้นด้วยการเริ่มต้นใช้งานไลบรารีด้วยตนเอง

กรณีที่ควรใช้การเริ่มต้นที่กําหนดเอง

กล่าวโดยสรุปคือ การเริ่มต้นที่กำหนดเองช่วยให้คุณควบคุมการใช้ Auth SDK ของแอปได้มากขึ้น ฟังก์ชัน getAuth() มาตรฐานเหมาะกับการเริ่มต้นใช้งานและแสดง Use Case ส่วนใหญ่ สำหรับแอปส่วนใหญ่ คุณอาจ ต้องใช้ getAuth() แต่มีหลายสาเหตุที่คุณอาจต้องการ (หรือจำเป็นต้อง) เปลี่ยนไปใช้การจัดการการขึ้นต่อกันด้วยตนเอง เช่น

  • สำหรับแอปที่ขนาดแพ็กเกจและเวลาในการโหลดมีความสำคัญมาก การเริ่มต้นการตรวจสอบสิทธิ์แบบกำหนดเองอาจช่วยลดข้อมูลหลายกิโลไบต์ได้ นอกจากนี้ยังช่วยลดเวลาในการโหลดเริ่มต้นด้วยการย้ายทรัพยากร Dependency ไปยังเวลาใช้งานแทนเวลาเริ่มต้น
  • สำหรับโค้ดที่ทำงานในบริบทที่ไม่ใช่ DOM (เช่น Web และ Service Worker) ต้องใช้ initializeAuth() เพื่อหลีกเลี่ยงข้อผิดพลาด