Construye una Interfaz de Usuario que Aprende - Prefetching Inteligente con React y TensorFlow.js

Rate this content
Bookmark

Cómo construir una Interfaz de Usuario que APRENDA? Tener la capacidad de aprender y predecir el comportamiento de los usuarios tiene muchas aplicaciones poderosas, una de ellas es la oportunidad de mejorar el rendimiento de la interfaz de usuario al precargar código y recursos antes de que el usuario los alcance. En esta charla, describiremos una implementación de alto nivel de un prefetcher inteligente, utilizando ReactJS y TensorFlow.js. Utilizamos redes neuronales para aprender el comportamiento del usuario y aprovechamos la API de carga diferida de React para precargar componentes según las predicciones. Existe la oportunidad para los desarrolladores frontend de explorar la poderosa combinación de UI e IA.

17 min
14 May, 2021

Video Summary and Transcription

La charla de hoy explora el prefetching inteligente en React, incluyendo la división de código, la carga diferida y el prefetching para mejorar el rendimiento. Se discute el uso de redes neuronales para la predicción de secuencias y el entrenamiento con el comportamiento real del usuario. Se utiliza el contexto de React para vincular los controladores de la interfaz de usuario con las predicciones y el prefetching, lo que permite la importación de contenido dinámico y una mejor experiencia de usuario. Se muestra la combinación de IA y desarrollo de UI en este proyecto personal.

Available in English

1. Introducción a la Prefetching Inteligente en React

Short description:

La charla de hoy trata sobre el prefetching inteligente en React. Discutimos los problemas con el tamaño del paquete y los tiempos de carga en aplicaciones de una sola página y cómo React code splitting puede ayudar. También exploramos el concepto de prefetching de componentes y el uso de lazy loading para rutas completas para mejorar el rendimiento. Además, profundizamos en la cuestión de predecir el comportamiento del usuario y cómo el aprendizaje supervisado, específicamente las redes neuronales, pueden ser utilizadas para la predicción de secuencias.

Hola a todos y bienvenidos a esta sesión. Mi nombre es Eli Ranatan, y estoy feliz de estar aquí en la Cumbre de React. Hoy hablaré sobre el prefetching inteligente en React. Así que comenzamos hablando sobre el prefetching de código, luego mostramos cómo podemos predecir el comportamiento del usuario utilizando el aprendizaje automático, y finalmente combinamos esas soluciones para formar aplicaciones React rápidas. Así que quiero empezar hablando sobre el contexto. Por lo general, estamos construyendo esas increíbles aplicaciones de una sola página y eventualmente nos encontramos con este enorme tamaño de paquete que eventualmente causa problemas en los tiempos de carga, la lentitud y potencialmente perjudica la experiencia del usuario. Entonces, ¿qué podemos hacer? Podemos usar la API de code splitting de React para importar componentes según la demanda. Así que en lugar de simplemente importar el componente de gráfico, aumentando el tamaño de mi paquete, estoy cargando el componente de gráfico de forma perezosa y la carga real de código solo ocurrirá cuando lo rendericemos. Pero eso no resuelve completamente el problema, ¿verdad? Porque simplemente estamos desplazando el tiempo de carga a otro lugar. Cuando el usuario realmente quiera renderizar este componente de gráfico, entonces tendrá que esperar a que ocurra la carga, y eso puede afectar el tiempo de carga y perjudicar la experiencia del usuario. ¿Qué tal esta idea loca? Podríamos prefetch, podríamos romper este compromiso prefetching el componente de gráfico. Así que usando el tiempo en que el usuario solo está mirando la pantalla y antes de que llegue a ella, podríamos preparar este contenido, podríamos usar la función de importación dinámica para importar dinámicamente el componente y luego anular esta variable. Ahora, podríamos hacer eso si tuviéramos alguna indicación o suposición educada sobre el próximo movimiento del usuario. Podríamos usar este truco para aumentar aún más el rendimiento de nuestras aplicaciones si lo estamos haciendo para rutas completas. Si tengo esta navegación entre paneles de control y productos, podría usar una carga perezosa para cargar perezosamente esas rutas. Y luego, condicionalmente, si tengo alguna indicación sobre el próximo movimiento del usuario, podría importar dinámicamente esas rutas, ahorrando mucho tiempo. Eso nos lleva a la pregunta, y esa es una pregunta muy interesante, de cómo podemos predecir el próximo movimiento del usuario. Así que analicemos esta pregunta por un momento. Tenemos esta complicada aplicación de una sola página que está compuesta por muchos componentes diferentes. Y podemos enumerar esos diferentes desencadenantes, esas acciones, enlaces, botones con los que el usuario puede interactuar, o al menos aquellos que son interesantes en el sentido de que provocarían la renderización de otros componentes grandes. Ahora podríamos realizar un seguimiento del comportamiento del usuario y realizar esta secuencia ordenada de interacciones que el usuario está realizando. Y la pregunta es cómo podemos basarnos en esta secuencia cómo podemos predecir el próximo elemento en esa secuencia. Lo que necesitamos es este mecanismo inteligente que reciba una secuencia y devuelva la predicción o estimación del próximo elemento en esa secuencia. Y en el aprendizaje automático, a este problema lo llamamos predicción de secuencia. Podemos usar el aprendizaje supervisado, específicamente una red neuronal, para descubrir esta estimación. Una red neuronal recibirá una codificación de esa secuencia como una serie de números. Cada número es una identificación de un cierto desencadenante y devuelve esta distribución de probabilidad en todos los desencadenantes posibles con los que el usuario puede interactuar. Cada salida representaría la probabilidad de que ese elemento correspondiente sea el próximo elemento en la secuencia. Así que esto es un aprendizaje supervisado y la red neuronal actúa como un aproximador de funciones. La función recibe una secuencia y devuelve una distribución de probabilidad.

