Pergunta

Estou no início / meio de um projeto que escolhemos implementar usando GWT. Já alguém encontrou qualquer principais armadilhas em usar GWT (e GWT-EXT) que não puderam ser superadas? Como cerca de uma perspectiva de desempenho?

Algumas coisas que temos visto / ouvido já incluem:

  • O Google não ser capaz de indexar conteúdo
  • CSS e estilo, em geral, parece ser um pouco esquisito

Olhando para qualquer feedback adicional sobre esses itens também. Obrigado!

Foi útil?

Solução

Vou começar por dizer que eu sou um grande fã do GWT, mas sim há muitas armadilhas, mas a maioria se não todos nós fomos capazes de superar:

Problema: compilação Longo vezes, como seu projeto cresce também a quantidade de tempo que leva para compilá-lo. Já ouvi falar de relatos de 20 compila minutos, mas os meus são, em média, cerca de 1 minuto.

Solução: Dividir seu código em módulos separados, e dizer formiga apenas construí-lo quando se mudou. Também durante o desenvolvimento, você pode maciçamente acelerar os tempos de compilação de apenas construindo para um browser. Você pode fazer isso, colocar isso em seu arquivo .gwt.xml:

<set-property name="user.agent" value="gecko1_8" />

Onde gecko1_8 é Firefox 2+, o IE6 é IE, etc.


Problema: Modo Hospedado é muito lento (no OS X, pelo menos) e não vem perto de igualar o 'ao vivo' muda você começa quando você editar coisas como JSPs ou trilhos páginas e atualização hit no seu browser.

Solução: Você pode dar o modo hospedado mais memória (geralmente eu tenho para 512M), mas ainda é lento, eu encontrei uma vez que você ficar bom o suficiente com o GWT você parar de usar isso. Você faz um grande pedaço de alterações, em seguida, compilar para apenas um navegador (geralmente 20s valor de compilação) e atualização, em seguida, basta clicar no seu browser.

Update: Com GWT 2.0+ isso não é mais um problema, porque você usar o novo 'modo de desenvolvimento'. Basicamente, significa que você pode executar código diretamente no seu navegador de escolha, então não há perda de velocidade, mais você pode Firebug / inspecioná-lo, etc.

http://code.google.com/p/google -web-toolkit / wiki / UsingOOPHM


Problema: código GWT é java, e tem uma mentalidade diferente para colocar para fora uma página HTML, que faz a tomada de um projeto HTML e transformá-lo em GWT mais difícil

Solução: Mais uma vez você se acostumar com isso, mas, infelizmente, convertendo um design HTML a um projeto GWT é sempre vai ser mais lento do que fazer algo como a conversão de um projeto HTML para uma página JSP


Problema: GWT leva um pouco de começar sua cabeça ao redor, e ainda não é mainstream. O que significa que a maioria dos desenvolvedores que se juntam a sua equipe ou manter o seu código terá que aprender a partir do zero

Solução: Ele continua a ser visto se GWT vai decolar, mas se você é uma empresa no controle de quem você contratar, então você pode sempre escolher as pessoas que quer saber GWT ou querem aprendê-lo.


Problema: GWT é uma marreta comparado a algo como jQuery ou apenas javascript simples. É preciso muito mais configuração para obtê-lo acontecendo do que apenas incluindo um arquivo JS.

Solução: Usar bibliotecas como jQuery para tarefas menores, simples, que são adequados para aqueles. Use GWT quando você quer construir algo realmente complexo em AJAX, ou onde você precisa para passar sua volta dados e para trás através do mecanismo RPC.


Problema: Às vezes, a fim de preencher a página GWT, você precisa fazer uma chamada de servidor quando a página é carregada pela primeira vez. Pode ser irritante para o usuário a sentar lá e assistir um símbolo de carregamento enquanto você buscar os dados que você precisa.

