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

Άποψη: 9589|Απάντηση: 0

[JavaScript] Αποκτήστε μια εις βάθος κατανόηση του Javascrip{filter}t: της μετα-λειτουργίας του μοτίβου σχεδίασης

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 30/7/2018 10:30:45 π.μ. | | |
Εισαγωγή

Η λειτουργία Flyweight υποστηρίζει αποτελεσματικά έναν μεγάλο αριθμό λεπτομερών αντικειμένων εκτελώντας τεχνολογία κοινής χρήσης, αποφεύγοντας την επιβάρυνση μεγάλου αριθμού μικρών κλάσεων με το ίδιο περιεχόμενο (όπως η κατανάλωση μνήμης) και επιτρέποντας σε όλους να μοιράζονται μια κλάση (meta-class).

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

Τι γίνεται λοιπόν αν εφαρμόσετε τη μετα-λειτουργία σε JavaScript; Υπάρχουν δύο τρόποι, ο πρώτος εφαρμόζεται στο επίπεδο δεδομένων, κυρίως σε μεγάλο αριθμό παρόμοιων αντικειμένων στη μνήμη. Το δεύτερο εφαρμόζεται στο επίπεδο DOM, το οποίο μπορεί να χρησιμοποιηθεί στον κεντρικό διαχειριστή συμβάντων για να αποφευχθεί η προσάρτηση δεικτών χειρισμού συμβάντων σε κάθε θυγατρικό στοιχείο του γονικού κοντέινερ.

Απολαύστε το metaverse και τα επίπεδα δεδομένων

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

Για να το θέσω ωμά, είναι πρώτα να τσιμπήσετε ένα πρωτότυπο μοντέλο, και στη συνέχεια με διαφορετικές περιστάσεις και περιβάλλοντα, και στη συνέχεια να παράγετε συγκεκριμένα μοντέλα με τα δικά τους χαρακτηριστικά, προφανώς, πρέπει να δημιουργηθούν διαφορετικά νέα αντικείμενα εδώ, επομένως η εργοστασιακή λειτουργία εμφανίζεται συχνά στη λειτουργία Flyweight, η εσωτερική κατάσταση του Flyweight χρησιμοποιείται για κοινή χρήση και το εργοστάσιο Flyweight είναι υπεύθυνο για τη διατήρηση μιας πισίνας Flyweight (πισίνα μοτίβων) για την αποθήκευση των αντικειμένων της εσωτερικής κατάστασης.

Χρησιμοποιήστε τη λειτουργία Yuanyuan

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

Ταυτότητα
Τίτλος
Συγγραφέας
Είδος
Αριθμός σελίδων
Αναγνωριστικό εκδότη
ISBN

Πρέπει επίσης να ορίσουμε πότε και από ποιον έγινε η δανειοδότηση κάθε βιβλίου, καθώς και την ημερομηνία επιστροφής και τη διαθεσιμότητα:

ολοκλήρωση αγοράςΗμερομηνία
ταμείοΜέλος
dueReturnDate
Διαθεσιμότητα

Επειδή το αντικείμενο βιβλίου έχει οριστεί στον ακόλουθο κώδικα, σημειώστε ότι ο κώδικας δεν έχει βελτιστοποιηθεί ακόμα:


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

Μπορούμε να χωρίσουμε τα δεδομένα σε δύο τύπους δεδομένων: εσωτερικά και εξωτερικά, και τα δεδομένα που σχετίζονται με το αντικείμενο του βιβλίου (τίτλος, συγγραφέας κ.λπ.) μπορούν να αποδοθούν σε εσωτερικά χαρακτηριστικά, ενώ τα (checkoutMember, dueReturnDate κ.λπ.) μπορούν να αποδοθούν σε εξωτερικά χαρακτηριστικά. Με αυτόν τον τρόπο, ο παρακάτω κώδικας μπορεί να μοιράζεται το ίδιο αντικείμενο στο ίδιο βιβλίο, γιατί ανεξάρτητα από το ποιος δανείζεται το βιβλίο, εφόσον το βιβλίο είναι το ίδιο βιβλίο, οι βασικές πληροφορίες είναι οι ίδιες:



Ορισμός του βασικού εργοστασίου

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