2. Entrenamiento de Redes Neuronales con el Comportamiento del Usuario

Short description:

Utilizamos el comportamiento real del usuario como ejemplos para entrenar la red neuronal. Se utiliza la codificación one-hot para romper las correlaciones numéricas entre elementos. El tipo de red neuronal LSTM es crucial para las predicciones de secuencia. La biblioteca TensorFlow.js permite la implementación en el entorno del navegador. El comando predict proporciona predicciones de probabilidad para cada elemento. El entrenamiento de la red con el comando fit utilizando el comportamiento real del usuario como ejemplos puede llevar tiempo.

Ahora que tenemos esta salida, podríamos simplemente tomar el argumento máximo y derivar de eso el siguiente elemento de la interfaz de usuario con el que el usuario está a punto de interactuar. Por supuesto, esas predicciones no tendrán sentido a menos que entrenemos la red. En el aprendizaje supervisado, tenemos que proporcionar ejemplos a la red. La mejor fuente para esos ejemplos es el comportamiento real del usuario. Podríamos muestrear el comportamiento del usuario, tomar esas secuencias y alimentar la red neuronal con esos ejemplos, básicamente diciéndole a la red neuronal que este es el comportamiento real del usuario, por favor ajusta tus predicciones en consecuencia.

Me parece genial que estemos utilizando al usuario para entrenar la aplicación. Cuanto más use el usuario la aplicación, más se entrenará en consecuencia. Y cuando el usuario cambie su comportamiento con el tiempo, la aplicación puede adaptarse. Hablando específicamente de la implementación, este predictor se puede implementar como una red neuronal. Lo que estás viendo aquí es que la entrada de esa red neuronal será... Estamos utilizando la codificación one-hot en lugar de solo números puros. Y esto se debe a que queremos romper cualquier correlación numérica entre esos elementos. No tiene sentido decir que un panel de control es más pequeño que los productos, porque está representado por el número tres y no por el número 21. Así es como rompemos esta correlación.

Lo más importante en la arquitectura de tu red neuronal es que tenemos que usar este tipo de red LSTM. Este es el mejor tipo que puede soportar predicciones de secuencia. También es importante tener en cuenta que la capa de entrada está aquí. El número de unidades en la capa de entrada debe coincidir con la longitud de las secuencias con las que estamos trabajando, y el número de unidades en la capa de salida debe coincidir con el número... Todos los posibles desencadenantes con los que el usuario puede interactuar. Ahora, una vez que tenemos la salida de la red, podemos adjuntarla al elemento correspondiente en la experiencia del usuario y asumir que el usuario está a punto de hacer clic en este elemento.

