Firebase: ο μεγάλος, ο meh και ο άσχημος

Πήγαμε κατευθείαν στο Firebase όταν η Google το ανακοίνωσε στο Google I / O τον Μάιο του 2016.

Ξεκινήσαμε μια εφαρμογή React μίας σελίδας που έπρεπε να λειτουργεί σε κινητό μέσω Cordova και επιτραπέζιου υπολογιστή μέσω Electron. Έτσι, το Firebase μας φαινόταν σαν μια μαγική λύση για εμάς.

Τώρα, μετά από 7 μήνες εργασίας με το Firebase σχεδόν καθημερινά, είμαι έτοιμος να μοιραστώ μαζί μας την εμπειρία μας.

Το σπουδαίο

Δεδομένα σε πραγματικό χρόνο

Ναι, είναι φοβερό. Με λίγα υδραυλικά και κάποια μαγεία που δεσμεύουν δεδομένα, μπορείτε να συνδέσετε τις απόψεις σας με τα δεδομένα σας και να αλλάξουν μαγικά όταν αλλάζουν τα δεδομένα.

Σύμφωνα με την εμπειρία μας, η απόδοση ήταν σταθερά εξαιρετική, αν και το Firebase έχει σχεδιαστεί με γνώμονα εκατομμύρια χρήστες, οπότε δεν ξύσαμε ούτε καν την επιφάνεια του θηρίου.

Οι χρήστες μας εξακολουθούν να εντυπωσιάζονται από το πόσο γρήγορα λειτουργούν όλα.

Στατική φιλοξενία σε στεροειδή

Η φιλοξενία Firebase συνοδεύεται από δωρεάν CDN και SSL - όλα λειτουργούν στην πλατφόρμα Google Cloud. Αυτό σημαίνει ότι δεν πρέπει να αντιμετωπίζετε προβλήματα κατά την εξυπηρέτηση αρχείων σε οποιονδήποτε αριθμό χρηστών σε όλο τον κόσμο.

Αν ψάχνετε για φιλοξενία μηδενικής διαμόρφωσης για την επόμενη εφαρμογή μίας σελίδας ή τον στατικό ιστότοπό σας, θα θεωρούσα πραγματικά το Firebase ως επιλογή, ακόμα κι αν δεν χρησιμοποιείτε καμία από τις άλλες υπηρεσίες της Google.

Σούπερ δυνάμεις

Το Firebase σάς παρέχει επίσης έναν αριθμό υπηρεσιών και SDK που είναι εξαιρετικά εύκολο να ενσωματωθούν, όπως:

  • Έλεγχος ταυτότητας OAuth
  • Αποθήκευση αρχείων
  • Αντίγραφα ασφαλείας βάσης δεδομένων
  • Αυτόματη κλιμάκωση
  • CLI για ανάπτυξη και άλλα καθήκοντα
  • Δωρεάν βαθμίδα

Το Meh

Η κονσόλα

Είναι όμορφο και σας επιτρέπει να κάνετε μια σειρά από πράγματα, αλλά δεν είναι αυτό χρήσιμο.

Ο διαχειριστής βάσεων δεδομένων είναι πραγματικά ένας ένδοξος επεξεργαστής JSON. Τέλεια για αυτό που είναι, αλλά δεν είναι η πλήρης λύση που περίμενα να είναι. Εάν προέρχεστε από WorkBench, Postico, Mongotron ή ακόμα και PHPMyAdmin, αυτό θα είναι ένα ωραίο παιχνίδι.

Μια άλλη πολύ περιοριστική πτυχή της κονσόλας είναι η έλλειψη λεπτομερών αρχείων καταγραφής ή αναλυτικών στοιχείων. Λαμβάνοντας υπόψη ότι είναι δεδομένα που βασανίζονται σε δεδομένα, το Google μιλάμε για αυτό φαίνεται περίεργο. Σίγουρα έχετε ένα ωραίο γράφημα για τη χρήση της βάσης δεδομένων, αλλά δεν υπάρχει τρόπος να γνωρίζετε πόσες φορές έχει ληφθεί ένα αρχείο από το χώρο αποθήκευσης, εκτός εάν εφαρμόσετε μόνοι σας μια λύση.

Χωρίς διακομιστή;

Το Firebase είναι στατική φιλοξενία + API, τίποτα περισσότερο. Αυτός ο περιορισμός δεν είναι το τέλος του κόσμου. Μπορείτε να το επιλύσετε εύκολα χρησιμοποιώντας έναν διακομιστή Node.js ως άλλον πελάτη του Firebase, τον οποίο πιθανότατα θα χρειαστείτε για πολλές κοινές εργασίες, όπως δημιουργία μικρογραφιών, αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου στους χρήστες σας κ.λπ.

Προφανώς θα είναι δυνατή η χρήση του Google Cloud Functions (ακόμα σε Alpha) με το Firebase, αλλά ποιος ξέρει πότε. Ίσως αυτό να ανακοινωθεί στο Google I / O 2017.

(Επεξεργασία Μαρτίου 2017 : Το Firebase μόλις ανακοίνωσε το Google Cloud Functions for Firebase)

