tutorial jxbrowser java performance swing webview javafx

jxbrowser - Rendimiento de WebView en JavaFX



java jxbrowser (5)

Tengo una UI HTML5 y un backend Java y quiero evitar la reconstrucción de la interfaz de usuario HTML en Java simple, por lo que mi idea era ejecutar un servidor web local y usar una vista web para representarlo en una ventana "nativa". La solución parece ser usar JavaFX WebView que puede integrarse en swing. En el papel suena genial (especialmente porque dicen usar WebKit que tiene un rendimiento significativamente mejor para mi interfaz de usuario en Chrome / Safari).

Funciona, pero: el rendimiento es INCREÍBLEMENTE MALO. Órdenes de magnitud más lenta que la misma cosa en Chrome, Safari (o incluso el Firefox más lento). Es literalmente inutilizable (mi UI hace bastante uso de JQuery / JS). Por cierto, estoy usando el código de esta publicación .

La pregunta es:

  1. ¿Alguien puede secundar mi experiencia? ¿Estoy simplemente haciendo algo mal o es esto causado por JavaFX y por lo tanto "normal"?

  2. ¿Alguna mejor idea de cómo lograr esto? Actualmente estoy simplemente activando el navegador del sistema que funciona pero no es tan bueno (no se ve tan integrado).


He usado WebView bastante y usualmente el rendimiento fue perfecto y muy útil.

  • El cumplimiento Html5 es bueno.
  • El rendimiento de JavaScript varía, pero encontré aproximadamente un tercio de la velocidad de una versión reciente de Chrome de acuerdo con el punto de referencia V8 de Google (que presumiblemente se ajusta a Chrome).
  • El rendimiento de la representación no parece ser un gran problema.
  • Los Webapps HTML muy intensivos, como algunos en la biblioteca de experimentos de Chrome, no se iniciaron tan rápido como en otros navegadores.
  • WebGL no es compatible, por lo que los sitios que se basan en la representación de software de gráficos de WebGL son mucho más lentos.

El problema más grande que tuve con WebView es que no es tan estable para las funciones de vanguardia y el uso intensivo como otros navegadores, pero en realidad no es un problema serio de rendimiento.

Aquí hay algunas estadísticas de referencia (la versión de WebView utilizada se obtuvo de JavaFX 2.2 compilación 9):

Conformidad

Ejecutar una prueba html5 para probar el cumplimiento de html5 (puntajes de 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

Al ejecutar una prueba de acid3 , webview obtiene una puntuación 100/100 igual que los otros navegadores de prueba, pero, como IE9, la renderización final tiene una ligera imperfección.

Javascript

Sunspider Javascript (menor es mejor):

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

Punto de referencia de Javascript de Sunspider (más alto es mejor):

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

Punto de referencia de Javascript de Mozilla Kraken (menor es mejor):

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

Lienzo intensivo

Spinning 3D buddha (más alto es mejor):

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

JQuery

Ejecución del conjunto de pruebas de JQuery (menor es mejor):

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

En función de los puntos de referencia anteriores (ejecutados en mi escritorio con Windows 7), siempre que WebView sea lo suficientemente estable y funcional para usted, el rendimiento de WebView frente a otros navegadores no debería ser un problema (siempre y cuando su aplicación no incluya una gran cantidad de 3D girando buddhas ... :-).

Actualizar

Como dice la respuesta de uta, el compilador JIT de JavaScript está activado para la compilación de JavaFX 2.2 de Win 32 bit y desactivado para la compilación de JavaFX 2.2 de Win 64 bit . Esto significa que los puntos de referencia de JavaScript de WebView son significativamente más lentos (típicamente de 4 a 5 veces más lentos) cuando se ejecuta la versión JavaFX de 64 bits que la versión JavaFX de 32 bits.


JavaScript JIT está desactivado en WebNode para Windows x64. Esa podría ser una razón de tu problema.



También me encontré con el rendimiento pobre de JavaFX WebView (lentitud, problemas de repintar) para mi sitio web ( https://mdemo.cqg.com ). Después de buscar en Google, encontré el tema Integración de JavaFX 2.0 WebView en una aplicación Swing Java SE 6 . Entre las respuestas hay una propuesta para usar JxBrowser ( http://www.teamdev.com/jxbrowser ) - Componente Swing / JavaFX basado en cromo para Java. Lo intenté para mi sitio. El sitio se desempeñó bien, sin lentitud ni problemas de repintado (eso ocurre en WebView original).


Una razón por la que JavaFX webView parece ser más lento es que, a diferencia de un navegador web, no almacena nada en la memoria caché. Esto tiene que ser implementado.