Solução: No caso de uma página JSP, a página já foi proferida pelo servidor antes de se tornar HTML, de modo que você pode realmente fazer toda a sua GWT chama então, e pré-carregá-los para o página, para uma carga instantânea. Veja aqui para mais detalhes:

Acelerar Página Loading pelo pré-serialização seu GWT chama


Eu nunca tive qualquer CSS problemas denominar meus widgets, fora da caixa, costume ou de outra forma, então eu não sei o que você entende por que ser uma armadilha?

Quanto ao desempenho, eu sempre achei que o código GWT uma vez compilado é rápido e chamadas AJAX sãoquase sempre menor do que fazendo uma atualização de página inteira, mas isso não é realmente única para GWT, embora os pacotes RPC nativas que você começa se você usar um final JAVA volta são bastante compacto.

Outras dicas

Temos vindo a trabalhar com o GWT por quase 2 anos. Nós aprendemos muitas lições. Aqui é o que nós pensamos:

  1. Não usar bibliotecas de terceiros widgets partido especialmente gwt-ext. Ele vai matar a sua depuração, desenvolvimento e desempenho de tempo de execução. Se você tiver dúvidas sobre como isso acontece, contacte-me diretamente.

  2. Use GWT para preencher apenas nas partes dinâmicas de seus aplicativos. Então se você tem algumas interações do usuário complexas, com muitas áreas. No entanto, não use os painéis que vêm com ele. Tire suas páginas fornecidos estoque de designer existentes. Esculpir as áreas que irão conter os controles para a sua aplicação. Anexar esses controles para a página dentro onModuleLoad (). Desta forma, você pode usar as páginas padrão de seu designer e também fazer todo o estilo fora do GWT.

  3. Não construa o aplicativo inteiro como uma página padrão que então constrói dinamicamente todas as peças. Se você fizer o que eu sugiro no item 2, isso não vai acontecer de qualquer maneira. Se você construir tudo dinamicamente você vai matar o desempenho e consomem enormes quantidades de memória para médias e grandes apps. Além disso, se você fizer o que eu estou sugerindo, o botão Voltar vai trabalhar muito, então irá procurar mecanismo de indexação etc.

Os outros comentaristas também teve algumas boas sugestões. A regra de uso do polegar i é criar páginas como se você estivesse fazendo uma página web padrão. Então esculpir as peças que precisam ser dinâmico. Substituí-los com elementos que têm IDs e, em seguida, usar RootPanel.get( id ).add( widget ) para preencher as áreas em.

armadilhas que nós funcionamos em:

  • Enquanto você pode obter um lote de milhagem de usar algo como GWT EXT, a qualquer momento você usar esse tipo de fino verniz em cima de uma biblioteca JavaScript, você perde a capacidade de depuração. Mais de uma vez eu bati minha cabeça na mesa, porque não posso inspecionar (dentro da minha depurador IntelliJ) o que está acontecendo na classe tabela GWT EXT ... Tudo o que você pode ver é que é um JavaScriptObject. Isso torna muito difícil descobrir o que está errado ido ...

  • Não ter alguém em sua equipe que sabe CSS. Da minha experiência, ele não importa que a pessoa não era especialista ... É o suficiente que ele tem um bom conhecimento de trabalho, e conhece os termos certos para o Google quando necessário.

  • Depuração entre os navegadores. Fique de olho no fora do processo Modo Hospedado [ 1 ] [ 2 ] [ 3 ], esperamos que vem em 1,6 GWT ... Por enquanto, você só tem que fazer as coisas bem com modo hospedado, em seguida, use o botão "Compile / Browse", onde você pode jogar com outros navegadores. Para mim, trabalhar no Windows, isso significa que eu posso ver meu trabalho no FireFox, e usar o Firebug para ajudar a Tweak e fazer as coisas melhor.

  • IE6. É incrível o quão diferente IE 6 tornará as coisas. Tomei a abordagem de aplicar um estilo para o mais externo "janela" de acordo com o navegador para que eu possa ter regras CSS como:

    .my-style { /* stuff that works most everywhere */ }
    
    .msie6 .my-style { /* "override" so that styles work on IE 6 */ }
    

