Priya — με ρώτησες την περασμένη εβδομάδα αν ο watcher πτώσης τιμών που φτιάχνεις θα έπρεπε απλώς να κάνει poll στη σελίδα του προϊόντος κάθε λεπτό «για ασφάλεια». Πριν το ενσωματώσεις, άσε με να σου εξηγήσω το όλο θέμα, γιατί το διάστημα polling είναι στην πραγματικότητα η μικρότερη απόφαση εδώ, και το να βάλεις τη σωστή δομή εξαρχής θα σου γλιτώσει έναν-δύο κύκλους αναθεώρησης πριν από το launch σου.
Ξεκίνα από το ίδιο το prompt. Μου είπες «μια επέκταση που παρακολουθεί αυτή τη σελίδα και με ειδοποιεί όταν πέφτει η τιμή», και είναι καλή ιδέα αλλά δεν είναι ακόμα προδιαγραφή — ο builder πρέπει να ξέρει πότε ενεργεί, όχι μόνο τι κάνει. Ο δικός σου watcher είναι το τρίτο από τρία σχήματα ενεργοποίησης, και αξίζει να ξέρεις και τα άλλα δύο, παρόλο που δεν τα χρειάζεσαι, γιατί το σχήμα καθορίζει τα δικαιώματα και τα δικαιώματα καθορίζουν το χρονοδιάγραμμα αναθεώρησης.
- Το click-to-act είναι το πιο οικονομικό: ένα popup που τρέχει μία φορά πάνω στην τρέχουσα σελίδα όταν κάποιος πατήσει το εικονίδιο της γραμμής εργαλείων — σκέψου κάτι σαν «συγκέντρωσε κάθε τιμή σε αυτή τη σελίδα σε μια λίστα».
- Το always-on content script τρέχει αυτόματα σε ένα μοτίβο URL που ορίζεις — καλό για κάτι σαν την επισήμανση του ονόματος ενός ανταγωνιστή σε κάθε σελίδα κάτω από ένα domain, αλλά πρέπει να δηλώσεις ρητά το μοτίβο, γιατί το «στους εσωτερικούς μας ιστότοπους» θα ερμηνευτεί πιο στενά απ' όσο εννοούσες.
- Η δική σου περίπτωση είναι η τρίτη: ένας background watcher, κατάσταση που διατηρείται είτε είναι ανοιχτή η καρτέλα είτε όχι, τρέχοντας σε service worker κάτω από το MV3, βάζοντας badge στο εικονίδιο όταν κάτι αλλάζει.
Αυτό είναι το μοναδικό σχήμα στο οποίο ο builder θα έπρεπε να σου κάνει μια διευκρινιστική ερώτηση, και θα το κάνει — γιατί ο αριθμός του polling είναι πραγματικός συμβιβασμός, όχι τυπικότητα.
Κάτι που με φέρνει πίσω στο ένστικτό σου για «κάθε λεπτό». Ζήτησα σχεδόν ακριβώς το build σου πριν από καιρό — παρακολούθηση σελίδας, badge στο εικονίδιο όταν αλλάζει η τιμή — και το πρώτο πέρασμα έκανε poll κάθε 60 δευτερόλεπτα. Λειτούργησε μια χαρά για ένα άτομο που το δοκίμαζε τοπικά. Πολλαπλασίασέ το με όσους άνθρωποι πραγματικά εγκαταστήσουν αυτό το πράγμα και θα χτυπάς τη σελίδα προϊόντος κάποιου χωρίς λόγο, γιατί οι τιμές σε μια κανονική λιανική καταχώρηση δεν αλλάζουν παραπάνω από λίγες φορές την ημέρα. Πες στον builder «έλεγξε κάθε 30 λεπτά» στο prompt. Δεν είναι συμβιβασμός, είναι το πιο ειλικρινές αίτημα — κανείς δεν χρειάζεται ειδοποιήσεις υπό-λεπτού από μια επέκταση browser, και θα ευχαριστήσεις τον εαυτό σου αργότερα όταν δεν θα εξηγείς σε έναν αναθεωρητή γιατί η επέκτασή σου επικοινωνεί με τον server 1.440 φορές την ημέρα.
Τα κομμάτια που δεν χρειάζεται να σκεφτείς
Ανέφερες ότι αγχώνεσαι για το manifest — μην αγχώνεσαι, είναι το ένα πράγμα που πραγματικά δεν χρειάζεται να αγγίξεις. Και τα δύο καταστήματα απαιτούν πλέον Manifest V3· το MV2 σταμάτησε να γίνεται δεκτό για νέες καταχωρήσεις και το Chrome αποσύρει ενεργά τις επεκτάσεις MV2 που είναι ακόμα ζωντανές. Η κύρια αλλαγή στο MV3 είναι ότι η background λογική σου τρέχει ως service worker αντί για μόνιμη background σελίδα — ενεργοποιείται σε ένα event, ο browser μπορεί να τον τερματίσει ανάμεσα σε events, και η κατάσταση πρέπει να περνά μέσα από chrome.storage αντί απλώς να ζει σε μια μεταβλητή. Αυτή είναι ακριβώς η λεπτομέρεια κύκλου ζωής που ο builder γράφει σωστά εξ ορισμού. Δεν πρόκειται να δεις ποτέ αρχείο manifest, εκτός αν ψάξεις επίτηδες να το βρεις.
Αυτό στο οποίο θα έπρεπε πραγματικά να δώσεις προσοχή είναι τα δικαιώματα, γιατί αυτά καθορίζουν πόσο γρήγορα θα προχωρήσει η αναθεώρησή σου, όχι ο κώδικας. Ο watcher σου χρειάζεται alarms για το polling και πιθανόν storage για να θυμάται την τελευταία τιμή — δεν χρειάζεται tabs ή <all_urls>, και αν ζητήσεις «τη δυνατότητα να λειτουργεί σε οποιονδήποτε ιστότοπο τελικά» επειδή ίσως την επεκτείνεις αργότερα, ο builder θα φτιάξει προς αυτή την κατεύθυνση και θα ζητάς ευρεία πρόσβαση host για μια λειτουργία που δεν υπάρχει ακόμα. Αυτή είναι η πιο τρομακτική γραμμή στο παράθυρο εγκατάστασης — «διάβασε και άλλαξε δεδομένα σε κάθε ιστότοπο που επισκέπτεσαι» — και είναι επίσης αυτό που μετατρέπει μια αυτοματοποιημένη αναθεώρηση σε χειροκίνητη. Περίγραψε τι κάνει σήμερα. Διεύρυνέ το αργότερα αν πραγματικά το χρειαστείς.
Δύο ακόμα πράγματα που αξίζουν τριάντα δευτερόλεπτα προσοχής πριν το θεωρήσεις έτοιμο: το popup UI και τα εικονίδια.
- Popup UI — μια προεπιλεγμένη σελίδα ρυθμίσεων, γυμνά checkboxes, χωρίς ιεραρχία, είναι μια πραγματική πηγή μονόαστερων κριτικών που δεν έχουν καμία σχέση με το αν λειτουργεί η επέκταση. Η δική σου έχει μόνο μερικές ρυθμίσεις (το URL, ίσως το διάστημα), αλλά θα πρέπει και πάλι να μοιάζει με προϊόν, όχι με ξεπεταγμένη φόρμα.
- Εικονίδια — φρόντισε να ελεγχθεί το εικονίδιο και στα τέσσερα μεγέθη του Chrome (16, 32, 48, 128px, με ελαφρώς διαφορετικό πλέγμα για το Firefox), γιατί ένα λογότυπο που είναι ευκρινές στα 128 γίνεται θολούρα στα 16, ακριβώς εκεί όπου εμφανίζεται στη γραμμή εργαλείων τον περισσότερο καιρό.
Πριν αγγίξεις οποιοδήποτε από τα δύο καταστήματα
Δοκίμασέ το πραγματικά, όχι μόνο στην προεπισκόπηση του chat. Αυτό που παίρνεις από το build είναι μια πραγματική, φορτώσιμη επέκταση, οπότε πήγαινε στο chrome://extensions, ενεργοποίησε τη λειτουργία προγραμματιστή, «φόρτωση χωρίς συσκευασία» (load unpacked), και τρέξε την πάνω στην πραγματική σελίδα προϊόντος που σε ενδιαφέρει — όχι σε μια προσομοιωμένη έκδοσή της. Θα έλεγχα συγκεκριμένα δύο πράγματα με το χέρι: αν το μήνυμα δικαιωμάτων εγκατάστασης λέει αυτό που θα περίμενες με βάση αυτό που ζήτησες, και τι συμβαίνει αν το content script φτάσει ποτέ σε σελίδα για την οποία δεν φτιάχτηκε — αποτυγχάνει σιωπηλά ή πετάει κάτι ορατό; Και τα δύο παίρνουν λιγότερο από ένα λεπτό και είναι το είδος του bug που είναι προφανές τη στιγμή που το κοιτάς και αόρατο αν δεν το κοιτάξεις.
Όταν είσαι έτοιμη να κάνεις πραγματικά launch, θα περάσεις μέσα από τους δικούς σου λογαριασμούς προγραμματιστή και στα δύο καταστήματα — η καταχώρηση είναι δική σου, η πλατφόρμα δεν τη διαχειρίζεται για σένα. Και θέλω να επισημάνω ότι τα δύο καταστήματα δεν είναι καθόλου συμμετρικά, γιατί δεν θέλω να σχεδιάσεις την ημερομηνία launch σου υποθέτοντας ότι είναι.
| Κατάστημα | Διαδικασία υποβολής |
|---|---|
| Chrome | Συμπληρώνει αυτόματα την καταχώρηση — τίτλο, περιγραφή, κατηγορία, και το κείμενο αιτιολόγησης δικαιωμάτων που πραγματικά διαβάζει η αναθεώρηση, παραγμένο από το τι κάνει ο κώδικας αντί να γράφεται ξεχωριστά, κάτι που έχει σημασία γιατί οι μη ταιριαστές αιτιολογήσεις είναι από μόνες τους συχνός λόγος απόρριψης. |
| Firefox | Ουσιαστικά χωρίς χέρια· η ροή της Mozilla είναι πιο ελαφριά και η υποβολή απλώς προχωράει. |
Το πακέτο καταχώρησης που δημιουργείται μετά την ολοκλήρωση του build σου θα παράγει επίσης screenshots από την πραγματική λειτουργία της επέκτασής σου (όχι mockup), κείμενο καταχώρησης, και απαντήσεις πρακτικών απορρήτου ελεγμένες σε σχέση με τον πραγματικό κώδικα αντί να συμπληρώνονται από μνήμη. Αυτό το τελευταίο κομμάτι είναι πιο σημαντικό απ' όσο ακούγεται για κάτι που επικοινωνεί με μια εξωτερική σελίδα: το ερωτηματολόγιο απορρήτου του Chrome κάνει απλές ερωτήσεις ναι/όχι για τον χειρισμό δεδομένων, και το να απαντήσεις «όχι» στο «συλλέγει αυτό δεδομένα» ενώ ο watcher σου κάνει polling και αποθηκεύει τιμές είναι το είδος της μικρής ανειλικρίνειας που αφαιρείται μετά το launch, όχι απλώς απορρίπτεται πριν. Το να ελέγχονται οι απαντήσεις σε σχέση με το τι κάνει ο κώδικας κλείνει αυτό το κενό αυτόματα για σένα.
| Κατάστημα | Τυπικός χρόνος αναθεώρησης |
|---|---|
| Firefox | Ώρες, μερικές φορές κάτω από μία |
| Chrome | Μερικές ημέρες, περιστασιακά πιο κοντά στις δύο σε άσχημη εβδομάδα |
Επεκτάσεις background-persistence όπως η δική σου έχουν περισσότερες πιθανότητες να καταλήξουν στην πιο αργή, χειροκίνητη λωρίδα αναθεώρησης σε σχέση με μια απλή click-to-act. Κανείς μας δεν μπορεί να επηρεάσει αυτή την ουρά. Σχεδίασε την ανακοίνωσή σου γύρω από το χρονοδιάγραμμα του Chrome, όχι του Firefox, και μην προγραμματίσεις τίποτα για την ίδια ημέρα που κάνεις υποβολή.
Ένα τελευταίο πράγμα, επειδή σε ξέρω — ήδη σκέφτεσαι να προσθέσεις «συγχρονισμός της λίστας παρακολούθησης σε συσκευές» και «παρακολούθηση ιστορικού τιμών με τον καιρό» μόλις γίνει το launch. Καλό αυτό, αλλά να ξέρεις ότι το καθένα από αυτά είναι νέο δικαίωμα, και ένα νέο δικαίωμα μπορεί να σημαίνει πιο αργή αναθεώρηση από αυτήν που μόλις πέρασες. Αν είσαι σίγουρη ότι θέλεις τη μεγαλύτερη έκδοση, είναι πραγματικά καλύτερο να το ζητήσεις τώρα και να αντέξεις μία πιο αργή αναθεώρηση παρά να προσθέτεις δικαιώματα σταδιακά. Αν δεν είσαι σίγουρη ακόμα, κάνε launch αυτό που έχεις — ένας στενά καθορισμένος watcher περνά γρήγορα, σου φέρνει πραγματική χρήση, και η πραγματική χρήση αξίζει περισσότερο αυτή τη στιγμή από μια μεγαλύτερη λίστα λειτουργιών που κάθεται στην ουρά του Chrome. Μπορείς πάντα να ζητήσεις περισσότερα αργότερα· δεν μπορείς να πάρεις πίσω αυτό το launch μόλις κολλήσει σε χειροκίνητη αναθεώρηση για κάτι που δεν χρειαζόσουν ακόμα.



