Knockout.js, más conocido como KnockoutJS, Knockout, o simplemente KO, es una biblioteca JavaScript independiente de código abierto basada en el patrón Model-View-ViewModel (MVVM) que ayuda a los desarrolladores a crear sitios web modernos y dinámicos. Steve Sanderson, un desarrollador/arquitecto de Microsoft, lo creó el 5 de julio de 2010. Puesto que implementa el patrón MVVM, Knockout establece un rol distinto entre los datos mostrados (interfaz de usuario), componentes de vista (modelos de representación JavaScript) y datos de dominio (datos almacenados) mediante la definición clara de una capa de código que administra el comportamiento entre los componentes de vista. Esto realmente destaca las capacidades de JavaScript para administrar eventos nativos, ya que simplifica la forma en que los componentes interactúan entre sí.

Algunas de las características más relevantes que Knockout tiene para ofrecer son el enlace declarativo, la actualización automática de la interfaz de usuario, el seguimiento de dependencias, el uso de plantillas y la extensibilidad. KO vincula los modelos al DOM a través del atributo de enlace de datos, que ayuda a mostrar los datos de una manera más dinámica y a enriquecer la experiencia del usuario. Las actualizaciones automáticas ayudan a actualizar el DOM del explorador web si se ha producido un cambio en los datos del modelo sin necesidad de escribir código adicional. El seguimiento de dependencias de Knockout supervisa y actualiza automáticamente los atributos KO aprovechando las funciones de biblioteca de Knockout. Además, las características de plantillas de Knockout ayudan a crear interfaces de usuario robustas de una manera sencilla y conveniente, lo que puede ayudar a extender los comportamientos personalizados al final. Knockout es compatible con todos los principales navegadores web como Google Chrome y Firefox.

 

Problemas comunes de rendimiento en Knockout

Knockout 2.0 introdujo una característica ordenada llamada enlace de flujo de control, que agrega una capa de control al enlace de plantilla. La capa que utiliza adopta componentes secundarios como plantilla y los vuelve a representar cada vez que se activa. Sin embargo, los desarrolladores deben ser conscientes de no explotar este recurso excesivamente y sin planificación.

Normalmente, los desarrolladores de Knockout se ejecutan en componentes que se representan con frecuencia mediante el uso de los enlaces
if
y
with
de forma inapropiada. Un escenario común en el que esto puede suceder es cuando desea mostrar determinados componentes solo cuando se rellena una matriz observable mediante el enlace if.

Una implementación como tal depende de los elementos de la matriz observable, lo que hace que Knockout revise y actualice cada vez que se produce un cambio. De forma similar, el
enlace with
sirve muy bien para administrar objetos anidados. Sin embargo, en lugar de enlazar sus elementos con los datos entrantes siempre que hay un cambio, vuelve a representar secciones enteras con nuevos elementos. Esto podría ser una operación costosa si los componentes son complejos y tienen eventos adjuntos externos a Knockout.

 

Herramientas de rendimiento para aumentar el tiempo de carga

Desafortunadamente, no hay una herramienta de rendimiento personalizada en la tienda de extensiones de Chrome para KnockoutJS, capaz de superponer estadísticas de rendimiento a través de la interfaz de usuario. Por lo tanto, los desarrolladores de Knockout tienen que usar otros recursos para visualizar e identificar posibles problemas de rendimiento.

 

Herramientas de desarrollo de Chrome y faro

Chrome Development Tools es un conjunto de herramientas de desarrollo web que pueden ayudar a los desarrolladores con todo tipo de problemas de diagnóstico web y depuración. La ventaja es que las herramientas se construyen dentro del navegador, ayudando a los desarrolladores a encontrar y corregir errores rápidamente. Con una extensión incluida para aplicaciones Knockout, Chrome DevTools puede ayudar a mostrar cómo se cargan y renderizan elementos o componentes específicos como lo experimentaría un usuario. Los desarrolladores pueden grabar una sesión de su aplicación para medir mejor dónde pueden estar los cuellos de botella de rendimiento y los resultados se muestran en una barra lateral independiente. Esto es especialmente importante cuando se intenta diagnosticar tiempos de retraso dentro de modelos de vista grandes.

