Удобство использования Java-апплетов в сети - программирование

Удобство использования Java-апплетов в сети

Для нашего проекта eLearning в нашем университете мы используем Java-апплеты для отображения некоторых интерактивных материалов (например, некоторых интерактивных графиков функций или простой системы вопросов/ответов или других интерактивных элементов и любой комбинации на них) внутри учебных модулей Ilias.

Мы решили использовать Java, потому что нам нужно открытое решение (и HTML5 в то время не был действительно доступен, и Flash был и не является действительно вариантом).

Теперь, спустя несколько лет, у меня действительно появилось ощущение, что Java не подходит для Интернета. В основном из-за множества проблем, которые я действительно не смог исправить для всех случаев.

Итак, мой вопрос: Является ли Java просто неправильной для сети, или я делаю это. неправильно? Можете ли вы указать, как я могу решить эти проблемы?

Проблемы, с которыми я столкнулся за это время:

  • Апплет Java требует времени для загрузки. Даже если это очень простой маленький апплет, иногда требуется около минуты для загрузки. Почему это? Действительно ли Java-инфраструктура намного больше, чем Qt или другие структуры? Или VM настолько велика? Или VM настолько медленная?

  • Браузер (или, по крайней мере, вкладка в Chrome) получает очень медленный esp при загрузке апплета, но также и потом.

  • Апплет Java выглядит по-разному в каждой системе. Элементы управления пользовательского интерфейса совершенно разные, а также ведут себя немного иначе. Иногда это внешний вид (или его вид), иногда это совершенно что-то собственное. Кроме того, шрифт в основном отличается и часто поддерживает другой подмножество символов Unicode. Это реальная проблема для нас, потому что мы много раз используем Unicode для математических символов, и у нас появилось много сообщений о том, что некоторые символы не работают для некоторых людей. Также, как шрифт имеет разный размер для каждой системы, я получил сообщения о том, что текст вырезается для нескольких человек (или сокращен "..." в JLabel). Теперь я столкнулся с этой проблемой, включив TTF в JAR. Это работает в основном. Тем не менее иногда я получаю эти "..." отчеты даже с уникальным шрифтом.

  • Иногда использование памяти невероятно высоко (но не всегда).

  • При загрузке страницы с несколькими апплетами шансы становятся очень высокими, что браузер прорывается и несколько апплетов загружаются неправильно. Также вся операционная система работает очень медленно.

  • Иногда апплет Java не загружается в браузере X, а в браузере Y. После нескольких щелчков при перезагрузке или перезапуске браузера/системы это поведение может переключаться. Например, кажется, что шансы выше, что загрузка апплета в Firefox (также не всегда, но в основном, по крайней мере, после нажатия один или два раза при перезагрузке) и менее вероятна в Chrome (но если мне повезет, она также работает иногда), В зависимости от системы, это могут быть разные браузеры, которые работают лучше всего. Хотя браузер никогда не работает идеально. Такое поведение наблюдается во всех тестируемых нами системах (разные дистрибутивы Linux, как 32-битные, так и 64-битные, Windows XP/Vista/7, MacOSX).

  • Иногда апплет остается пустым, когда я переключаюсь на другую вкладку и возвращаюсь обратно. Иногда это, по крайней мере, занимает очень много времени, пока не появится снова.

  • Он потребляет весь процессор. Даже после того, как я закрыл все вкладки с помощью апплетов. Мне нужно выйти из браузера, чтобы решить эту проблему.

Некоторые примеры, где мы имеем эти проблемы:

Если вы посмотрите на эти примеры, что будет хорошим альтернативным решением для Java? Я думал о HTML + JS с недавними браузерами (это не проблема, если мы говорим нашим пользователям, что они должны использовать браузеры на основе WebKit или около того), хотя я думаю, что некоторые из этих примеров могут быть очень трудными для реализации (или, по крайней мере, сложнее, чем на Java).

4b9b3361

Ответ 1

Java-апплеты были современными в начале этого века. Сейчас всего несколько сайтов, использующих Java-апплеты, и это может быть одной из причин, по которым поддержка браузера не оптимальна.

Из того, что я видел до того, как мой браузер застрял, ваши апплеты, похоже, просто рисуют различные диаграммы.

Я бы предложил попробовать одну из современных Javascript-библиотек, которые фокусируются на рисовании диаграмм: http://javascript.open-libraries.com/utilities/chart/20-best-javascript-charting-and-plotting-libraries/

