Suggerimento Java 28: migliora le prestazioni di download dell'applet utilizzando la console Java di Navigator

Probabilmente hai già letto di come creare un pacchetto della tua applet utilizzando file zip per migliorare le prestazioni di download in Netscape Navigator (vedi Java Tip 21: Usa file di archivio per velocizzare il caricamento dell'applet). Ma in determinate situazioni, l'utilizzo di file zip per applet può causare problemi di prestazioni.

Ad esempio, supponiamo che un fornitore di strumenti abbia creato un pacchetto generale che include una serie di funzionalità, molte delle quali probabilmente non verranno utilizzate. Includere tutte queste classi nel file zip ne farà crescere rapidamente da pochi kilobyte a centinaia di kilobyte o più, annullando così il motivo per cui si utilizza un file zip in primo luogo.

C'è una soluzione a questo problema. Sebbene non documentato, il browser Netscape Navigator contiene una console Java (nel menu Opzioni). Quando questa console è aperta, vengono visualizzati messaggi scritti System.out.printlnda qualsiasi applet Java in esecuzione nel browser.

Quello che tua madre non ti ha detto sulla console Java

Ciò che non è ovvio per gli utenti è che la console Java accetta i comandi da tastiera. Ci sono 10 "livelli" di debug (come li etichetta il messaggio visualizzato dal browser) e altri 3 comandi da tastiera in Navigator 3.0. Premendo i tasti 0, 1, 2, ..., 9 si impostano le informazioni a livello di debug che verranno visualizzate dalla macchina virtuale. La pressione dei tasti D, F e G provocherà altre azioni, come descritto di seguito. In Netscape Communicator 4.0, sono stati aggiunti molti altri comandi, incluso un comando di aiuto che descrive i tasti validi come comandi. Se premi il tasto "h" otterrai la documentazione per i nuovi comandi.

Questo suggerimento presenta tutto ciò che so sull'utilizzo dei comandi da tastiera nella console Java: non sono stato in grado di trovare alcuna documentazione a riguardo. Forse le mie scoperte incoraggeranno qualcuno in Netscape a documentare i livelli di debug e gli altri tre comandi da tastiera.

Impara a gestire i comandi della tastiera

Di seguito è riportata una descrizione delle azioni dei tasti D, F e G:

  • La sequenza di tasti "D" fa sì che la console Java visualizzi le informazioni su tutte le applet caricate dalla macchina virtuale nella sessione corrente di Netscape. Più copie del browser Netscape aperte contemporaneamente condividono la stessa console Java.

  • La sequenza di tasti "F" fa sì che le Finalizeclausole della memoria scartata, ma non raccolta, vengano eseguite - almeno penso che questo sia ciò che accade, poiché esiste una chiave separata per la raccolta dei rifiuti.

  • La sequenza di tasti "G" causa l' Runtime.gc()esecuzione del Garbage Collector. Ho giocato un po 'con il garbage collector e credo che debbano essere fatte molte chiamate per ripulire la memoria. Ridurre al minimo il tempo impiegato per chiamare il Garbage Collector ha senso perché gli oggetti sono collegati ad altri oggetti. Se il Garbage Collector scollega solo gli oggetti alle estremità di un altro oggetto ogni volta, può scorrere l'heap in più fasi. Ciò significa che il garbage collector non impiega molto tempo prezioso in ogni fase, ma utilizza molti piccoli blocchi di tempo quando la CPU sarebbe altrimenti inutilizzata.

Di seguito è riportato l'output che viene visualizzato nella finestra della console Java quando viene premuto ciascuno dei tasti sopra descritti. Un messaggio di copyright dal browser precede l'output del comando da tastiera: "AppAccelerator (tm) 1.0.2a per Java, versione x86. Copyright (c) 1996 Borland International. Tutti i diritti riservati."

# Livello di debug dell'applet impostato su 0 # Livello di debug dell'applet impostato su 1 # Livello di debug dell'applet impostato su 2 # Livello di debug dell'applet impostato su 3 # Livello di debug dell'applet impostato su 4 # Livello di debug dell'applet impostato su 5 # Livello di debug dell'applet impostato su 6 # Livello di debug dell'applet impostato su 7 # Livello di debug dell'applet impostato su 8 # Livello di debug dell'applet impostato su 9 # Esecuzione della finalizzazione ... # Esecuzione di una raccolta dei rifiuti ... 

Di seguito è incluso un elenco di controllo delle azioni che puoi intraprendere per provare ciò che è descritto in questo suggerimento.

  1. Avvia il tuo Netscape Navigator abilitato per Java.

  2. Apri la console Java dal menu Opzioni.

  3. Fare clic con il mouse sulla console Java.

  4. Premere il tasto "9" (non il tasto PF9)

  5. Viene visualizzato il messaggio "# Livello di debug applet impostato su 9".

  6. Torna alla finestra del browser.

  7. Carica un URL che contiene un'applet Java.

  8. Guarda la console Java che visualizza i dettagli dell'applet dal programma di caricamento classi mentre i file .class, .gif, .jpg e .zip vengono individuati e caricati.

Il seguente esempio è un output di esempio visualizzato dalla console Java quando ho caricato un'applet. Ho premuto il tasto 9 e il messaggio "# Livello di debug applet impostato su 9" è stato visualizzato nella console Java.

# Livello di debug dell'applet impostato su 9 # initApplet: contextID = 8 appletID = 17930380 parentContext = 11134828 frameContext = 11134828 # initApplet: appletID = 17930380 # applet totali = 1 # Nuova applet: 17930380 nel file: / E | / Debugger 10-06- 96 / Debugger / larghezza = 300 altezza = 45 hspace = 0 archivio = file: /// E | / Debugger 10-06-96 / Debugger / vspace = 0 align = base di codice base = file: /// E | / Debugger 10 -06-96 / Debugger / code = DebuggerMain.class # startApplet: contextID = 8 appletID = 17930380 newFrameMWContext = 11134828 # startApplet: appletID = 17930380 # Trova classe DebuggerMain # Recupero file: / E | / Debugger 10-06-96 / Debugger /DebuggerMain.class # Trova la classe FocComm # Recupero file: / E | / Debugger 10-06-96 / Debugger / FocComm.class # Trova classe OpenFileThread # Recupero file: / E | / Debugger 10-06-96 / Debugger / OpenFileThread .class # Eccezione applet: eccezione: java.lang.ClassCastException: DebuggerMain java.lang.ClassCastException: DebuggerMain

su netscape.applet.EmbeddedAppletFrame.run (codice compilato)

in java.lang.Thread.run (codice compilato) # Trova la classe ConnectDialog # Recupero file: / E | / Debugger 10-06-96 / Debugger / ConnectDialog.class # Trova classe StreamListener # Recupero file: / E | / Debugger 10 -06-96 / Debugger / StreamListener.class # Trova classe InputLinkedList # Recupero file: / E | / Debugger 10-06-96 / Debugger / InputLinkedList.class # Trova classe CommunicationError # Recupero file: / E | / Debugger 10-06 -96 / Debugger / CommunicationError.class Errore nella connessione di FocusConnectjava.net.SocketException: nessun file o directory di questo tipo # Eccezione di sicurezza: uscita: 0

Crea il tuo file zip

Si noti che vengono visualizzate tutte le classi istanziate dalla mia applet. Per creare il pacchetto del file zip con le migliori prestazioni, esegui l'applet e seleziona tutti i possibili percorsi di codice. Prendi l'output visualizzato dalla console Java per tale esecuzione dell'applet e crea il file zip contenente solo queste classi. Questo elenco può essere modificato facilmente: basta ritagliarlo dalla finestra della console Java per creare un elenco di classi utilizzate.

Visualizza i dettagli delle applet caricate con "D"

Il comando da tastiera "D" non fa parte della messa a punto della performance, ma lo tratterò qui perché non è documentato da nessuna parte.

Quello che segue è l'output di una sessione di esempio che si verifica dopo aver premuto il tasto "D". Ho premuto questo tasto per esaminare i parametri che erano nel file HTML. Queste informazioni possono essere ottenute anche visualizzando il sorgente HTML.

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

codebaseURL = file: / E | / Debugger 10-06-96 / Debugger / status = dispose

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

larghezza = 300

altezza = 45

hspace = 0

archivio = file: /// E | / Debugger 10-06-96 / Debugger /

vspace = 0

allineare = linea di base

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

codice = DebuggerMain.class

Conclusione

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.

Nota: il merito deve essere dato a Teodor Todorov, uno studente della Cornell University e un eccellente programmatore Java. Ha scoperto che la console Java accetta i comandi della tastiera. Per i comandi nella console Java in Netscape Communicator 4.0, desidero ringraziare Ales Omahen a "[email protected]" per averli prima trovati e Kevin Lowe a "[email protected]" anche per averli trovati.

Peter Lenahan è un direttore tecnico presso Information Builders. Attualmente sta lavorando con diversi altri ingegneri su un pacchetto di informazioni aziendali Java.

Questa storia, "Suggerimento Java 28: migliora le prestazioni di download dell'applet utilizzando la console Java di Navigator" è stata originariamente pubblicata da JavaWorld.