2008-12-01 8 views
12

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. De esta manera podemos enlazar con el editor directamente:Aplicaciones grandes en GWT: ¿un módulo o varios?

/com.example.EditorApp?id=1 

El módulo EditorApp sólo se pone el valor de ID y cargas de hasta 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.

¿Alguien ha tratado 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 direcciones URL entre nuestras "aplicaciones" se convierten en algo así como:

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

Cada ventana de carga el módulo principal, comprueba el valor del parámetro de modo, y y llama al módulo de código init adecuado.

+0

Esto puede ayudar: http://code.google.com/webtoolkit/doc/latest/DevGuideCodeSplitting.html –

+0

Sí. Pregunté esto antes de que se lanzara GWT 2.x. Las cosas se han vuelto mucho más simples y poderosas desde entonces. –

Respuesta

8

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 alrededor de 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 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 en realidad 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. Usted puede ver y ejemplo de esto here.

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.

+0

el enlace parece vencido ahora –

1

Ok. 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 construcción principal se compone de 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.

Recuerde también 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.

+0

nuestra aplicación se ejecuta como HTTPS, por lo que no hay memoria caché en varias visitas, por lo que el tamaño era realmente importante para nosotros. Creo que la respuesta correcta en la mayoría de los casos es dividirlos, para mantenimiento, administración y velocidad de compilación – rustyshelf

+1

@rustyshelf: HTTPS _no_ significa que no hay almacenamiento en caché. ver p. [esta publicación del blog sobre los mitos de HTTPS] (http://blog.httpwatch.com/2011/01/28/top-7-myths-about-https/) –

4

Desde mi experiencia construyendo 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 (paquete de Javascript), tiempo de compilación, navegación/url, y mantenibilidad/reutilización.

... por el tiempo de descarga, la división de código evita la necesidad de acceder a diferentes módulos por motivos de rendimiento.

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

... por navegación/url, puede ser un fastidio navegar de un módulo a otro (asumiendo diferentes EntryPoints), ya que cada módulo tiene su propio estado del lado del cliente ... y la navegación no es perfecta 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 en el blog sobre using GWT Modules, en caso de que ayude.

Cuestiones relacionadas