Lighthouse es una herramienta de código abierto dentro del conjunto de Chrome DevTools que ayuda a diagnosticar y corregir algunos de los aspectos de rendimiento de las páginas web y aplicaciones, como la accesibilidad y las mejoras SEO para sitios web. Lighthouse también tiene la capacidad de probar los PDA (aplicaciones web progresivas) que se han creado con KnockoutJS, por ejemplo. La herramienta funciona probando la velocidad de carga de la página y, a continuación, informa con las correcciones sugeridas. Un par de las métricas principales son el índice de velocidad perceptual, que se define por el tiempo (en milisegundos) que se tarda en mostrar las secciones visibles de una página web, y la latencia de entrada estimada, que al igual que suena, es el tiempo estimado que tarda una página web o aplicación en responder a las entradas de un usuario mientras se carga la página o la aplicación.

 

Optimización del rendimiento de las aplicaciones Knockout con LoadView

LoadView utiliza EveryStep Web Recorder, una herramienta de scripting de punto y clic que replica las interacciones del lado cliente de sitios web y aplicaciones web para evaluar escenarios complejos. Esta potente herramienta de scripting es capaz de simular operaciones complejas del usuario como clics del ratón, hovers y movimientos, verificación de imágenes y texto, selecciones de menús y mucho más. A continuación, los scripts se pueden cargar en LoadView, donde el usuario puede seleccionar entre varios escenarios de prueba, ubicaciones geográficas y muchas otras características.

Sitio de KnockoutJS

 

Además de la herramienta de secuencias de comandos point y click, los desarrolladores pueden editar manualmente los scripts en C-, si es necesario. Esto les permite crear scripts que replican cualquier escenario de usuario repetitivo o dinámico, como que alguien inicie sesión en una cuenta, busque un producto o cualquier otra ruta de usuario crítica y, a continuación, cargue esas acciones para ver cómo se realizan cuando se aplica la carga. Esto permite a los desarrolladores detectar cualquier elemento que pueda estar causando tiempos de retraso no intencionales o los que no son visibles para un usuario típico. Por ejemplo, puede haber interacciones con un elemento de terceros que podrían hacer que el tiempo de respuesta general aumente. Para el usuario, puede que ni siquiera se dé cuenta, pero cualquier mejora menor que puede ayudar a disminuir el tiempo de carga es una buena.

 

waterfall chart

 

Conclusión: Cargar aplicaciones de prueba escritas en Knockout.js

Knockout.js no recibe suficiente foco, como sus competidores. Sin embargo, su naturaleza ligera y su facilidad de flujo de datos entre capas ayudan a los desarrolladores a crear aplicaciones más rápido y con una base sólida. A medida que aumenta y crece la necesidad de las aplicaciones web, no puede confiar únicamente en el marco de trabajo Knockout para garantizar un rendimiento coherente. Los desarrolladores deben asegurarse de que sus aplicaciones pueden funcionar con grandes picos de tráfico, y una herramienta como EveryStep Web Recorder combinada con la solución LoadView debe usarse para diagnosticar los cuellos de botella de rendimiento de forma eficaz y escenarios donde las tareas ocultas podrían afectar al tiempo de respuesta de la aplicación y a la experiencia del usuario.

¡Inicie la prueba gratuita de LoadView y obtenga $20 en créditos de prueba de carga para comenzar a probar su aplicación Knockout! O si desea un seguimiento completo de la plataforma LoadView, regístrese para obtener una demostración en vivo con uno de nuestros ingenieros de rendimiento. Le llevarán paso a paso a través de los procesos de scripting, configuración y pruebas, así como responderá a cualquier pregunta de prueba de rendimiento que pueda tener.