En cuanto a la implementación, tenemos que implementar este mecanismo en algún lugar del entorno del navegador, y podemos hacerlo utilizando la biblioteca TensorFlow.js. Esta biblioteca se basa en WebGL y nos permite implementar algoritmos de aprendizaje automático dentro del entorno del navegador. Estamos utilizando el comando secuencial para apilar capas en la red una tras otra, y estamos especificando esta capa de tipo LSTM, especificando la forma de la entrada como una matriz de números binarios. Y finalmente, una vez que tenemos esta red, podemos usar el comando predict suministrando una secuencia y pidiendo que prediga la probabilidad para cada elemento. Esas predicciones no tendrán sentido a menos que entrenemos la red, como dijimos, y para la parte de entrenamiento, usaríamos el comando fit. Estamos suministrando este lote de secuencias y las etiquetas correlacionadas. Esas etiquetas representan elementos. Tomamos el comportamiento real del usuario y lo suministramos como ejemplos para el mecanismo de ajuste. El entrenamiento de la red puede llevar tiempo.

3. Vinculando Predicciones y Prefetching en React

Short description:

Para vincular las predicciones con el prefetching, envolvemos el botón de mostrar gráfico con un componente personalizado llamado enlace de predicción. Este componente se conecta a un contexto de React que encapsula la lógica de predicción. El controlador onPrediction se activa cuando una predicción coincide con el enlace de predicción. Otro contexto de React actúa como un bus de mensajes para el prefetching, permitiendo a los consumidores importar dinámicamente el contenido necesario. Toda la aplicación puede acceder al predictor a través de un proveedor de nivel superior.

Esa es una operación pesada. Y no queremos perturbar la experiencia del usuario. Por lo tanto, estamos utilizando el hecho de que el comando de ajuste es asíncrono. Y básicamente podemos hacerlo en segundo plano sin perturbar al usuario.

Ahora, el próximo desafío que debemos resolver aquí es cómo debemos vincular entre esas predicciones que estamos haciendo y el prefetching que discutimos anteriormente. Entonces, lo que queremos hacer es prefetching de contenido siempre que sepamos que el usuario está a punto de hacer clic en un determinado botón. Básicamente, haciendo que la aplicación sea más rápida y más rápida. Y cuanto más use el usuario la aplicación, más rápido se vuelve.

Tenemos este botón en algún lugar de la aplicación que se llama mostrar gráfico. Y podemos envolverlo con este componente personalizado que llamo enlace de predicción. Y este enlace de predicción estará conectado a un contexto de React. El propósito del contexto de React es suministrar este estado global que está disponible para toda la aplicación. Aquí estoy utilizando un contexto de React para encapsular toda la lógica de predicción. Por lo tanto, contendría toda la implementación de la red neuronal junto con el código de TensorFlow, etc. Y estará disponible en toda la aplicación. Por lo tanto, esos componentes de predicción pueden consultar al predictor para obtener la predicción actual con el próximo movimiento del usuario. Y pueden exponer este controlador onPrediction que se activaría al producirse una predicción asociada.

Ahora, este onPrediction, podríamos usar este disparador para comunicarnos con otro contexto de React, que es responsable del prefetching. Por lo tanto, básicamente actúa como un bus de mensajes que anuncia que se debe prefetching el contenido asociado con este botón. Ahora, cualquier consumidor interesado en esta información puede usarla y utilizar importaciones dinámicas para importar dinámicamente el contenido necesario. Por lo tanto, lo que estamos haciendo aquí es vincular las predicciones y el prefetching utilizando dos contextos de React.

Ahora veamos cómo funciona en el código. Por lo tanto, tenemos este botón en algún lugar de la aplicación, este mostrar gráfico. Podemos envolverlo con un componente personalizado de enlace de predicción. Ahora, este enlace de predicción expone el disparador de predicción. Siempre que haya una predicción para ese gráfico clave, entonces podríamos hacer algo con esta predicción. Echemos un vistazo más de cerca a cómo se implementa este enlace de predicción. Estamos utilizando el gancho use context para conectarnos al contexto del predictor, y luego estamos consultando este contexto del predictor para obtener la predicción actual. Si la predicción actual coincide con este enlace de predicción específico, entonces activamos el controlador de onPrediction. Ahora, para tener el predictor disponible en toda la aplicación, tenemos que envolverlo con este proveedor de nivel superior.

