Съвет за Java 28: Подобрете производителността на изтегляне на вашия аплет, като използвате Java конзолата на Navigator

Вероятно вече сте чели за опаковането на вашия аплет с помощта на zip файлове, за да подобрите производителността на изтегляне в Netscape Navigator (вижте Java Съвет 21: Използвайте архивни файлове, за да ускорите зареждането на аплета). Но в определени ситуации използването на zip файлове за аплети може да доведе до проблеми с производителността.

Да предположим например, че доставчикът на инструменти е създал общ пакет, който включва редица функции - много от които вероятно няма да използвате. Включването на всички тези класове във вашия zip файл ще доведе до бързото му нарастване от няколко килобайта до стотици килобайта или повече, като по този начин се отрича причината да се използва 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" кара Finalizeклаузите на изхвърлената, но не събирана боклук памет да се изпълнява - поне мисля, че това се случва, тъй като съществува отделен ключ за събиране на боклука.

  • Натискането на клавиш "G" води Runtime.gc()до стартиране на събирача на боклук. Поиграх си малко с боклука и вярвам, че трябва да му се правят много обаждания, за да се изчисти паметта. Минимизирането на времето, необходимо за извикване на събирача на боклук, има смисъл, защото обектите са свързани с други обекти. Ако събирачът на боклук всеки път отделя обекти в краищата на друг обект, той може да преминава през купчината на етапи. Това означава, че събирачът на боклук не прекарва много ценно време на всеки етап, но използва много малки парчета време, когато процесорът иначе не би бил използван.

Ето изхода, който се показва в прозореца на конзолата на Java, когато се натисне всеки от описаните по-горе клавиши. Съобщение за авторски права от браузъра предшества изхода на командата на клавиатурата: "AppAccelerator (tm) 1.0.2a за Java, версия x86. Copyright (c) 1996 Borland International. Всички права запазени."

# Нивото на отстраняване на грешки на аплета е зададено на 0 # Нивото на отстраняване на грешки на аплета е настроено на 2 # Нивото на отстраняване на грешки на аплета е настроено на 3 # Нивото на отстраняване на грешки на аплета е настроено на 4 # Нивото на отстраняване на грешки на аплета е настроено на 5 # Нивото на отстраняване на грешки на аплета е настроено на 6 # Нивото на отстраняване на грешки на аплета е зададено на 7 # Нивото на отстраняване на грешки на аплета е настроено на 8 # Нивото на отстраняване на грешки на аплета е настроено на 9 # Извършване на финализиране ... # Извършване на събиране на боклук ... 

Контролен списък с действия, които можете да предприемете, за да изпитате описаното в този съвет, е включен по-долу.

  1. Стартирайте вашия Java-активиран Netscape Navigator.

  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 и в конзолата на Java се появи съобщението "# Applet debug level set to 9".

# Нивото за отстраняване на грешки на аплета е зададено на 9 # initApplet: contextID = 8 appletID = 17930380 parentContext = 11134828 frameContext = 11134828 # initApplet: appletID = 17930380 # total applets = 1 # Нов аплет: 17930380 в файл: / 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 # Намери клас DebuggerMain # Извличане на файл: / E | / Debugger 10-06-96 / Debugger 10-06-96 / Debugger 10-06-96 / /DebuggerMain.class # Намиране на клас FocComm # Извличане на файл: / E | / Debugger 10-06-96 / Debugger / FocComm.class # Намиране на клас OpenFileThread # Извличане на файл: / 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 (компилиран код) # Намери клас ConnectDialog # Извличане на файл: / E | / Debugger 10-06-96 / Debugger / ConnectDialog.class # Намери клас StreamListener # Извличане на файл: / E | / Debugger 10 -06-96 / Debugger / StreamListener.class # Намери клас InputLinkedList # Извличане на файл: / E | / Debugger 10-06-96 / Debugger / InputLinkedList.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 # frame = 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 = файл: / E | / Debugger 10-06-96 / Debugger / status = dispose

манипулатор = нишка [Thread-1,5, applet-DebuggerMain.class]

ширина = 300

височина = 45

hspace = 0

archive = файл: /// E | / Debugger 10-06-96 / Debugger /

vspace = 0

align = baseline

codebase = файл: /// E | / Debugger 10-06-96 / Debugger /

код = DebuggerMain.class

Заключение

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.

Забележка: Кредит трябва да се даде на Теодор Тодоров, студент от университета Корнел и отличен програмист на Java. Той откри, че конзолата Java приема команди от клавиатурата. За командите в конзолата на Java в Netscape Communicator 4.0 искам да благодаря на Алес Омахен на адрес "[email protected]" за първото им намиране и Кевин Лоу на адрес "[email protected]" също за тяхното намиране.

Питър Ленахан е технически директор в Information Builders. В момента работи с няколко други инженери по корпоративен информационен пакет за Java.

Тази история, „Java Съвет 28: Подобрете производителността на изтегляне на вашия аплет с помощта на Java конзолата на Navigator“, първоначално е публикувана от JavaWorld.