Astuce Java 28: Améliorez les performances de téléchargement de votre applet à l'aide de la console Java de Navigator

Vous avez probablement déjà lu sur l'empaquetage de votre applet à l'aide de fichiers zip pour améliorer les performances de téléchargement dans Netscape Navigator (voir Astuce Java 21: Utilisez des fichiers d'archive pour accélérer le chargement de l'applet). Mais dans certaines situations, l'utilisation de fichiers zip pour les applets peut entraîner des problèmes de performances.

Par exemple, disons qu'un fournisseur d'outils a créé un package général qui comprend un certain nombre de fonctionnalités - dont beaucoup vous n'utiliserez probablement pas. L'inclusion de toutes ces classes dans votre fichier zip le fera passer rapidement de quelques kilo-octets à des centaines de kilo-octets ou plus, annulant ainsi la raison d'utiliser un fichier zip en premier lieu.

Il y a une solution à ce problème. Bien que non documenté, le navigateur Netscape Navigator contient une console Java (sous le menu Options). Lorsque cette console est ouverte, des messages qui sont écrits à System.out.printlnpartir des applets Java exécutées dans votre navigateur apparaissent .

Ce que ta mère ne t'a pas dit sur la console Java

Ce qui n'est pas évident pour les utilisateurs, c'est que la console Java accepte les commandes clavier. Il existe 10 "niveaux" de débogage (comme le message affiché par le navigateur les étiquette) et 3 autres commandes clavier dans Navigator 3.0. Appuyez sur les touches 0, 1, 2, ..., 9 pour définir les informations de niveau de débogage que la machine virtuelle affichera. Appuyer sur les touches D, F et G entraînera d'autres actions, comme décrit ci-dessous. Dans Netscape Communicator 4.0, plusieurs autres commandes ont été ajoutées, y compris une commande d'aide décrivant les touches valides comme commandes. Si vous appuyez sur la touche "h", vous obtiendrez la documentation des nouvelles commandes.

Cette astuce présente tout ce que je sais sur l'utilisation des commandes clavier dans la console Java: je n'ai trouvé aucune documentation à ce sujet. Peut-être que mes conclusions encourageront quelqu'un de Netscape à documenter les niveaux de débogage et les trois autres commandes clavier.

Familiarisez-vous avec les commandes du clavier

Voici une description des actions de frappe D, F et G:

  • La touche «D» amène la console Java à afficher des informations sur toutes les applets chargées par la machine virtuelle dans la session Netscape en cours. Plusieurs copies du navigateur Netscape ouvertes en même temps partagent la même console Java.

  • La touche "F" provoque l' Finalizeexécution des clauses de mémoire abandonnée, mais non récupérée - du moins je pense que c'est ce qui se passe, car une clé distincte existe pour le ramasse-miettes.

  • La touche "G" entraîne l' Runtime.gc()exécution du ramasse - miettes. J'ai un peu joué avec le ramasse-miettes, et je crois que de nombreux appels doivent y être effectués pour nettoyer la mémoire. Réduire le temps nécessaire pour appeler le garbage collector est logique car les objets sont liés à d'autres objets. Si le garbage collector dissocie uniquement les objets aux extrémités d'un autre objet à chaque fois, il peut parcourir le tas par étapes. Cela signifie que le garbage collector ne passe pas beaucoup de temps précieux à chaque étape, mais utilise de nombreux petits morceaux de temps lorsque le processeur serait autrement inutilisé.

Voici la sortie qui s'affiche dans la fenêtre de la console Java lorsque vous appuyez sur chacune des touches décrites ci-dessus. Un message de copyright du navigateur précède la sortie de la commande clavier: "AppAccelerator (tm) 1.0.2a pour Java, version x86. Copyright (c) 1996 Borland International. Tous droits réservés."

# Niveau de débogage de l'applet défini sur 0 # Niveau de débogage de l'applet défini sur 1 # Niveau de débogage de l'applet défini sur 2 # Niveau de débogage de l'applet défini sur 3 # Niveau de débogage de l'applet défini sur 4 # Niveau de débogage de l'applet défini sur 5 # Niveau de débogage de l'applet défini sur 6 # Niveau de débogage de l'applet défini sur 7 # Niveau de débogage de l'applet défini sur 8 # Niveau de débogage de l'applet défini sur 9 # Exécution de la finalisation ... # Exécution d'un garbage collection ... 

Une liste de contrôle des actions que vous pouvez entreprendre pour expérimenter ce qui est décrit dans cette astuce est incluse ci-dessous.

  1. Lancez votre navigateur Netscape compatible Java.

  2. Ouvrez la console Java dans le menu Option.

  3. Cliquez avec la souris sur la console Java.

  4. Appuyez sur la touche "9" (pas sur la touche PF9)

  5. Le message «# Niveau de débogage de l'applet défini sur 9» s'affiche.

  6. Revenez à la fenêtre du navigateur.

  7. Chargez une URL contenant une applet Java.

  8. Regardez la console Java afficher les détails de l'applet à partir du chargeur de classe lorsque les fichiers .class, .gif, .jpg et .zip sont localisés et chargés.