Finalmente, certifique-se de usar um editor que ajuda você. Eu uso IntelliJ - lotes Tem de smarts GWT. Por exemplo, se eu tentar usar uma classe que não é tratado pela emulação JRE, que me permite saber; se eu especificar um estilo para um widget, e eu não ter definido esse estilo ainda, o código obtém o Little Red squiggly ... Ou, ao olhar para o CSS, ele vai me dizer quando eu tiver especificado atributos conflitantes em um regra única. (Eu não tentei ainda, mas eu entendo que a versão 8 tem suporte ainda melhor GWT, como manter os e "assíncronos" interfaces RPC "locais" e implementações em sincronia.)

GWT 2.0, que é suposto para sair em algum momento nos próximos meses, resolve muitas das questões discutidas.

  • Criar layouts usando um html / xml como a sintaxe
  • Script Carregamento dinâmico - apenas os JS essenciais será baixado inicialmente. O restante será descarregado conforme necessário
  • Modo no navegador hospedado - Isso pode cuidar dos problemas de velocidade modo hospedados discutiu, entre outros benefícios
  • "otimizações do compilador" - Faster compilação, espero

GWT 2.0 visualização de vídeo no Google I / O

Não "incapaz de ser vencido", mas um pouco de dor para algo básico.

Data manipulação:

GWT usa o java.util.Date obsoleto que pode levar a um comportamento inesperado quando se lida com datas no lado do cliente. java.util.Calendar não é suportado pelo GWT. Mais informações aqui .

exemplos problema relacionado:

Vou acrescentar alguns pontos aos já mencionados:

  • Ligação de dados / validação. O GWT não tem um suporte de ligação de dados / validação fora da caixa, embora existam alguns projectos nesta área começando a surgir. Você vai encontrar-se escrever um monte de isto:
TextField fname, faddress;
...
fname.setText(person.getName());
faddress.setText(person.getAddress());
...
  • preguiçoso carregamento. Desde GWT é no lado do cliente, o carregamento lento não é realmente uma opção. Você vai ter que projetar seus RPCs e objetos de domínio com cuidado, a fim de
    • enviar todos os seus dados de objeto que é necessário
    • Evite ansioso buscar todos os seus dados
    • Você terá também para se certificar de que você não vai enviar proxies / objetos não serializáveis. hibernate4gwt pode ajudá-lo com esses pontos.
  • projeto
  • UI. É mais difícil de visualizar uma interface em Java (painéis, botões, etc.) do que em html.
  • apoio
  • Histórico. O GWT é fornecido com um subsistema de História, nem enviar com qualquer subsistema de urls agradável ou bookmarking statefull. Você vai ter que rolar o seu próprio (embora ele tem suporte para tokens de história, que é um começo). Isso acontece com todos AJAX toolkits AFAIK.

IMHO, GWT está faltando um quadro que tem fora da caixa suporte para todas as questões mencionadas neste 'rosca'.

Eu estou trabalhando em um projeto agora que usos EXT GWT (GXT) não deve ser confundido com o GWT EXT. Há uma diferença, EXT GWT é o que é realmente produzido pela empresa que escreveu ExtJS biblioteca javascript. GWT EXT é um wrapper GWT em torno da biblioteca ExtJS. GXT é nativo GWT.

De qualquer forma, GXT ainda é um pouco imaturo e carece de uma comunidade sólida que me sinto GWT EXT tem. No entanto, o futuro é com GXT, como é nativa GWT e realmente desenvolvido pela empresa que fez ExtJS. GWT EXT é um pouco aleijado como a licença alterada na biblioteca ExtJS, retardando assim o desenvolvimento do GWT EXT.