В качестве альтернативы, если вам нужно больше опций, чем предлагают библиотеки, и вам не очень нужна совместимость с несколькими браузерами, вы можете использовать элемент HTML5 и SVG - все браузеры, кроме IE, имеют достойную поддержку.

Если вам не нужны интерактивные диаграммы, вы можете отобразить их на сервере с помощью PHP/Ruby/Python/Java/whatever и отправить их в виде простых изображений в браузер.

Если вам нужно выразить математические выражения, рассмотрите MathML (http://en.wikipedia.org/wiki/MathML) или простые изображения, которые могут отображаться "на лету" сервером script.

Ответ 2

Вы пробовали WebStart? В основном это позволяет вам запускать автономное приложение Java из веб-ссылки. Все ваши ресурсы кэшируются на стороне клиента, поэтому начало последовательностей выполняется намного быстрее.

Из ссылки, которую вы отправили, похоже, проблема с Geonext. Кажется, что это не работает, когда на одной странице несколько экземпляров. Вы пытались запустить экраны Geonext в автономном приложении java? Это также может быть проблемой с вашими входными данными.

Что касается внешнего вида, вы можете установить его явно, если вы хотите, чтобы он был независимым от ОС.

EDIT: вполне возможно, что Geonext использует некоторые статические переменные, это может создать условия гонки, когда страница содержит несколько открытых экземпляров. Возможно, вы захотите проверить документ...

Ответ 3

Апплет Java принимает возраст для загрузки. Даже если это очень простой маленький апплет, иногда требуется около минуты нагрузки. Почему это? Действительно ли это структура Java намного больше чем Qt или другие рамки? Или это VM такая большая? Или VM настолько медленная?

Это полностью зависит от работы компьютера, веб-браузера и версии Java. Я загрузил первую страницу с примерами, к которой вы привязались, и хотя на загрузку загрузилось всего несколько секунд, она также загружала 19 апплетов одновременно на двухъядерной машине.

Сказав это, 19 апплетов на одной странице смешно.

Браузер (или, по крайней мере, вкладка в Chrome) становится очень медленным, пока загрузка апплета, но также после этого.

При загрузке страницы с несколькими апплеты, шансы становятся очень высокими что браузер сует и/или несколько апплетов не загружаются правильно. Также вся операционная система получает очень медленно.

Я не заметил проблем с загрузкой апплетов, кроме тех случаев, когда вы загружаете их сразу.

Опять же, это не просто зависит от Java, но и от браузера, который загружает его.

Он потребляет весь процессор. Даже после того, как я закрыл все вкладки с помощью апплетов. Мне нужно выйти из браузера, чтобы решить эту проблему.

Аплеты не всегда выгружаются при выходе из страницы. Метод Applet stop() всегда запускается, когда вы покидаете страницу, но метод destroy() и фактическая разгрузка апплета не могут быть.

В FireFox 3.6, похоже, подождите 1-2 минуты, прежде чем выгружать апплет.

Апплет Java выглядит по-другому каждой системы. Элементы пользовательского интерфейса совершенно разные, а также ведут себя немного отличается. Иногда это внешний вид (или его вид), иногда это совершенно что-то собственное. Также шрифт в основном отличается и часто поддерживает другой подмножество Unicode персонажи. Это настоящая проблема для нас, потому что мы много раз используем Unicode для математические символы, и мы получили много сообщает, что некоторые символы не работают для некоторых людей. Также как шрифт имеет различный размер на каждой системе, я получил сообщает, что текст вырезается для несколько человек (или сокращенное "..." в JLabel). Я обошел это проблема теперь, включив TTF в JAR. Это работает в основном. Все еще иногда я получаю эти "..." отчеты даже с уникальным шрифтом.

Java имеет два базовых класса апплета. Первый - это класс java.applet.Applet. Другой - новый класс javax.swing.JApplet.

Первый использует AWT для рендеринга, который основывается на собственных виджетах системы. Последний использует Swing для рендеринга и должен по умолчанию использовать кросс-платформенную тему Metal (Ocean).

В учебнике Swing есть страница Как сделать апплеты.

Ответ 4

  • "Java-апплет требует времени для загрузки". На самом деле, нет. Сыворотка вы загружаете свой FIRST-апплет, вы также загружаете JVM, который, в отличие от механизма JavaScript, не загружается при запуске вашего браузера. Время запуска JVM не превышает время запуска JavaScript, но последнее скрыто во время запуска браузера... Существует проект под названием Jigsaw, который разбивает текущую JVM на модули и делает этот первоначальный запуск намного быстрее и запланирован для Java 9.

  • "Браузер (или, по крайней мере, вкладка в Chrome) получает очень медленный esp при загрузке апплета, но также и потом". При загрузке JVM естественно, что все замедляется. Однако, если браузер медленный после этого, у вас, вероятно, есть ошибка в вашем апплете, который вызывает чрезмерный процессор. Это ничем не отличается от JavaScript, который также может сделать браузер очень медленным. Возможно, вам понадобится профайл вашего апплета, чтобы выяснить, куда идут ваши ресурсы. У меня проблемы с Chrome, но его поддержка апплетов, как известно, дерьмовая...

  • "Java-апплет выглядит по-разному в каждой системе". Если вы используете Swing с неродным LAF, это не так. Лично я предпочитаю современный Nimbus LAF. Как установить внешний вид Nimbus в главном

  • "Иногда использование памяти невероятно высоко (но не всегда)". Профилируйте свой код, вы, вероятно, делаете чрезмерные выделения памяти. Прочитайте пулы объектов и другие методы, чтобы уменьшить фрагментацию памяти. Обычно это признак плохо кодированного апплета, а не проблема с технологией Applet.

  • "При загрузке страницы с несколькими апплетами вероятность становится очень высокой, что браузер проваливает и несколько апплетов загружаются неправильно. Также вся операционная система становится очень медленной". Лично у меня не было бы нескольких апплетов на странице. Посмотрите, можете ли вы объединить их. У некоторых браузеров очень плохая поддержка. Но, что еще более важно, он не очень удобен для пользователя, даже когда технология не испортит его.

  • "Иногда апплет Java не загружается в браузере X, а в браузере Y" Это известная проблема с современными браузерами, которые, как правило, не поддерживают плагины. Это на самом деле та же проблема, что и номер 5. Эта проблема гораздо реже, когда вы используете только один апплет на своей странице.

  • "Иногда апплет остается пустым, когда я переключаюсь на другую вкладку и возвращаюсь назад. Иногда это, по крайней мере, занимает очень много времени, пока не появится снова". Такая же проблема, как 5 и 6. Код плагина (NPAPI) не был модернизирован для правильной поддержки плагинов. Браузер не сообщает плагину, что он должен правильно перерисовать его содержимое. В качестве альтернативы он может быть разбит. Эта проблема также реже, если вы используете только один апплет.

  • "Он поглощает весь процессор. Даже после того, как я закрыл все вкладки с помощью апплетов. Мне нужно выйти из браузера, чтобы решить эту проблему". Аплеты не закрываются при закрытии вкладок. Они закрываются, когда апплет выходит, что вам нужно сделать в коде. Ваш код должен прослушать какое-либо событие, очистить и выйти. Я не помню код для этого, поскольку я обычно копирую его. Также возможно, что AWT/Swing угасает, если вы не закрываете его, когда его оконный ресурс умирает...

В некоторых случаях вы правы, а на других у вас проблемы, потому что вы используете устаревшие библиотеки (например, AWT или Swing с LAF по умолчанию) или не понимаете, как управлять жизненным циклом апплета.

Ответ 5

Доступен ли вам мобильный доступ? Если это так, опция HTML + JS действительно является единственной достойной вами, поскольку она является наиболее широко используемой технологией внедрения на всех устройствах Apple, устройствах Android и многих других мобильных устройствах, поддерживающих WebKit. (Таким образом, мы внедрили всю интерактивность на домашней странице штата Техас. http://www.txstate.edu/)

Если вы в порядке с доставкой только на рабочем столе, Flash становится довольно жизнеспособной, протесты Стива Джобса наоборот.:) Некоторые из наших модулей обучения построены на этой технологии.

Ответ 6

Если вы знаете Java и удобны в коде Applet. Посмотрите на GWT (Google Web Toolkit) Он позволяет вам писать Java-код, и он переводит его на Java Script.

Ответ 7

Большинство из этих проблем возникли из описания, чтобы быть проблемами с тем, как написан код. К сожалению, в нашей отрасли качество редки.

Если апплет занимает минуту, чтобы загрузить, что может быть проблемой DNS или какой-либо другой проблемой, связанной с I/O. (Зависит от сети, файла или процессора?)

На современных компьютерах использование памяти на удивление трудно измерить эффективно. Накладные расходы JRE на современном компьютере с гигабайтами памяти должны быть довольно маленькими.

Если вы используете Swing, то PL & F можно установить как кросс-платформу (Metal, Nimbus или загруженную реализацию).

Шрифты также могут быть динамически загружены.