4. Aprovechando la Integración de IA y UI

Short description:

Ahora que tenemos el enlace de predicción, podemos prefetching el contenido necesario asociado con el botón. También podemos importar dinámicamente rutas basadas en el contexto de prefetcher. Utilizamos React code splitting, lazy loading y prefetching para mejorar el rendimiento. Además, demostramos predecir el comportamiento del usuario utilizando un predictor de clics basado en aprendizaje automático en el entorno del navegador con TensorFlow.js. Se utilizó el contexto de React para vincular los controladores de UI y las predicciones, y otro contexto vinculó las predicciones y el prefetching. Este proyecto personal muestra la combinación de IA y UI utilizando el aprendizaje automático para el desarrollo de UI.

Ahora que tenemos este enlace de predicción, podemos usarlo para llamar al contexto de prefetcher utilizando este disparador. Básicamente, estamos diciendo, por favor prefetching el contenido necesario que está asociado con este botón.

Ahora volviendo al componente que realmente obtuvo el código y renderizó el contenido necesario, podríamos usar nuevamente el gancho use context para conectarnos al contexto de prefetcher, consultar ese contexto y básicamente preguntar si el componente que debemos prefetching es el componente de gráfico. Y si es así, estamos utilizando las importaciones dinámicas para hacerlo.

Y, por supuesto, podemos hacer lo mismo con rutas completas. Por lo tanto, si tenemos esta ruta entre el panel de control y los productos, podríamos importar dinámicamente esas rutas condicionalmente, según el contexto de prefetcher.

Quiero resumir todo lo que hemos discutido aquí. Lo primero que hicimos fue utilizar la API de React code splitting para mejorar el rendimiento de nuestra aplicación. Más tarde, combinamos la carga perezosa y el prefetching de contenido para mejorar aún más el rendimiento de nuestra aplicación, básicamente utilizando el tiempo que el usuario está mirando la pantalla para preparar el próximo contenido.

Luego mostramos cómo podemos predecir el comportamiento del usuario utilizando un predictor de clics basado en aprendizaje automático en el entorno del navegador utilizando TensorFlow.js. Por supuesto, predecir el comportamiento del usuario tiene más aplicaciones que son muy interesantes de pensar.

Ahora mostramos que podemos usar el contexto de React para vincular los controladores de UI y las predicciones. Y finalmente, podríamos usar otro contexto de React para vincular las predicciones y el prefetching. Esa es toda la descripción general. Es un proyecto personal en el que pensé. Y espero que te brinde algo de inspiración sobre cómo podemos combinar IA y UI y básicamente utilizar el aprendizaje automático para aprovechar el desarrollo de UI. Gracias. Fue divertido.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2022React Summit 2022
20 min
Routing in React 18 and Beyond
Top Content
Concurrent React and Server Components are changing the way we think about routing, rendering, and fetching in web applications. Next.js recently shared part of its vision to help developers adopt these new React features and take advantage of the benefits they unlock.In this talk, we’ll explore the past, present and future of routing in front-end applications and discuss how new features in React and Next.js can help us architect more performant and feature-rich applications.
React Advanced Conference 2021React Advanced Conference 2021
27 min
(Easier) Interactive Data Visualization in React
Top Content
If you’re building a dashboard, analytics platform, or any web app where you need to give your users insight into their data, you need beautiful, custom, interactive data visualizations in your React app. But building visualizations hand with a low-level library like D3 can be a huge headache, involving lots of wheel-reinventing. In this talk, we’ll see how data viz development can get so much easier thanks to tools like Plot, a high-level dataviz library for quick & easy charting, and Observable, a reactive dataviz prototyping environment, both from the creator of D3. Through live coding examples we’ll explore how React refs let us delegate DOM manipulation for our data visualizations, and how Observable’s embedding functionality lets us easily repurpose community-built visualizations for our own data & use cases. By the end of this talk we’ll know how to get a beautiful, customized, interactive data visualization into our apps with a fraction of the time & effort!

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn