Yui και Loader αλλαγές για 3.4.0

Πρώτης Ιουλίου, 2011 στις 06:34 π.μ. από Dav Glass | Σε Ανάπτυξης , Performance | 2 Σχόλια

Σε 3.4.0 ξεκινήσαμε τη διαδικασία της μεταβίβασης ορισμένων λογική Loader γύρω, να μην κάνει μόνο πιο αποδοτικοί, αλλά για να γίνει πιο ισχυρή και πιο εύκολο στην χρήση σε άλλους χώρους (όπως στο διακομιστή). Θα τροχαίο έξω περισσότερες αλλαγές σε μελλοντικές αναθεωρήσεις, αλλά ήθελα να πάρει κάποιο χρόνο και να εξηγήσει τι άλλαξε, γιατί άλλαξε και πώς μπορεί να επηρεάσει την ανάπτυξη. Για την πλειονότητα των περιπτώσεων-χρήσης, οι προγραμματιστές θα παρατηρήσουν τίποτα διαφορετικό, εκτός από το ότι τα πράγματα είναι λίγο πιο γρήγορα και λήψεις απαίτηση τους είναι λίγο μικρότερη.

Αρχείο Seed

Το πρώτο πράγμα που θέλω να θίξω είναι το αρχείο σπόρος Yui. Σε προηγούμενες εκδόσεις του Yui, αρχείο σπόρος μας ήταν πολύ μικρό και δεν περιείχε φορτωτή ή οποιοδήποτε από μετα-δεδομένα του. Έχουμε διαπιστώσει ότι το 90% χρησιμοποιεί-περίπτωση που αυτό δεν ήταν τόσο αποδοτικοί όσο ελπίζαμε. Ο απλός χρήστης περιλαμβάνει το αρχείο σπόρο αιτήματα τότε τα στοιχεία τους, η οποία με τη σειρά του σημαίνει ότι ο σπόρος πρέπει να φέρω πρώτο Loader, υπολογίζει στη συνέχεια όλες τις εξαρτήσεις του, τότε να τους φέρω όλους. Τώρα αισθάνομαι ότι αυτό το επιπλέον αίτημα http είναι το λάθος πράγμα που κάνει, έτσι ώστε το νέο πρότυπο αρχείο σπόρος περιέχει Loader και της μετα-δεδομένα. Ναι, αυτό θα κάνει την αρχική αίτηση λίγο μεγαλύτερο, αλλά θα κάνει τη φόρτωση των modules ότι πολύ πιο γρήγορα από το σύνολο των μετα-δεδομένων απαιτήσεις του είναι τώρα ήδη στη σελίδα.

Εάν επιθυμείτε να χρησιμοποιήσετε τον παλιό τρόπο, μπορείτε να συμπεριλάβετε μόνο τα Yui βάσης αρχείο σπόρους αντ 'αυτού. Περιέχει όλα όσα χρειάζεται για να κάνει Yui τρέξει σε αυτόνομη λειτουργία καθώς περιέχει τη δυνατότητα να φέρω Loader σε πρώτη ζήτηση. Αν επιθυμείτε πιο κομψός κόκκους εξαρτήσεις, έχουμε δημιουργήσει ένα Yui-core αρχείο σπόρο που είναι ακριβώς αυτό το παλιό Yui βάσης σπόρος αυτός.

     / Κατασκευή / Yui / Yui-min.js / / Seed Yui + Loader
     / Κατασκευή / Yui βάσης / Yui-base-min.js / / Παλαιά Seed Yui με Loader φέρω υποστήριξη
     / Κατασκευή / Yui-core / Yui-core-min.js / / Παλαιά Yui βάσης χωρίς Loader φέρω υποστήριξη

Θα πρέπει να σημειωθεί ότι αυτές οι διευθύνσεις URL είναι διαφορετική από τις προηγούμενες διευθύνσεις URL. Καθένας που χρησιμοποιεί το yui/yui-base.js αρχεία πρέπει να τα repoint να yui-core/yui-core.js . Αν θέλετε την παλαιότερη τρόπος φόρτωση του σπόρου και γοητευτικός Loader, μπορείτε να χρησιμοποιήσετε το yui-base/yui-base.js αρχείο σπόρο.

Η άλλη αιτιολογία για αυτή την αλλαγή είναι η πυξίδα μας για την κατασκευή Yui τρέχουν σε όσο το δυνατόν περισσότερα σημεία. Το παλιό αρχείο σπόρος συν Loader σε ένα και μόνο αίτημα διακομιστή combo είναι όλα ωραία και καλά, αν έχετε ένα διακομιστή combo διαθέσιμα στην εφαρμογή σας. Αλλά τι γίνεται στο διακομιστή; Ή σε μια offline εφαρμογή σε μια φορητή συσκευή; Αυτές οι θέσεις πρέπει να ελαχιστοποιηθεί η πρόσβαση στο αρχείο, ενώ αξιοποιώντας περαιτέρω τις πληροφορίες που χρειάζονται.