L'exemple suivant est un exemple de sortie qui a été affiché par la console Java lorsque j'ai chargé une applet. J'ai appuyé sur la touche 9 et le message "# Niveau de débogage de l'applet réglé sur 9" a été affiché dans la console Java.

# Niveau de débogage de l'applet défini sur 9 # initApplet: contextID = 8 appletID = 17930380 parentContext = 11134828 frameContext = 11134828 # initApplet: appletID = 17930380 # total applets = 1 # Nouvel applet: 17930380 au fichier: / E | / Debugger 10-06- 96 / Debugger / width = 300 height = 45 hspace = 0 archive = file: /// E | / Debugger 10-06-96 / Debugger / vspace = 0 align = baseline codebase = file: /// E | / Debugger 10 -06-96 / Debugger / code = DebuggerMain.class # startApplet: contextID = 8 appletID = 17930380 newFrameMWContext = 11134828 # startApplet: appletID = 17930380 # Find class DebuggerMain # Récupération du fichier: / E | / Debugger 10-06-96 / Debugger /DebuggerMain.class # Trouver la classe FocComm # Récupération du fichier: / E | / Debugger 10-06-96 / Debugger / FocComm.class # Trouver la classe OpenFileThread # Récupération du fichier: / E | / Debugger 10-06-96 / Debugger / OpenFileThread .class # Exception d'applet: exception: java.lang.ClassCastException: DebuggerMain java.lang.ClassCastException: DebuggerMain

à netscape.applet.EmbeddedAppletFrame.run (code compilé)

à java.lang.Thread.run (Code compilé) # Trouver la classe ConnectDialog # Récupération du fichier: / E | / Debugger 10-06-96 / Debugger / ConnectDialog.class # Trouver la classe StreamListener # Récupération du fichier: / E | / Debugger 10 -06-96 / Debugger / StreamListener.class # Rechercher la classe InputLinkedList # Récupération du fichier: / E | / Debugger 10-06-96 / Debugger / InputLinkedList.class # Rechercher la classe CommunicationError # Récupération du fichier: / E | / Debugger 10-06 -96 / Debugger / CommunicationError.class Erreur lors de la connexion de FocusConnectjava.net.SocketException: aucun fichier ou répertoire de ce type # Exception de sécurité: exit: 0

Créez votre fichier zip

Notez que toutes les classes instanciées par mon applet sont affichées. Pour empaqueter le fichier zip le plus performant, exécutez votre applet et sélectionnez tous les chemins de code possibles. Prenez la sortie affichée à partir de la console Java pour cette exécution de l'applet et créez le fichier zip contenant uniquement ces classes. Cette liste peut être modifiée facilement - il suffit de la couper de la fenêtre de la console Java pour créer une liste des classes utilisées.

Afficher les détails des applets chargées avec "D"

La commande du clavier "D" ne fait pas partie du réglage des performances, mais je la couvre ici car elle n'est documentée nulle part.

Ce qui suit est la sortie d'un exemple de session survenant après avoir appuyé sur la touche «D». J'ai appuyé sur cette touche afin d'examiner les paramètres qui se trouvaient sur le fichier HTML. Ces informations peuvent également être obtenues en consultant la source HTML.

MozillaAppletContext # frames = 1 # images = 0 # audioClips = 0 url = fichier: / E | / Debugger 10-06-96 / Debugger / DebuggerMain.html EmbeddedAppletFrame id = 17930380 documentURL = file: / E | / Debugger 10-06- 96 / Debugger / DebuggerMain.html

codebaseURL = fichier: / E | / Debugger 10-06-96 / Debugger / status = disposer

handler = Thread [Thread-1,5, applet-DebuggerMain.class]

largeur = 300

hauteur = 45

hspace = 0

archive = fichier: /// E | / Debugger 10-06-96 / Debugger /

vspace = 0

align = ligne de base

codebase = fichier: /// E | / Debugger 10-06-96 / Debugger /

code = DebuggerMain.class

Conclusion

The Netscape Navigator browser can aid in the development of your applet in a way that no other tool can. No other method collects the diagnostics of actual runtime information. I hope this technique aids the Java community in producing smaller zip packages for applets. For the Java technology model to succeed we need the speed and graphical functionality of the PC, with the full data access of the Internet and the security of the mainframe. I hope others will find similar techniques to help this new computer model to succeed.

Remarque: le crédit doit être accordé à Teodor Todorov, étudiant à l'Université Cornell et excellent programmeur Java. Il a découvert que la console Java accepte les commandes clavier. Pour les commandes de la console Java de Netscape Communicator 4.0, je tiens à remercier Ales Omahen à "[email protected]" pour les avoir trouvées au préalable et Kevin Lowe à "[email protected]" pour les avoir également trouvées.

Peter Lenahan est directeur technique chez Information Builders. Il travaille actuellement avec plusieurs autres ingénieurs sur un package d'informations d'entreprise Java.

Cette histoire, "Astuce Java 28: Améliorez les performances de téléchargement de votre applet à l'aide de la console Java de Navigator" a été publiée à l'origine par JavaWorld.