( Επεξεργασία Μαΐου 2018 : Ελέγξτε την κριτική μου για το Firebase Cloud Functions)

Καθορισμός κανόνων ασφαλείας

Το Firebase χρησιμοποιεί ένα αρχείο JSON με κώδικα Javascript σε συμβολοσειρές για να καθορίσει κανόνες σχετικά με τη βάση δεδομένων και τον χώρο αποθήκευσης.

{ "rules": { "users": { "$uid": { ".write": "$uid === auth.uid" } } }}

Αυτό δεν είναι τόσο κακό όσο ακούγεται, αφού μπορείτε να χρησιμοποιήσετε το Bolt για να κάνετε αυτή τη διαδικασία λιγότερο επώδυνη. Παρόλο που, ακόμη και όταν χρησιμοποιείτε το Bolt, όταν ξεπεράσετε τους απλούς δεκάδες κανόνες, αυτό το αρχείο καθίσταται μη διατηρήσιμο ιταλικό Food ™

Υπηρεσίες όπως το Dream Factory και το Graph Cool σας δίνουν ένα κατάλληλο εργαλείο για να το κάνετε αυτό χωρίς να χάσετε τη λογική σας.

Ιδιόκτητη τεχνολογία

Όταν το Facebook αποφάσισε να κλείσει το Parse, πολλά έργα βρέθηκαν σε δύσκολη θέση. Ειλικρινά αμφιβάλλω ότι αυτό θα συμβεί στο Firebase, αλλά καταλαβαίνω την απροθυμία να συνδυάσετε την τεχνολογική σας στοίβα με μια πλατφόρμα τρίτου μέρους ως υπηρεσία.

Δεν υπάρχει τρόπος τοπικής ανάπτυξης

Εάν ταξιδεύετε συχνά ή ζείτε σε μια χώρα με κακή συνδεσιμότητα, θεωρήστε ότι δεν μπορείτε να εργαστείτε με μια τοπική εγκατάσταση. Δεν μπορείτε απλώς να χρησιμοποιήσετε το Docker ή το Node και να ξεκινήσετε το API σας.

Ο άσχημος

Περιορισμένο SDK Javascript

Υπάρχουν πολλές δυνατότητες στο Firebase που εφαρμόζονται μόνο στα SDK iOS και Android.

Το πιο έντονο είναι η έλλειψη επιμονής εκτός σύνδεσης όταν εργάζεστε με Javascript. Η εφαρμογή ιστού, υβριδικού ή ReactNative θα συνεχίσει να λειτουργεί εάν η συσκευή χάσει στιγμιαία τη σύνδεση. Αλλά μόλις κλείσετε την εφαρμογή ή την καρτέλα, τα δεδομένα σας θα εξαφανιστούν. Εναπόκειται σε εσάς να εφαρμόσετε μια προσωρινή μνήμη με επιμονή. Αυτό μπορεί πραγματικά να είναι μια σοβαρή προσπάθεια, ειδικά στο κινητό.

Το Javascript SDK δεν έχει καν τρόπο αποθήκευσης δεδομένων (δεν είναι σίγουρος για iOS ή Android). Εάν φορτώσετε /productsκαι στη συνέχεια χρειαστείτε αυτά τα δεδομένα αργότερα, θα πρέπει να τα φορτώσετε εκ νέου εκτός εάν διατηρήσετε μια σύνδεση στο παρασκήνιο Δεν είναι δύσκολο να εφαρμοστεί αυτό, αλλά και πάλι, γιατί το Firebase δεν παρέχει έναν μαγικό τρόπο να το κάνει αυτό;

Κανένας τρόπος να κάνετε ερώτημα σωστά στα δεδομένα σας

Μπορείτε να κάνετε πολύ βασικό φιλτράρισμα και σελιδοποίηση, αλλά εκτός από αυτό είστε μόνοι σας.

Πραγματικά? Η Google παρέχει μια υπηρεσία δεδομένων χωρίς δυνατότητες αναζήτησης ή φιλτραρίσματος;

Ναι. Πραγματικά.

Εάν θέλετε να εφαρμόσετε τη λειτουργία αναζήτησης, θα πρέπει είτε να κάνετε λήψη όλων των δεδομένων και να το κάνετε στον πελάτη, να χρησιμοποιήσετε έναν διακομιστή όπως περιγράψαμε προηγουμένως ή να εφαρμόσετε μια υπηρεσία τρίτου μέρους όπως το Elastic.

Οι προγραμματιστές του Firebase δήλωσαν ότι αυτό οφείλεται στη σχεδίαση, ώστε να μπορούν να εξασφαλίσουν υψηλή απόδοση. ΕΝΤΑΞΕΙ. Αλλά γιατί να μην αφήσουμε τους χρήστες να αποφασίσουν εάν μπορούμε να πληρώσουμε την τιμή απόδοσης για την περίπτωση χρήσης μας;

Ναι, και ξεχάστε να κάνετε συνδέσεις ή οτιδήποτε άλλο σας αρέσει πολύ με τα δεδομένα σας. Που με φέρνει σε…