No geral, eu acho que GWT / GXT é uma boa solução para o desenvolvimento de uma aplicação web. Na verdade, eu gosto bastante modo hospedado para o desenvolvimento, isso torna as coisas rápido e fácil. Você também terá a vantagem de ser capaz de depurar o seu código também. testes unitários com JUnit é bastante sólido também. Eu ainda não vi uma grande estrutura de teste de unidade de JavaScript que eu sentia era maduro o suficiente para testar um aplicativo corporativo.

Para mais informações sobre GWT EXT: http://gwt-ext.com/

Para mais informações sobre EXT GWT (GXT): http://extjs.com/products/gxt/

principais armadilhas

Não que eu não tenha sido capaz de superar facilmente. Use modo hospedado pesadamente. Como você está usando GWT-ext você quase nunca precisa tocar CSS-se menos que você queira ajustar o fora do olhar do caixa.

A minha recomendação é usar um GWT "nativo" Widget de mais de uma biblioteca onde eles estão perto em recursos.

Re motor de pesquisa indexação: sim, o site não terá URLs navegáveis ??normalmente (a menos que você está apenas adicionando widgets para elementos de um web site regular). Você pode fazer história back / funcionalidade frente embora.

Eu costumava GWT e GWT-ext juntos em um projeto há um tempo atrás. Achei a experiência muito suave como desenvolvimento web vai, mas o meu conselho seria a seguinte:

Não misture widgets nativos do GWT com widgets EXT. É confuso como o inferno, já que geralmente os nomes são os mesmos (GWT.Button ou GWText.Button?)

Uma coisa que aconteceu para mim que realmente fez o código mais complexo do que eu gostaria, era que eu queria um painel que foi a) dinamicamente atualizável b) em cascata

GWT painéis nativas são dinâmicas, painéis Ext são em cascata. Solução? A GWT.VerticalPanel envolvendo uma GWTExt Painel ... Chaos. :)

Mas hey, ele funciona. ;)

Eu segundo o comentário de ykagano, a maior desvantagem é perder o V no MVC. Embora você pode separar a verdadeira classe ui do resto do seu código do lado do cliente, você não pode facilmente usar uma página HTML gerado por um gráfico / web designer. Isto significa que você precisa de um desenvolvedor para traduzir HTML em java.

Obter um editor WYSIWYG ui, você vai economizar muito tempo. Eu uso GWTDesigner.

A maior vantagem de GWT é ser capaz de esquecer questões cross browser. A sua não é 100%, mas leva quase toda a dor de distância. Combinado com o benefício de modo hospedado depuração (em oposição a Firebug que é excelente, mas não o mesmo que um depurador java) que dá ao desenvolvedor uma vantagem enorme na geração de aplicativos Ajax complexos.

Oh e seu rápido em tempo de execução, especialmente se você usar um filtro gzip.

Um pouco off-topic, mas o canal #gwt no IRC é muito útil, no caso de você ter um problema persistente.

GWT é bem simples e intuitiva.

Especialmente com o lançamento do UiBinder para permitir GWT widgets para ser definido em XML e depois codificado-behind em Java.

Então, se você tiver usado outras ferramentas Ajax ou Flash design, ou Silverlight, etc, GWT é muito fácil de aprender.

O grande obstáculo, se não armadilha, é GWT RPC. A mesma razão que você deseja usar GWT é por causa do GWT async RPC. Caso contrário, por que não confiar apenas em css para formatar sua página?

GWT RPC é esse elemento que permite que o servidor para dados de atualização no seu servidor sem ter que atualizar a página. Esta é uma exigência absoluta para páginas como o desempenho das ações de monitoramento (ou a dívida pública e nacional atual dos EUA ou o número de fetos abortados em todo o mundo pelo segundo).

GWT RPC preciso algum esforço para entender, mas dada algumas horas, ele deve vir tudo claro.

Acima disso, depois de colocar em algum esforço para aprender GWT RPC, você finalmente descobrir que você não pode usar JSPs como o componente de serviço para RPC, a menos que ... Eu tenho uma parte 8 (eu acho) série no meu blog sobre como usar JSP como o servicer GWT RPC. No entanto, desde que você não pediu respostas, mas apenas questões, vou desistir de anunciar o meu blog.