Συνάθροιση

Το επόμενο πράγμα που άλλαξε ήταν αφαίρεση συλλογές από το σύστημα και ασυνεπή allowRollup σε ψευδείς στο config Loader. Τι σημαίνει αυτό για σένα; Λοιπόν, ελπίζω τίποτα. Πριν εξηγήσουμε τις επιπτώσεις της αλλαγής, επιτρέψτε μου να εξηγήσω το σκεπτικό πίσω από αυτό. Ο κύριος λόγος είναι, πάλι, την απόδοση, μαζί με ωφέλιμο φορτίο παράδοσης. Πάρτε αυτό το παράδειγμα:

      Ενότητα Α: απαιτεί την εκδήλωση-α, περίπτωση β-
      Ενότητα Β: απαιτεί την εκδήλωση-c, εκδήλωση-d

Όταν ζητάτε και τα δύο, η λογική συλλογή πριν από την 3.4.0 χρησιμοποιείται για τον προσδιορισμό ότι πρέπει να πάρετε τη συλλογή εκδήλωση. Το οποίο στην πραγματικότητα σήμαινε ότι ήσουν πάρει:

      event.a, event.b, event.c, event.d, event.e, event.f, event.g, event.h

Μπορείτε κατέληξε με περισσότερα στη σελίδα σας από ό, τι πραγματικά χρειάζεται. Με την απενεργοποίηση της υποστήριξης συλλογή, Yui τώρα θα ζητήσει μόνο ό, τι στην πραγματικότητα ζητείται και τίποτα περισσότερο. Στις περισσότερες περιπτώσεις, δεν θα παρατηρήσετε αυτό. Προγραμματιστές Ενότητα, μπορεί να τρέξει σε μια κατάσταση όπου τα πράγματα που εργάστηκαν κατά το παρελθόν δεν μπορεί να λειτουργήσει τώρα. Ο λόγος για αυτό είναι ότι πραγματικά από ατύχημα πριν. Επιτρέψτε μου να χρησιμοποιήσω ένα πραγματικό παράδειγμα κόσμο: Dial.

Σε 3.3.0, Dial απαιτείται αυτό:

     απαιτεί: [
         «Widget»,
         «Dd-μεταφορά»,
         «Υποκατάστατο»,
         «Εκδήλωση-mouseEnter», 
         «Μετάβαση»,
         "Intl"
     ]

Για το μεγαλύτερο μέρος, Dial εργαστεί σε 3.4.0, ωστόσο υποστήριξη πληκτρολογίου δεν λειτούργησε. Μετά από να κάνει κάποια απλή έρευνα, αποδείχθηκε ότι η υποστήριξη συλλογή ζητούσε στην πραγματικότητα το σύνολο της συλλογής Event (η οποία περιλαμβάνει την περίπτωση-κίνηση και εκδήλωση-κλειδί). Χωρίς τη λογική συλλογή τράβηγμα σε όλες τις περιπτώσεις, 3.4.0 Κλήση δεν είχε πλέον όλες τις προδιαγραφές του. Κάνοντας τις απαιτήσεις Dial πιο συγκεκριμένες και που καθορίζουν όλες τις εξαρτήσεις της πραγματικής τους σωστά καθιστά λειτουργούν όπως αναμένεται.

     απαιτεί: [
         «Widget»,
         «Dd-μεταφορά»,
         «Υποκατάστατο»,
         «Εκδήλωση-mouseEnter»,
         «Εκδήλωση-κίνηση»,
         «Γεγονός-κλειδί»,
         «Μετάβαση»,
         "Intl"
     ]

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

