Mi trabajo principal del día es hacer aplicaciones HTML. Con eso me refiero a las aplicaciones de tipo CRUD utilizadas internamente con muchas vistas de cuadrícula editables, cuadros de texto, menús desplegables, etc. Actualmente estamos utilizando formularios web ASP.NET, que hacen el trabajo, pero el rendimiento es en su mayoría pésimo, y con frecuencia usted tienes que saltar a través de aros para obtener lo que necesitas. Aros que se cuelgan del techo y se incendian.
Así que me pregunto si tal vez sería una buena idea mover toda la interfaz de usuario al lado de JavaScript. Desarrolle un sólido conjunto de controles reutilizables que se adapten específicamente a nuestras necesidades y solo intercambie datos con el servidor. Sí, me gusta el paradigma de "control" (también conocido como "widget"), es bastante adecuado para tales aplicaciones. Entonces, en el lado del servidor, todavía tendríamos un diseño básico similar a nuestro marcado ASPX actual, pero que luego se enviaría al cliente solo una vez, y la parte de Javascript se encargaría de todas las actualizaciones posteriores de la interfaz de usuario.
El problema es que nunca he hecho esto antes, y nunca he visto a nadie hacer esto tampoco, así que no sé cuáles serían los problemas. En particular, estoy preocupado por:
- Rendimiento aún. La evaluación comparativa muestra que actualmente el retraso principal está en el lado del cliente, cuando el navegador intenta volver a representar la mayor parte de la página después de una actualización AJAX. El marcado generado por las formas web ASP.NET le da un nuevo significado a la palabra "web", y los ricos controles Devexpress agregan su propia capa de complejidad de Javascript. ¿Pero sería más rápido recalcular todos los cambios necesarios en el lado de Javascript y luego actualizar solo lo que necesita ser actualizado? Tenga en cuenta que estoy hablando de formularios que tienen varias vistas de cuadrícula editables, muchos cuadros de texto, muchos menús desplegables cada uno con medio millón de elementos filtrables, etc.
- Facilidad de desarrollo . Habría mucho más Javascript ahora, y probablemente se mezclaría con el marcado HTML de la página. Eso o algún tipo de nuevo motor de visualización tendría que ser producido. Intellisense para Javascript también es mucho peor que para el código C #, y debido a la naturaleza dinámica de Javascript no se puede esperar que mejore mucho. Las prácticas de codificación pueden mejorarlo un poco, pero no mucho. Además, la mayoría de nuestros desarrolladores son principalmente desarrolladores de C #, por lo que habrá cierta curva de aprendizaje y errores iniciales.
- Seguridad . Se deberán realizar muchas comprobaciones de seguridad dos veces (del lado del servidor y del lado de la interfaz de usuario), y el lado del servidor de procesamiento de datos tendrá que incluir muchas más. Actualmente, si configura un cuadro de texto para que sea de solo lectura en el lado del servidor, puede depender de que su valor no cambie a través del viaje de ida y vuelta del cliente. El marco ya tiene suficiente código para garantizar eso (a través del cifrado de estado de vista). Con el enfoque de solo datos, se vuelve más difícil, ya que debe verificar todo manualmente. Por otro lado, tal vez los agujeros de seguridad sean más fáciles de detectar, ya que solo tendrá que preocuparse por los datos.
Con todo, ¿esto resolverá nuestros problemas o los empeorará? ¿Alguien ha intentado esto alguna vez y cuáles fueron los resultados? ¿Hay algún marco por ahí que ayude en este tipo de esfuerzo (aparte de jQuery y sus equivalentes morales)?
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.
Está describiendo exactamente qué es ASP.NET, lo que me dice que probablemente no lo esté utilizando correctamente. :) En sus aplicaciones ASP.NET, si coloca componentes dentro de los paneles de actualización, la biblioteca javascript ASP.NET realizará devoluciones de datos asíncronas en el lado del servidor y solo volverá a representar los componentes que especifique.