Então. Eu acredito muito que os piores obstáculos / armadilhas para usando GWT é descobrir como implantar corretamente GWT async RPC e como ativá-lo para usar servicers JSP.

Nós tivemos um tempo muito difícil se casar com o nosso GWT codebase com web templates HTML que chegamos a partir de um web designer (páginas estáticas HTML com ids específica div que queríamos GWT para gerenciar). Pelo menos para trás quando se utilizado, não conseguimos GWT para se integrar com partes de nosso site que não foram codificados em GWT. Tivemos que trabalhar, eventualmente, mas foi um grande corte.

  • O Async interface que você tem que escrever para cada interface de serviço se parece com algo que poderia ter sido gerados automaticamente pelo compilador GWT.
  • tempos de compilação tornar-se muito tempo para grandes projetos

Mas para um grande projeto Javascript é a melhor escolha

GWT 2.4 fixou muitas das questões acima mencionadas e uma grande biblioteca de widgets está saindo da Beta (Ext GWT 3.0.4 aka GXT), que é escrito completamente em GWT, não um invólucro de uma lib JS.

dor restante:

  • A falta de apoio seletor CSS3, você pode usar "literal ()" em alguns casos, para contorná-la.
  • falta de apoio para CSS3 e navegador moderno eventos como transitionEnd .
  • A falta de apoio da classe Calendário Java (muitos anos mais tarde).
  • A falta de apoio JUnit4 (5 anos e contando).
  • Falta de roteiro claro e calendário de lançamento da equipe do Google GWT.

Em relação GWT 2.4, Use Firefox quando a depuração GWT, é muito mais rápido, em seguida, usando o Chrome. E se você vai usando apenas firefox, considere colocar esta linha em seu project.gwt.xml arquivo

<set-property name="user.agent" value="gecko1_8" />

Além disso, Se você estiver usando eclipse, em seguida, adicione o seguinte em argumentos -> argumentos VM:

-Xmx512m XX: MaxPermSize = 1024m XX: PermSize = 1024m

Você pode dividir seu servidor e cliente, e use o seguinte sob argumentos -> argumentos do programa: -codeServerPort 9997 -startupUrl http: // yourserver / projeto -noserver

Além disso, para evitar atualizar seu servidor em cada mudança, use JRebel http: // zeroturnaround. com / blog / how-to-rock out-com-JRebel-and-google-web-toolkit-GWT / E aqui está uma demonstração ao vivo http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY

Um grande armadilha é que às vezes você precisa atribuir explicitamente um id para o que finalmente se torna um elemento HTML para ser capaz de usar determinados estilos CSS. Por exemplo: a GWT TabPanel só vai fazer: pairar sobre tabBarItems quando a barra de páginas do TabPanel foi atribuído um ID e você especificar a: hover em que elementId

.

Eu escrevi sobre algum outro desvantagens do GWT em outros lugares, mas eles já estão abrangidos pela rustyshelfs responder:)

.

Eu fiz um monte de trabalho em GWT recentemente, e este é wht eu tenho que dizer:

  1. CSS styling é complicado só às vezes, usar a ferramenta de desenvolvedor IE no IE e no Firefox Firebug para descobrir o que exatamente está acontecendo e você vai ter uma idéia clara do que precisa css que ser mudado
  2. Você pode usar truques para obter o Google para indexá-lo. Um site muito famoso é http://examples.roughian.com/ verificar suas classificações no Google. Um site muito menos famoso é www.salvin.in (não poderia resistir a mencionar que), eu otimizado para palavras : home page Salvin (pesquisa no google por estas três palavras)

Eu não sei muito sobre GWT-EXT, mas eu também sou da opinião de que não há necessidade de incluir bibliotecas de terceiros.

Boa sorte em sua decisão:)

