Производительность WebView в JavaFX

У меня есть HTML5 UI и Java backend, и я хочу, чтобы не перестраивать HTML ui в простой Java, поэтому моя идея состояла в том, чтобы запустить локальный веб-сервер и использовать webview для рендеринга в "родном" окне. Решение похоже на использование JavaFX WebView, который может быть встроен в swing. На бумаге это звучит здорово (особенно потому, что они утверждают, что используют WebKit, который имеет значительно лучшую производительность для моего интерфейса в Chrome/Safari).

Это работает, но: производительность НЕОБХОДИМО. Заказы величины медленнее, чем то же самое в Chrome, Safari (или даже медленном Firefox). Это буквально непригодно (мой пользовательский интерфейс очень сильно использует JQuery/JS). Btw, я использую код этого сообщения.

Возникает вопрос:

  • Может кто-нибудь повторить мой опыт? Я просто делаю что-то неправильно или это вызвано JavaFX и, следовательно, "нормальным"?

  • Как лучше понять, как это достичь? В настоящее время я просто запускаю системный браузер, который работает, но не так хорош (не выглядит как интегрированный).

Ответ 1

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

  • Совместимость с Html5 хороша.
  • Производительность JavaScript варьируется, но я нашел примерно одну треть скорости последней версии Chrome в соответствии с эталонным тестом Google V8 (на который, по-видимому, настроен Chrome).
  • Производительность рендеринга не представляла большой проблемы.
  • Очень интенсивные HTML-Webapps, такие как некоторые из библиотеки эксперимента Chrome, не запускались так быстро, как в некоторых других браузерах.
  • WebGL не поддерживается, поэтому сайты, которые возвращаются к программному рендерингу графики из WebGL, намного медленнее.

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

Вот несколько контрольных показателей (используемая версия WebView была получена из JavaFX 2.2 build 9):

Соответствие

Запуск теста html5 для проверки соответствия html5 (оценки из 500):

Chrome 19      402 + 13 bonus points
Firefox 12     345 +  9 bonus points
WebView 2.2b9  296 +  7 bonus points 
IE 9.0.6       138 +  5 bonus points

Запуск теста acid3, просмотр веб-страниц 100/100 аналогичен другим тестовым браузерам, но, как и IE9, окончательный рендеринг имеет небольшое несовершенство.

Javascript

Sunspider Тест Javascript (ниже лучше):

IE 9.0.6       146.7ms 
Chrome 19      151.5ms
Firefox 12     185.8ms
WebView 2.2b9  199.5ms 

Google V8 Тест Javascript (выше, лучше):

Chrome 19      15323
Firefox 12     9557
WebView 2.2b9  5145
IE 9.0.6       3661

Mozilla Kraken Тест Javascript (ниже лучше):

Chrome 19      2416.8ms
Firefox 12     2112.9ms
WebView 2.2b9  7988.9ms
IE 9.0.6       9403.0ms

Интенсивный холст

Спиннинг 3D Будда (лучше):

Chrome 19      60fps
Firefox 12     43fps
IE 9.0.6       16fps
WebView 2.2b9  7fps

JQuery

JQuery test suite (ниже лучше):

Chrome 19      21826ms
WebView 2.2b9  22742ms
Firefox 12     23554ms
IE 9.0.6       28247ms

Основываясь на приведенных выше тестах (работайте на моем рабочем столе Windows 7), пока WebView стабилен и достаточно функциональен для вас, тогда производительность WebView и других браузеров не должна быть проблемой (пока ваше приложение не работает много 3D-спиннирующих будд...: -).

Обновление

В качестве состояний ответа uta, JIT-компилятор JavaScript включен для создания 32-битной сборки WinForm 2.2 и для сборки 64-битной версии WinForm 2.2 в JavaFX 2.2. Это означает, что тесты WebView JavaScript значительно медленнее (обычно в 4-5 раз медленнее) при запуске 64-битной версии JavaFX и 32-битной версии JavaFX.

Ответ 2

JavaScript JIT отключен в WebNode для Windows x64. Это может быть причиной вашей проблемы.

Ответ 3

Я также столкнулся с плохой производительностью JavaFX WebView (медленность, перерисовка) для моего сайта (https://mdemo.cqg.com). После некоторого googling я наткнулся на тему Интеграция JavaFX 2.0 WebView в приложение Swing Java SE 6. Среди ответов есть предложение использовать JxBrowser (http://www.teamdev.com/jxbrowser) - компонент Swing/JavaFX на основе Chromium для Java. Я попробовал это для своего сайта. Сайт выполнен хорошо - не медлительность и не перерисовывает проблемы (которые происходят в оригинальном WebView).

Ответ 4

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

Некоторые примеры моего сообщения:  - https://community.oracle.com/message/12356161

Упростите это, если вы можете:  - https://javafx-jira.kenai.com/browse/RT-33217

Ответ 5

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