Προγραμματισμός

Συμβουλή Java 28: Βελτιώστε την απόδοση λήψης της εφαρμογής σας χρησιμοποιώντας την κονσόλα Java του Navigator

Πιθανότατα έχετε διαβάσει ήδη για τη συσκευασία της μικροεφαρμογής σας χρησιμοποιώντας αρχεία zip για να βελτιώσετε την απόδοση λήψης στο Netscape Navigator (δείτε Java Tip 21: Χρησιμοποιήστε αρχεία αρχειοθέτησης για να επιταχύνετε τη φόρτωση της μικροεφαρμογής) Ωστόσο, σε ορισμένες περιπτώσεις, η χρήση αρχείων zip για μικροεφαρμογές μπορεί να οδηγήσει σε προβλήματα απόδοσης.

Για παράδειγμα, ας υποθέσουμε ότι ένας προμηθευτής εργαλείων δημιούργησε ένα γενικό πακέτο που περιλαμβάνει πολλές δυνατότητες - πολλές από τις οποίες πιθανότατα δεν θα χρησιμοποιήσετε. Η συμπερίληψη όλων αυτών των τάξεων στο αρχείο zip θα προκαλέσει γρήγορη ανάπτυξη από λίγα kilobyte σε εκατοντάδες kilobytes ή περισσότερα, εξαλείφοντας έτσι τον λόγο για πρώτη φορά να χρησιμοποιήσετε ένα αρχείο zip.

Υπάρχει μια λύση σε αυτό το πρόβλημα. Αν και χωρίς έγγραφα, το πρόγραμμα περιήγησης Netscape Navigator περιέχει μια κονσόλα Java (στο μενού Επιλογές). Όταν αυτή η κονσόλα είναι ανοιχτή, εμφανίζονται μηνύματα στα οποία γράφονται System.out.println από οτιδήποτε συμβαίνει να εκτελούνται εφαρμογές Java στο πρόγραμμα περιήγησης.

Αυτό που δεν σας είπε η μητέρα σας για την κονσόλα Java

Αυτό που δεν είναι προφανές στους χρήστες είναι ότι η κονσόλα Java δέχεται εντολές πληκτρολογίου. Υπάρχουν 10 επίπεδα εντοπισμού σφαλμάτων (καθώς το μήνυμα που εμφανίζεται από το πρόγραμμα περιήγησης τους επισημαίνει) και 3 άλλες εντολές πληκτρολογίου στο Navigator 3.0. Πατώντας τα πλήκτρα 0, 1, 2, ..., 9 ορίζονται οι πληροφορίες επιπέδου εντοπισμού σφαλμάτων που θα εμφανίσει η εικονική μηχανή. Το πάτημα των πλήκτρων D, F και G θα προκαλέσει άλλες ενέργειες, όπως περιγράφεται παρακάτω. Στο Netscape Communicator 4.0, έχουν προστεθεί αρκετές ακόμη εντολές, συμπεριλαμβανομένης μιας εντολής βοήθειας που περιγράφει τα κλειδιά που είναι έγκυρα ως εντολές. Εάν πατήσετε το πλήκτρο "h" θα λάβετε τεκμηρίωση για τις νέες εντολές.

Αυτή η συμβουλή παρουσιάζει όλα όσα γνωρίζω σχετικά με τη χρήση εντολών πληκτρολογίου στην κονσόλα Java: Δεν κατάφερα να βρω καμία τεκμηρίωση σχετικά με αυτό. Ίσως τα ευρήματά μου θα ενθαρρύνουν κάποιον στο Netscape να τεκμηριώσει τα επίπεδα εντοπισμού σφαλμάτων και τις τρεις άλλες εντολές πληκτρολογίου.

Μάθετε πώς ακολουθείτε τις εντολές πληκτρολογίου