A equipe GWT fazer um monte de grandes melhorias no ano passado liberando GWT 2.7. Uma grande fraqueza do GWT foi que compilação leva muito tempo no GWT 2.6 e abaixo. Esta é ido agora GWT não tem incremento de compilação que é super rápido e compila apenas as alterações.

GWT 2.7 agora tem ( Fonte ):

  • Incremental constrói agora apenas alguns segundos
  • mais compacto, SourceMaps mais precisos
  • Suporte GSS
  • JSInterop
  • Great desempenho JavaScript
  • Menor Código Tamanho

A melhor maneira de obter dados confiáveis ??são do gwt pesquisa. Um dos maiores problemas com o GWT tem sido sempre um longo tempo de compilação. Felizmente, ele está melhorando muito rapidamente por isso não vai ser um problema significativo no futuro próximo. Outra armadilha é que GWT é dramaticamente mais complicado, porque Java é uma linguagem mais complicada que resiste a maus codificadores cada passo do caminho. Além disso, a compilação adiciona uma camada. Por exemplo, js interoperabilidade requer um pouco clichê. A questão fundamental é que GWT não foi projetado para ser simples. Ele foi projetado desde o início para aplicativos extremamente complicado web e toda a comunidade de forma consistente prioriza, o desempenho, a qualidade do código, arquitetura etc. sobre fácil de codificação.
Lembre-se que você pode usar js em GWT em qualquer ponto por isso, se você está lutando com GWT considerar o uso de js. No final do dia GWT é js assim que você pode fazer qualquer coisa em GWT que você pode em js. Na verdade, a maioria dos projetos GWT usar js. O problema é que GWT é drasticamente mais complicado. No entanto, é por vezes, vale a complexidade extra.

É importante notar que o GWT 3.0 trará grandes melhorias.

Re-usando objetos do serviço RPC.
Isso faz com que as condições de corrida com sintomas que se parecem com o enforcamento aplicativo.

Armadilhas Corri para 1. comportamento diferente em modo superdev. Por exemplo. Someclass.class.getName () funciona absolutamente bem no modo Superdev e retorna o nome totalmente qualificado da classe. No modo produtivo isso não funciona.

  1. addWidget (widget) chamará do widget removefromparent ()

GWT é uma obra-prima da tecnologia. Ele une a programação cliente e servidor tornando-se uma aplicação coerente - o software maneira foi escrito antes "camadas", e a forma como deve ser escrito. Ele elimina diferentes conjuntos de habilidades, a falta de comunicação entre os membros da equipe, e geralmente toda a fase de Web Design: tanto a artística e de programação. E isso é o mais próximo que você deseja obter para por exemplo móvel desenvolvimento Android. Na verdade GWT foi projetado para gerar diferentes interfaces nativas, não apenas HTML. Embora exige enorme disciplina para garantir essa dissociação -. Manter suas camadas internas apresentação agnóstico

O primeiro erro que você deve evitar, o que me levou quatro anos para perceber, está usando extensões de terceiros como EXT-GWT aka GXT e SmartGWT. É muito tentador para começar a usar seus widgets bonitas desktopish em vez de investir em seu próprio estilo, mas eu não posso dizer quantos problemas que tive com SmartGWT até que finalmente se cansou. Em suma, congela o núcleo GWT conjunto de recursos ao certo nível (muito desatualizado) e, em seguida, constrói em cima dela. Também tenha em mente, que cinzelados desktop olhar ea sensação parece bobo hoje em dia, para não mencionar o desempenho lento, toneladas de bugs e compatibilidade apresenta - especialmente em dispositivos móveis. Você quer ficar o mais próximo possível dos controles do navegador nativo, como possíveis dropdowns ou seja prestados como nativa

O conteúdo é licenciado no Creative Commons.

Se você encontrar violações de direitos autorais, poderá entrar em contato conosco em info@generacodice.com para solicitar a remoção do conteúdo.

scroll top