Ηλίθια μοντελοποίηση δεδομένων

Η αντιμετώπιση σχέσεων με τη NoSQL είναι δύσκολη, η αντιμετώπιση σχέσεων με το Firebase είναι πόνος στον κώλο. - Baptiste Jamin

Αυτό που είπε.

Η βάση δεδομένων Firebase είναι βασικά μόνο ένα τεράστιο αρχείο JSON. Δεν υπάρχει τρόπος να δηλώσετε μια προς πολλές ή πολλές σε πολλές σχέσεις. Στην πράξη αυτό σημαίνει ότι θα καταλήξετε να αντιγράφετε τα δεδομένα σας παντού.

Αυτό δεν φαίνεται τόσο κακό στην αρχή. Σε τελική ανάλυση, είναι βολικό να βάλετε το όνομα του χρήστη σε ένα μήνυμα συνομιλίας, όχι;

{ “author”:”Pepito Flores”, “message”:”I want a taco!”, “time”: 1484269756951}

Το πρόβλημα έρχεται όταν πρέπει να επεξεργαστείτε πραγματικά το όνομα του Pepito, καθώς θα πρέπει να το τροποποιήσετε παντού που το έχετε χρησιμοποιήσει και όχι μόνο στο /users.

Το να πείτε στους χρήστες σας ότι δεν μπορούν να επεξεργαστούν το όνομά τους δεν είναι συνήθως μια βιώσιμη επιλογή, οπότε:

  1. Ο κωδικός πελάτη σας για τη σύνταξη και επεξεργασία δεδομένων στο Firebase θα γίνει σε πολλές περιπτώσεις Italian Food ™.
  2. Η τεκμηρίωση όπου έχετε αντιγράψει τα δεδομένα σας θα είναι δύσκολο να πούμε το λιγότερο.

Επίσης, δεδομένου ότι πολλές βάσεις δεδομένων NoSQL όπως το MongoDB ή το RethinkDB έχουν βρει τρόπους για αυτό το πρόβλημα, δυσκολεύομαι να πιστέψω ότι η Google δεν μπορεί να το λύσει με τουλάχιστον λογική απόδοση.

TL; Δρ

Το Firebase είναι εκπληκτικό για απλά έργα ή για ανάπτυξη μικρών δυνατοτήτων που απαιτούν δεδομένα σε πραγματικό χρόνο. Για παράδειγμα μια συνομιλία ή ένα σύστημα ειδοποιήσεων. Αυτές είναι οι εντυπωσιακές επιδείξεις 30 λεπτών που βλέπετε στο YouTube. Λειτουργεί επίσης πολύ καλά εάν τα δεδομένα σας είναι ροές πραγμάτων με μια απλή δομή, όπως μια υπηρεσία για ένα διαδικτυακό παιχνίδι για πολλούς παίκτες.

Οτιδήποτε με πιο περίπλοκη απαίτηση δεδομένων γίνεται δύσκολο ή ακόμη και αδύνατο με το Firebase. Η τακτική εκτέλεση των ερωτημάτων βάσης δεδομένων μύλων είναι στις περισσότερες περιπτώσεις πιο πολύτιμη από τα δεδομένα σε πραγματικό χρόνο και τόσο εντυπωσιακή όσο το να βλέπει κανείς να αλλάζει πράγματα, πιθανώς δεν χρειάζεστε κανένα από αυτά.

Όπως όλα, επιλέξτε το σωστό εργαλείο για τη δουλειά.

Προσθήκη: αυτό που το Firebase πρέπει να είναι καταπληκτικό

  1. Πραγματικές δυνατότητες ερωτήματος. Αναζητήστε, συμμετέχετε σε ολόκληρη την enchilada
  2. Κάποιες αναφορές όπως το MongoDB ή το RethinkDB.
  3. Πραγματική επιμονή εκτός σύνδεσης με Javascript.
  4. Δώσε μου Moar analytics.
  5. API προσωρινής μνήμης.

Αυτό είναι όλο.

Παράρτημα 2: πληροφορίες για το moar

Εάν το διαβάζετε αυτό, ίσως να αξιολογείτε το Firebase ως προγραμματιστή ή CTO. Ακολουθούν ορισμένα άλλα άρθρα που θα μπορούσαν να σας βοηθήσουν να αποφασίσετε αν το Firebase μπορεί να λειτουργήσει για εσάς και αν αξίζει να επενδύσετε επιπλέον χρόνο για αξιολόγηση.

Firebase: The Good, Bad και the Ugly - RaizException - Raizlabs Developer Blog

Ως μέρος της δουλειάς μας ως προγραμματιστές λογισμικού στο Raizlabs, αξιολογούμε συνεχώς τα πιο πρόσφατα εργαλεία ανάπτυξης που χρησιμοποιήθηκαν… www.raizlabs.com Λόγοι για μη χρήση του Firebase

Η δημιουργία εφαρμογών σε πραγματικό χρόνο είναι σήμερα στάνταρ. Στο Crisp, χρησιμοποιήσαμε το Firebase στην παραγωγή πάνω από 9 μήνες, ξεκινώντας από… crisp.im