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

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

[JavaScript] require() δήλωση προδιαγραφή AMD

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 13/2/2019 2:01:09 μ.μ. | | |
Αυτό το άρθρο τροποποιήθηκε τελευταία φορά από το χρήστη Summer στις 2019-2-13 14:04

Το 2009, ο Αμερικανός προγραμματιστής Ryan Dahl δημιούργησε node.js έργο για τη χρήση της γλώσσας JavaScript για προγραμματισμό από την πλευρά του διακομιστή.

Αυτό σηματοδοτεί τη γέννηση του "αρθρωτού προγραμματισμού Javascript". Η πολυπλοκότητα του front-end είναι περιορισμένη και είναι εντάξει να μην υπάρχουν μονάδες, αλλά από την πλευρά του διακομιστή, πρέπει να υπάρχουν μονάδες για αλληλεπίδραση με το λειτουργικό σύστημα και άλλες εφαρμογές, διαφορετικά δεν μπορεί να προγραμματιστεί καθόλου.

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

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

Στο CommonJS, υπάρχει μια καθολική μέθοδος require() που χρησιμοποιείται για τη φόρτωση μονάδων. Υποθέτοντας ότι υπάρχει μια ενότητα μαθηματικών math.js, μπορεί να φορτωθεί ως εξής.



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

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

Προδιαγραφές AMD

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

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



Η δεύτερη γραμμή math.add(2, 3) εκτελείται μετά την πρώτη γραμμή require('math'), οπότε πρέπει να περιμένει να τελειώσει math.js φορτίο. Δηλαδή, εάν ο χρόνος φόρτωσης είναι μεγάλος, ολόκληρη η εφαρμογή θα σταματήσει εκεί και θα περιμένει.

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


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

Το AMD είναι μια συντομογραφία του "Asynchronous Module Definition", που σημαίνει "Asynchronous Module Definition". Φορτώνει τη μονάδα ασύγχρονα και η φόρτωση της μονάδας δεν επηρεάζει τη λειτουργία των επόμενων δηλώσεών της. Όλες οι δηλώσεις που εξαρτώνται από αυτήν την ενότητα ορίζονται σε μια συνάρτηση επανάκλησης που δεν θα εκτελεστεί μέχρι να ολοκληρωθεί η φόρτωση.

Οι ενότητες πρέπει να ορίζονται με μια συγκεκριμένη συνάρτηση define().


•ID: συμβολοσειρά, όνομα ΤΕΜΑΧΙΟΥ (προαιρετικό)
•Εξαρτήσεις: είναι το εξαρτώμενο ΤΕΜΑΧΙΟ που θέλουμε να φορτώσουμε (προαιρετικό), χρησιμοποιώντας τη σχετική διαδρομή. , σημειώστε ότι πρόκειται για μορφή πίνακα
•Εργοστάσιο: Εργοστασιακή μέθοδος, επιστρέφει μία λειτουργία ΤΕΜΑΧΙΟΥ
Εάν μια ενότητα δεν εξαρτάται από άλλες ενότητες, μπορεί να οριστεί απευθείας στη συνάρτηση define().


Εάν η ενότητα εξαρτάται επίσης από άλλες ενότητες, τότε το πρώτο όρισμα της συνάρτησης define() πρέπει να είναι ένας πίνακας που υποδεικνύει τις εξαρτήσεις της μονάδας.



Όταν η συνάρτηση require() φορτώσει την παραπάνω μονάδα, θα φορτώσει πρώτα Lib.js αρχείο.

Η AMD χρησιμοποιεί επίσης τη δήλωση require() για τη φόρτωση της μονάδας, αλλά σε αντίθεση με το CommonJS, απαιτεί δύο παραμέτρους:

Η πρώτη παράμετρος [module] είναι ένας πίνακας και τα μέλη σε αυτόν είναι οι μονάδες που πρόκειται να φορτωθούν. Η δεύτερη παράμετρος επανάκλησης είναι η συνάρτηση επανάκλησης μετά την επιτυχή φόρτωση. Εάν ξαναγράψετε τον προηγούμενο κώδικα σε μορφή AMD, μοιάζει με αυτό:


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

Επί του παρόντος, υπάρχουν δύο κύριες βιβλιοθήκες Javascript που υλοποιούν τις προδιαγραφές AMD :require.js και curl.js.







Προηγούμενος:init: function (){}方法的写法原因
Επόμενος:【Πρακτική μάχη】Kibana 6.5.2 Εκμάθηση κινεζικών
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com