¿Qué estrategias ha empleado para mejorar el rendimiento de las aplicaciones web?[cerrado]

StackOverflow https://stackoverflow.com/questions/22704

Pregunta

  • ¿Alguna experiencia personal en la superación de obstáculos de rendimiento de aplicaciones web?
  • ¿Alguna estrategia recomendada para mejorar el rendimiento de una aplicación web basada en datos?

Mi equipo de desarrollo trabaja en una aplicación web (informes JSP, HTML, JavaScript) que utiliza una base de datos Oracle (PL/SQL).La funcionalidad clave que ofrece la aplicación es la generación de informes, donde un usuario puede obtener archivos PDF de informes de alto nivel y profundizar en niveles inferiores de detalles de respaldo.

A medida que el número de registros detallados de respaldo ha aumentado a millones, el rendimiento del sistema se ha degradado significativamente.Según nuestro análisis actual de las métricas, el cuello de botella parece estar en la lógica que afecta a la base de datos y al rendimiento de la base de datos.Actualmente se está explorando cambiar el modelo de base de datos y rehacer parte de la lógica del lado del servidor.

Particionar, indexar, explicar planes y ejecutar estadísticas son cosas que se han hecho en el lado de la base de datos para intentar ayudar a mejorar el rendimiento.Si bien han ayudado, no han resuelto el problema satisfactoriamente.La parte más difícil al analizar los datos de rendimiento es que la base de datos y los servidores web son administrados de forma remota por una parte diferente de la organización de TI, por lo que los desarrolladores no tienen acceso completo y regular para ver qué sucede (especialmente en el entorno de producción, que no se refleja exactamente en ningún otro entorno de desarrollo/prueba).

¿Fue útil?

Solución

Si bien es posible que mi respuesta no contenga ningún paso concreto para ayudar, siempre empiezo por aquí.

Lo primero que haría es tratar de descartar todas sus suposiciones sobre cuál es el problema y tomar medidas para instalar métricas en todos los lugares posibles.Deja que las métricas te guíen en lugar de tu intuición.He perseguido muchos, muchos, muchos conejos blancos siguiendo una corazonada... y me decepcionaron más veces de las que acertaron.

Otros consejos

¿Has comprobado esto?

Mejores prácticas para hacer que las páginas web sean rápidas del equipo de rendimiento excepcional de Yahoo!

Si realmente tiene problemas en el backend, esto no le ayudará.Pero utilizamos sus consejos con gran éxito para hacer que nuestro sitio sea más rápido, y todavía hay más por hacer.

Utilice también el complemento YSlow para Firebug.Es posible que se sorprenda al ver dónde se está consumiendo el tiempo real.

¿Ha considerado crear sus datos con anticipación?En otras palabras, ¿hay grupos de datos que se solicitan una y otra vez?Si es así, tenlos listos antes de que el usuario lo solicite.No me refiero exactamente al almacenamiento en caché, pero creo que es parte de la ecuación.

Podría valer la pena dar un paso atrás en el código y examinar los patrones de uso del sistema.Por ejemplo, si les muestra a las personas información mensual sobre el inventario o las ventas, ¿la ven solo al final del mes?Si es así, simplemente cree los datos el último día y guárdelos.Si lo miran a diario, tal vez intenten generar los resultados de cada día anterior y almacenarlos y evitar el cálculo.Supongo que al final te estoy empujando a una Programación dinámica solución;Si sabes una respuesta, no la vuelvas a resolver.

Como dice Webjedi, las métricas son tus amigas.

Mire también su pila y vea dónde hay oportunidades de almacenamiento en caché, ¡luego emplee sin piedad siempre que sea posible!

Como dije en otra pregunta:

Utilice un perfilador. Sí, cuestan dinero y su uso puede resultar un poco incómodo en ocasiones, pero proporcionan mucha más evidencia real que conjeturas.

Los seres humanos son universalmente malos a la hora de adivinar dónde están los cuellos de botella en el rendimiento.Simplemente parece ser algo que nuestros cerebros no están preparados para hacerlo muy bien.Puede parecer obvio, es posible que tengas grandes ideas sobre cuál es el problema, pero a menudo resulta que el mundo real hace algo diferente.Y optimizar la parte incorrecta del código significa, en el mejor de los casos, mucho trabajo para obtener un beneficio mínimo.Más a menudo hace que las cosas sean más lentas y, a veces, las estropea por completo.Por lo tanto, antes de realizar cambios con fines de optimización, siempre debe tener evidencia real de un generador de perfiles u otra herramienta precisa.

No todos los perfiladores cuestan dinero (extra).Para .Net, estoy usando con éxito una versión antigua de NProf (actualmente abandonada pero todavía funciona para mí) para crear perfiles de mis aplicaciones ASP.Net.Para SQL Server, el generador de perfiles de consultas forma parte del paquete.También está el CLF Profiler de MS, pero nunca he podido hacerlo funcionar correctamente.

Dicho esto, los perfiladores son definitivamente el camino a seguir.De esa manera, podrá ver dónde pasa la mayor parte del tiempo su programa y no centrarse en cosas que cree que son lentas.Además, significa que no es necesario escribir nada en el código para registrar las métricas.

Como insinué al principio, existen diferentes tipos de perfiladores.Los tres que encuentro más útiles son los perfiladores de aplicaciones, que te permiten ver en qué funciones pasas la mayor parte de tu tiempo.El segundo son los perfiladores SQL que le permiten ver cuánto tiempo tardan en ejecutarse sus consultas.El tercero son los perfiladores de memoria, que ayudan a mostrarle qué tipo de objetos están utilizando su memoria.Los tres son realmente útiles y, aunque no los usarás todos los días, las veces que los uses te ahorrarán muchos dolores de cabeza.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top