Meu trabalho principal do dia é fazer aplicativos HTML. Com isso, quero dizer aplicativos do tipo CRUD usados internamente com muitas visualizações de grade editáveis, caixas de texto, menus suspensos etc. Atualmente, estamos usando formulários da Web ASP.NET, que realizam o trabalho, mas o desempenho é geralmente sombrio e, com frequência, você tem que pular aros para conseguir o que você precisa. Aros pendurados no teto e incendiados.
Então, eu estou querendo saber se talvez seria uma boa idéia mover toda a interface do usuário para o lado do JavaScript. Desenvolva um forte conjunto de controles reutilizáveis, adaptados especificamente às nossas necessidades, e troque apenas dados com o servidor. Sim, eu gosto do paradigma "controle" (também conhecido como "widget"), que é bastante adequado para esses aplicativos. Portanto, no lado do servidor, ainda teríamos um layout básico semelhante à nossa marcação ASPX atual, mas isso seria enviado ao cliente apenas uma vez, e a parte Javascript cuidaria de todas as atualizações subsequentes da interface do usuário.
O problema é que nunca fiz isso antes e nunca vi ninguém fazendo isso, então não sei quais seriam os problemas. Em particular, estou preocupado com:
- Desempenho ainda. O benchmarking mostra que atualmente o principal atraso está no lado do cliente, quando o navegador tenta renderizar novamente a maior parte da página após uma atualização do AJAX. A marcação gerada pelos formulários da Web do ASP.NET dá um novo significado à palavra "web", e os ricos controles Devexpress adicionam sua própria camada de complexidade Javascript. Mas seria mais rápido recalcular todas as alterações necessárias no lado do Javascript e atualizar apenas o que precisa ser atualizado? Observe que estou falando de formulários que têm várias visualizações de grade editáveis, muitas caixas de texto, muitas caixas suspensas, cada uma com itens filtráveis de meio zilhão, etc.
- Facilidade de desenvolvimento . Agora haveria muito mais Javascript, e provavelmente misturaria com a marcação HTML da página. Esse ou algum tipo de novo mecanismo de visualização teria que ser produzido. O Intellisense para Javascript também é muito pior do que para o código C # e, devido à natureza dinâmica do Javascript, não se pode esperar que fique muito melhor. As práticas de codificação podem melhorar um pouco, mas não muito. Além disso, a maioria dos nossos desenvolvedores é primariamente desenvolvedores de C #, portanto haverá alguma curva de aprendizado e erros iniciais.
- Segurança . Muitas verificações de segurança terão que ser feitas duas vezes (no servidor e na interface do usuário), e o servidor de processamento de dados precisará incluir muito mais. Atualmente, se você definir uma caixa de texto para ser somente leitura no lado do servidor, poderá depender de seu valor não ser alterado pela ida e volta do cliente. A estrutura já possui código suficiente para garantir isso (por meio da criptografia do viewstate). Com a abordagem somente de dados, fica mais difícil, porque você precisa verificar tudo manualmente. Por outro lado, talvez seja mais fácil detectar falhas de segurança, porque você terá apenas dados para se preocupar.
Em suma, isso resolverá nossos problemas ou os piorará? Alguém já tentou isso e quais foram os resultados? Existe alguma estrutura por aí que ajude nesse tipo de empreendimento (jQuery e equivalentes morais à parte)?
So on the server side we would still have a basic layout simliar to our current ASPX markup, but that then would get sent to the client only once, and the Javascript part would take care of all the subsequent UI updates.
Você está descrevendo exatamente o que é o ASP.NET, o que indica que você provavelmente não o está usando corretamente. :) Nos aplicativos ASP.NET, se você colocar componentes nos painéis de atualização, a biblioteca javascript do ASP.NET executará postagens assíncronas no lado do servidor e somente renderizará novamente os componentes especificados por você.