Αυτό σημαίνει επίσης ότι οι απαιτήσεις της ενότητας πιο καλά καθορισμένο. Για παράδειγμα, datatype-date έχει Intl υποστήριξη χτισμένο in Στις προηγούμενες εκδόσεις θα έχουν πρόσβαση στο Διεθνές όπως αυτό:

     Y.Intl.getAvailableLangs («datatype-date ')?

Αλλά δεδομένου ότι αυτή η ενότητα δεν έχει στην πραγματικότητα μια γλώσσα (το datatype-date-format μονάδα κάνει), αυτό θα αποτύχει. Πρέπει να είναι πιο συγκεκριμένη και πραγματικά ζητούν γλώσσες για τη σωστή μονάδα:

     Y.Intl.getAvailableLangs («datatype-ημερομηνία-format")?

Κατασκευάστηκε Έκρηξη αρχείων και Απομάκρυνση Submodule

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

Υποενότητες στο κεντρικό σύστημα που προκαλείται από δύο θέματα που έπρεπε να επιλυθούν. Ο πρώτος λόγος ήταν απόδοση. Κάθε Loader χρόνο που απαιτείται για τον υπολογισμό των εξαρτήσεων, που χρειαζόταν για να περπατήσει το submodule / plugin δομή της κάθε ενότητας. Να κάνει αυτό χιλιάδες φορές ήταν πληγώνει την απόδοσή μας κατά τη διάρκεια της φόρτωσης υπολογίσει ρουτίνα. Με την κατάργηση υποστήριξης για υποενότητες στο κεντρικό σύστημα θα αποθηκεύσει δεκάδες χιλιάδες κλήσεις λειτουργία και επαναλήψεις.

Loader είχε αλλάξει έτσι ώστε αν μια use ακινήτων στη μετα-δεδομένων μια ενότητα που ορίζεται περισσότερες μονάδες, θα χρησιμοποιήσει τα modules αντί να προσπαθεί να φορτώσει την αρχική μονάδα. Έτσι, εάν ζητηθεί " dd "Loader θα επιθεωρήσει" dd "'s μετα-δεδομένα και να δούμε ένα ακίνητο χρήση που μοιάζει κάπως έτσι:

     "DD-DDM-base, dd-DDM, dd-DDM-drop, dd-σύρετε, dd-proxy, dd-περιορίζουν, dd-drop, dd-scroll, dd-drop-plugin"

Στο αρχείο πυρήνα Yui σπόρων, είμαστε επίσης συμπεριλαμβανομένης τι ζητάμε εικονικές συλλογές ή ψευδώνυμα. Οι ορισμοί των μονάδων είναι ακριβώς το ίδιο με το μετα-δεδομένα σε Loader. Με αυτό τον τρόπο μπορείτε να συμπεριλάβετε όλα τα αρχεία που έχουν εξαχθεί από την εξάρτησή μας Configurator και εξακολουθούν να χρησιμοποιούν αυτές τις συλλογές χωρίς να παρουσιάσει Loader στη σελίδα. Σε μελλοντικές εκδόσεις, θα είμαστε διύλισης αυτή την προσέγγιση ακόμη περισσότερο.

Μετά την πραγματοποίηση αυτής της αλλαγής, τότε προηγήθηκε να εκραγεί χτίσει τα αρχεία μας. Σε προηγούμενες εκδόσεις, το υποενότητες καθορίζεται η διαδρομή του αρχείου ενοτήτων. Για παράδειγμα:

     "Dd": {
         "Υποενότητες": {
             "DD-μεταφορά": 
             / / Ενότητα δεδομένα
         }
     }

Σε 3.3.0, όταν χτίστηκε "dd", η δομή του αρχείου κοίταξε κάπως έτσι:

     / Κατασκευή / μμ / ηη-drag.js
     / Κατασκευή / μμ / ηη-ddm.js
     / Κατασκευή / μμ / ηη-drop.js

Με το σύστημα κατασκευής εξερράγη στην 3.4.0, "dd" 's χτίσει αρχεία τώρα μοιάζει με αυτό:

     / Κατασκευή / μμ-μεταφορά / μμ-drag.js
     / Κατασκευή / μμ-DDM / μμ-ddm.js
     / Κατασκευή / μμ-drop / μμ-drop.js

Αυτό μας επέτρεψε να αφαιρέσει το «μονοπάτι» της ιδιοκτησίας από όλους ενότητα μετα-δεδομένα μας, καθώς, εξοικονομώντας το μέγεθος του αρχείου και τη μείωση της λογικής που απαιτείται για να συγκεντρώσει τα μονοπάτια url ενότητες.

Αν είστε συμπεριλαμβανομένου ενός προ-ρυθμισμένες URL σύνθετο, θα πρέπει να υπολογίσει εκ νέου τη διεύθυνση URL σας κατά την αναβάθμιση.

Το μειονέκτημα σε αυτή την αλλαγή είναι ότι εάν είστε όπως ένα URL combo των ενοτήτων για την "προετοιμασία" της σελίδας σας, δεν μπορείτε να αλλάξετε μόνο τον αριθμό έκδοσης και την αναβάθμιση. Θα χρειαστεί να επανεξετάσουν την εξάρτηση Configurator και να δημιουργήσετε μια νέα διεύθυνση URL με νέα δομή μονάδα.

Το Μέλλον

Θα συνεχίσει να βελτιώσετε, Refactor και να μεγιστοποιήσουν κάθε πτυχή της Loader μας και τη στρατηγική σπόρων. Αυτά τα πρώτα βήματα που απαιτούνται για την ενίσχυση στο μέλλον, οι αλλαγές που πρέπει να γίνουν όχι μόνο για τη στρατηγική μας στην πλευρά του πελάτη αλλά και τον server μας, τη διοίκηση και κινητής στρατηγικές συσκευή.

Μοιραστείτε και να επεκτείνει: Σελιδοδείκτης με Del.icio.us | Digg it! | reddit!

Hosted by Yahoo!

Copyright © 2006-2011 Yahoo! επιφύλαξη παντός δικαιώματος. Πολιτική Προστασίας Προσωπικών Δεδομένων - Όροι Υπηρεσίας

Powered by WordPress σε Yahoo! Web Hosting .