удобство использования Java-апплетов в сети - PullRequest
3 голосов
/ 26 июля 2010

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

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

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

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

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

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

  • Браузер (или, по крайней мере, вкладка в 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 или около того), хотя я думаю, что некоторые из этих примеров могут быть очень сложными для реализации (или, по крайней мере,сложнее, чем на Яве).

Ответы [ 7 ]

4 голосов
/ 26 июля 2010

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

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

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

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

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

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

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

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

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

В FireFox 3.6 кажется, что он ждет 1-2 минуты перед выгрузкой апплета.

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

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

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

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

4 голосов
/ 26 июля 2010

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

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

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

РЕДАКТИРОВАТЬ: Это довольноВозможно, что Geonext использует некоторые статические переменные, это может создать условия гонки, когда страница содержит несколько открытых экземпляров.Возможно, вы захотите проверить документ ...

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

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

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

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

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

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

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

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

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

2 голосов
/ 27 июля 2010

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

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

Я бы предложил попробовать одну из современных библиотек Javascript, которая фокусируется на рисовании диаграмм: http://javascript.open -libraries.com / утилиты / графика / 20-лучший Javascript-картирование-и-черчения-библиотека /

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

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

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

1 голос
/ 26 июля 2010

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

1 голос
/ 26 июля 2010

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

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

0 голосов
/ 26 июля 2010

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

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

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

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

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

...