tutorial examples ejemplos gwt

examples - Grandes aplicaciones en GWT: ¿un módulo o varios?



gwt tutorial (3)

He creado algunas aplicaciones muy grandes en GWT, y considero que es mejor dividir las cosas en módulos y mover el código común a su propia área, como lo ha hecho. La razón en nuestro caso era simple, teníamos algunas partes de nuestra aplicación que eran muy diferentes al resto, por lo que tenía sentido desde el punto de vista del tamaño de una compilación. Nuestra aplicación compilada hasta 300kb para la sección principal, y aproximadamente 25-40kb para otras secciones. Si acabáramos de ponerlos todos en uno, al usuario le habría quedado una descarga de 600kb, que para nosotros no era aceptable.

También tiene más sentido desde un punto de vista de diseño y reutilización separar las cosas tanto como sea posible, ya que desde entonces hemos reutilizado una gran cantidad de módulos que creamos en este proyecto.

El tiempo de compilación no es algo por lo que deba preocuparse en general, porque puede hacerlo más rápido si tiene módulos separados. Usamos Ant para construir nuestro proyecto, y lo configuramos para compilar solo el GWT que ha cambiado, y durante el desarrollo para construir solo para un navegador, los tiempos de compilación típicos de nuestro proyecto son de 20 segundos, y tenemos mucho código. Puedes ver y un ejemplo de esto aquí .

Otra cosa menor: supongo que sabes que no tienes que usar las rutas GWT predeterminadas que genera. Entonces, en lugar de com.MyPackage.Package, puedes ponerlo en una carpeta con un buen nombre como ''ui'' o algo así. Una vez compilado, a GWT no le importa dónde lo coloque, y no es sensible a los cambios de ruta, ya que todo se ejecuta desde el mismo directorio.

Con el fin de proporcionar buenas URL entre partes de nuestra aplicación, dividimos todo en varios módulos que se compilan de forma independiente. Por ejemplo, hay una parte de "gerente" y una parte de "editor". El editor se inicia en una nueva ventana. Al hacer esto, podemos vincular directamente al editor:

/com.example.EditorApp?id=1

El módulo EditorApp solo obtiene el valor de id y carga el documento.

El problema con esto es que TODO el código que es común entre los dos módulos se duplica en la salida. Esto incluye cualquier contenido estático (gráficos), hojas de estilo, etc.

Y otro problema es que el tiempo de compilación para generar JavaScript es casi el doble porque tenemos un código complejo compartido entre ambos módulos que debe procesarse dos veces.

nadie se ha ocupado de esto? Estoy considerando eliminar los módulos por separado y volver a fusionar todo en un solo objetivo de compilación. El único inconveniente es que las URL entre nuestras "aplicaciones" se convierten en algo así como:

/com.example.MainApp?mode=editor&id=1

Cada ventana carga el módulo principal, verifica el valor del parámetro de modo y llama al código de inicio de módulo apropiado.


De acuerdo. Realmente entiendo que realmente no hay una respuesta "correcta" porque los proyectos varían mucho. Depende mucho de la naturaleza de la aplicación.

Nuestra compilación principal está compuesta por una serie de módulos internos y módulos de terceros. Todos son administrados en proyectos separados. Eso tiene sentido ya que se usan en diferentes lugares.

Pero tener más de un módulo en un solo proyecto diseñado para operar como una aplicación completa parece haber complicado las cosas. La razón original de los dos módulos fue mantener la URL simple al abrir diferentes pantallas en una nueva ventana. Aunque tenía varios objetivos de compilación, todos usan un subconjunto común muy grande de código (incluida una biblioteca de clasificación personalizada XML / POJO).

Sobre el tamaño ... para nosotros, un módulo era de 280KB y el otro solo superaba los 300KB.

Acabo de terminar de fusionar todo en un solo módulo. El nuevo módulo combinado es de alrededor de 380 KB. Por lo tanto, es un poco menos de descarga ya que la mayoría de las personas usaría ambas pantallas.

También recuerde que hay un almacenamiento en caché perfecto, de modo que solo se deben descargar 380 KB una vez, a menos que se cambie la aplicación.


Desde mi experiencia en la creación de aplicaciones GWT, hay algunas cosas que considerar al decidir si quieres múltiples módulos (con o sin puntos de entrada) o todo en uno: tiempo de descarga (tamaño de paquete de Javascript), tiempo de compilación, navegación / url y mantenibilidad / reutilización.

... por tiempo de descarga, la división del código obvia la necesidad de entrar en diferentes módulos por razones de rendimiento.

... por tiempo de compilación, incluso las aplicaciones grandes son bastante rápidas de compilar, pero puede ayudar a romper las cosas para aplicaciones enormes.

... por navegación / URL, puede ser complicado desplazarse de un módulo a otro (asumiendo diferentes puntos de entrada), ya que cada módulo tiene su propio estado en el lado del cliente ... y la navegación no se realiza a través de los módulos.

... por mantenibilidad / reutilización, puede ser útil desde una perspectiva de organización / estructura dividirse en módulos separados (incluso si solo hay un EntryPoint).

Escribí una publicación de blog sobre el uso de GWT Modules , en caso de que sirviera.