Ακολουθεί μια περιγραφή των ενεργειών πληκτρολόγησης D, F και G:

  • Η πληκτρολόγηση "D" αναγκάζει την κονσόλα Java να εμφανίζει πληροφορίες σχετικά με όλες τις μικροεφαρμογές που φορτώθηκαν από την εικονική μηχανή στην τρέχουσα περίοδο λειτουργίας Netscape. Πολλά αντίγραφα του προγράμματος περιήγησης Netscape που είναι ανοιχτά ταυτόχρονα μοιράζονται την ίδια κονσόλα Java.

  • Το πλήκτρο "F" προκαλεί το Οριστικοποιώ ρήτρες απορριπτόμενης, αλλά όχι συλλογής απορριμμάτων, μνήμης προς εκτέλεση - τουλάχιστον νομίζω ότι αυτό συμβαίνει, καθώς υπάρχει ξεχωριστό κλειδί για τη συλλογή απορριμμάτων.

  • Το πλήκτρο "G" προκαλεί το Runtime.gc () συλλέκτης απορριμμάτων για να τρέξει. Έχω παίξει λίγο με τον συλλέκτη σκουπιδιών και πιστεύω ότι πρέπει να γίνουν πολλές κλήσεις για να καθαριστεί η μνήμη. Η ελαχιστοποίηση του χρόνου που απαιτείται για την κλήση του συλλέκτη απορριμμάτων έχει νόημα επειδή τα αντικείμενα συνδέονται με άλλα αντικείμενα. Εάν ο συλλέκτης απορριμμάτων αποσυνδέει μόνο αντικείμενα στα άκρα ενός άλλου αντικειμένου κάθε φορά, μπορεί να περάσει σταδιακά μέσω του σωρού. Αυτό σημαίνει ότι ο συλλέκτης απορριμμάτων δεν ξοδεύει πολύτιμο χρόνο σε κάθε στάδιο, αλλά χρησιμοποιεί πολλά μικρά κομμάτια χρόνου όταν διαφορετικά η CPU δεν θα χρησιμοποιηθεί.

Εδώ είναι η έξοδος που εμφανίζεται στο παράθυρο της κονσόλας Java όταν πατάτε κάθε ένα από τα πλήκτρα που περιγράφονται παραπάνω. Ένα μήνυμα πνευματικών δικαιωμάτων από το πρόγραμμα περιήγησης προηγείται της εξόδου εντολής πληκτρολογίου: "AppAccelerator (tm) 1.0.2a για Java, έκδοση x86. Πνευματικά δικαιώματα (γ) 1996 Borland International. Με επιφύλαξη παντός δικαιώματος."

# Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 0 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 1 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 2 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 3 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 4 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 5 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 6 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 7 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 8 # Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 9 # Εκτέλεση οριστικοποίησης ... # Εκτέλεση συλλογής απορριμμάτων ... 

Παρακάτω ακολουθεί μια λίστα ελέγχου των ενεργειών που μπορείτε να κάνετε για να δείτε τι περιγράφεται σε αυτήν την συμβουλή.

  1. Εκκινήστε το Netscape Navigator με δυνατότητα Java.

  2. Ανοίξτε την κονσόλα Java από το μενού Option.

  3. Κάντε κλικ στο ποντίκι στην κονσόλα Java.

  4. Πιέστε το πλήκτρο "9" (όχι το κλειδί PF9)

  5. Εμφανίζεται το μήνυμα "# Applet debug level set to 9".

  6. Επιστρέψτε στο παράθυρο του προγράμματος περιήγησης.

  7. Φορτώστε ένα URL που περιέχει μια μικροεφαρμογή Java.

  8. Παρακολουθήστε την κονσόλα Java να εμφανίζει τις λεπτομέρειες της μικροεφαρμογής από τον φορτωτή κλάσης καθώς βρίσκονται τα αρχεία .class, .gif, .jpg και .zip.

Το ακόλουθο παράδειγμα είναι ένα δείγμα εξόδου που εμφανίστηκε από την κονσόλα Java όταν φόρτωσα μια μικροεφαρμογή. Πάτησα το πλήκτρο 9 και το μήνυμα "# Applet debug level set to 9" εμφανίστηκε στην κονσόλα Java.

# Το επίπεδο εντοπισμού σφαλμάτων Applet ορίστηκε σε 9 # initApplet: contextID = 8 appletID = 17930380 parentContext = 11134828 frameContext = 11134828 # initApplet: appletID = 17930380 # total applets = 1 # Νέα applet: 17930380 στο αρχείο: / E | / Debugger 10-06- 96 / Debugger / width = 300 height = 45 hspace = 0 archive = file: /// E | / Debugger 10-06-96 / Debugger / vspace = 0 align = basebase codebase = αρχείο: /// E | / Debugger 10 -06-96 / Debugger / code = DebuggerMain.class # startApplet: contextID = 8 appletID = 17930380 newFrameMWContext = 11134828 # startApplet: appletID = 17930380 # Εύρεση κλάσης DebuggerMain # Λήψη αρχείου: / E | / Debugger 10-06-96 / Debugger /DebuggerMain.class # Find class FocComm # Fetching file: / E | / Debugger 10-06-96 / Debugger / FocComm.class # Find class OpenFileThread # Fetching file: / E | / Debugger 10-06-96 / Debugger / OpenFileThread .class # Applet εξαίρεση: εξαίρεση: java.lang.ClassCastException: DebuggerMain java.lang.ClassCastException: DebuggerMain

στο netscape.applet.EmbeddedAppletFrame.run (μεταγλωττισμένος κώδικας)