Διαχείριση εξωτερικής κατάστασης


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



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

Απολαύστε τη λειτουργία meta και το DOM


Δεν θα πω πολλά για το περιστατικό με τις φυσαλίδες DOM εδώ, πιστεύω ότι όλοι γνωρίζουν ήδη, ας δώσουμε δύο παραδείγματα.

Παράδειγμα 1: Κεντρική διαχείριση συμβάντων
Για παράδειγμα, εάν έχουμε πολλούς παρόμοιους τύπους στοιχείων ή δομών (όπως μενού ή πολλαπλά li in ul) που πρέπει να παρακολουθούν το συμβάν κλικ του, τότε πρέπει να δεσμεύσουμε κάθε ακόμη στοιχείο για δέσμευση συμβάντων, εάν υπάρχουν πολύ, πάρα πολλά στοιχεία, τότε η απόδοση μπορεί να φανταστεί και σε συνδυασμό με τη γνώση των φυσαλίδων, εάν κάποιο θυγατρικό στοιχείο έχει έναυσμα συμβάντος, τότε το συμβάν θα φουσκώσει στο υψηλότερο στοιχείο μετά την ενεργοποίηση, επομένως χρησιμοποιώντας αυτήν τη δυνατότητα, μπορούμε να χρησιμοποιήσουμε τη λειτουργία Xiangyuan. Μπορούμε να παρακολουθούμε τα συμβάντα των γονικών στοιχείων αυτών των παρόμοιων στοιχείων και, στη συνέχεια, να προσδιορίσουμε ποιο θυγατρικό στοιχείο έχει ενεργοποιηθεί ένα συμβάν πριν προχωρήσουμε σε περαιτέρω λειτουργίες.

Εδώ θα συνδυάσουμε τις μεθόδους δέσμευσης/αποδέσμευσης του jQuery ως παράδειγμα.

HTML:



JavaScript:



Παράδειγμα 2: Εφαρμόστε τη λειτουργία Xiangyuan για να βελτιώσετε την απόδοση

Ένα άλλο παράδειγμα, που εξακολουθεί να σχετίζεται με το jQuery, γενικά χρησιμοποιούμε το αντικείμενο στοιχείου στη συνάρτηση επανάκλησης του συμβάντος, χρησιμοποιούμε συχνά τη μορφή $(αυτό), στην πραγματικότητα, δημιουργεί επανειλημμένα ένα νέο αντικείμενο, επειδή αυτό στη συνάρτηση επανάκλησης είναι ήδη το ίδιο το στοιχείο DOM, πρέπει να χρησιμοποιήσουμε τον ακόλουθο κώδικα:



Στην πραγματικότητα, αν πρέπει να χρησιμοποιήσουμε κάτι σαν $(this), μπορούμε επίσης να εφαρμόσουμε τη δική μας έκδοση του μοτίβου μιας παρουσίας, για παράδειγμα, μπορούμε να υλοποιήσουμε μια συνάρτηση όπως jQuery.signle(this) για να επιστρέψουμε το ίδιο το στοιχείο DOM:



Τρόπος χρήσης:



Αυτό επιστρέφει το ίδιο το στοιχείο DOM ως έχει, χωρίς να δημιουργήσει ένα αντικείμενο jQuery.

περίληψη


Η λειτουργία Flyweight είναι μια λειτουργία που βελτιώνει την αποτελεσματικότητα και την απόδοση του προγράμματος, γεγονός που θα επιταχύνει σημαντικά την ταχύτητα εκτέλεσης του προγράμματος. Υπάρχουν πολλές εφαρμογές: για παράδειγμα, αν θέλετε να διαβάσετε μια σειρά συμβολοσειρών από μια βάση δεδομένων, πολλές από τις οποίες είναι διπλότυπες, τότε μπορούμε να αποθηκεύσουμε αυτές τις συμβολοσειρές σε μια πισίνα Flyweight.

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

Διεύθυνση αναφοράς:http://www.addyosmani.com/resour ... ok/#detailflyweight





Προηγούμενος:Προτείνετε 3 ιστότοπους για να βρείτε εικονίδια εικονιδίων
Επόμενος:NumberOfPendingMessages, MessagesEnqueued, Messag...
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com