στο java.lang.Thread.run (Compiled Code) # Find class ConnectDialog # Fetching file: / E | / Debugger 10-06-96 / Debugger / ConnectDialog.class # Find class StreamListener # Fetching file: / E | / Debugger 10 -06-96 / Debugger / StreamListener.class # Find class InputLinkedList # Fetching file: / E | / Debugger 10-06-96 / Debugger / InputLinkedList.class # Find class CommunicationError # Ανάκτηση αρχείου: / E | / Debugger 10-06 -96 / Debugger / CommunicationError.class Σφάλμα κατά τη σύνδεση του FocusConnectjava.net.SocketException: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος # Εξαίρεση ασφαλείας: έξοδος: 0

Δημιουργήστε το αρχείο zip σας

Παρατηρήστε ότι εμφανίζονται όλες οι τάξεις που παρουσίασε η μικροεφαρμογή μου. Για να συσκευάσετε το αρχείο zip με την καλύτερη απόδοση, εκτελέστε τη μικροεφαρμογή σας και επιλέξτε όλες τις πιθανές διαδρομές κώδικα. Πάρτε την έξοδο που εμφανίζεται από την κονσόλα Java για αυτήν την εκτέλεση της μικροεφαρμογής και δημιουργήστε το αρχείο zip που περιέχει μόνο αυτές τις κλάσεις. Αυτή η λίστα μπορεί να επεξεργαστεί εύκολα - απλώς κόψτε το από το παράθυρο της κονσόλας Java για να δημιουργήσετε μια λίστα με τις χρησιμοποιημένες τάξεις.

Εμφάνιση λεπτομερειών φορτωμένων μικροεφαρμογών με "D"

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

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

MozillaAppletContext # frames = 1 # images = 0 # audioClips = 0 url = file: / E | / Debugger 10-06-96 / Debugger / DebuggerMain.html EmbeddedAppletFrame id = 17930380 documentURL = αρχείο: / E | / Debugger 10-06- 96 / Debugger / DebuggerMain.html

codebaseURL = αρχείο: / E | / Debugger 10-06-96 / Debugger / status = διάθεση

handler = Νήμα [Thread-1,5, applet-DebuggerMain.class]

πλάτος = 300

ύψος = 45

hspace = 0

αρχείο = αρχείο: /// E | / Debugger 10-06-96 / Debugger /

vspace = 0

align = βασική γραμμή

codebase = αρχείο: /// E | / Debugger 10-06-96 / Debugger /

code = DebuggerMain.class

συμπέρασμα

Το πρόγραμμα περιήγησης Netscape Navigator μπορεί να βοηθήσει στην ανάπτυξη της μικροεφαρμογής σας με τρόπο που κανένα άλλο εργαλείο δεν μπορεί. Καμία άλλη μέθοδος δεν συλλέγει τα διαγνωστικά των πραγματικών πληροφοριών χρόνου εκτέλεσης. Ελπίζω αυτή η τεχνική να βοηθήσει την κοινότητα Java στην παραγωγή μικρότερων πακέτων zip για μικροεφαρμογές. Για να επιτύχει το μοντέλο τεχνολογίας Java χρειαζόμαστε την ταχύτητα και τη γραφική λειτουργικότητα του υπολογιστή, με την πλήρη πρόσβαση δεδομένων στο Διαδίκτυο και την ασφάλεια του mainframe. Ελπίζω ότι άλλοι θα βρουν παρόμοιες τεχνικές για να βοηθήσουν αυτό το νέο μοντέλο υπολογιστή να πετύχει.

Σημείωση: Πρέπει να δοθεί πίστωση στον Teodor Todorov, έναν φοιτητή στο Πανεπιστήμιο Cornell και έναν εξαιρετικό προγραμματιστή Java. Ανακάλυψε ότι η κονσόλα Java δέχεται εντολές πληκτρολογίου. Για τις εντολές στην κονσόλα Java στο Netscape Communicator 4.0, θα ήθελα να ευχαριστήσω τον Ales Omahen στο "[email protected]" για την πρώτη εύρεση τους και τον Kevin Lowe στο "[email protected]" επίσης για την εύρεση τους.

Ο Peter Lenahan είναι τεχνικός διευθυντής στο Information Builders. Αυτή τη στιγμή συνεργάζεται με πολλούς άλλους μηχανικούς σε ένα εταιρικό πακέτο πληροφοριών Java.

Αυτή η ιστορία, "Συμβουλή Java 28: Βελτιώστε την απόδοση λήψης του applet σας χρησιμοποιώντας την κονσόλα Java του Navigator" δημοσιεύτηκε αρχικά από το JavaWorld