Feature Flagging in React

Rate this content
Bookmark

La flagging de características es una excelente manera de reducir el riesgo al separar las implementaciones de código de las versiones de características, pero con los componentes del servidor de React presentan algunos desafíos y complejidades únicas. En esta charla, aprenderás sobre estos desafíos y cómo superarlos. También daré una demostración en vivo que ilustrará paso a paso la implementación, mostrando cómo renderizar dinámicamente componentes basados en flags de características utilizando una variedad de estrategias de renderizado.

This talk has been presented at React Summit US 2024, check out the latest edition of this React Conference.

Graham McNicoll
Graham McNicoll
20 min
22 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola a todos, soy Graham y estoy muy emocionado de darles una charla hoy sobre el flagging de características con los componentes del servidor de React. Vamos a dar ejemplos de cómo puedes implementar flags de características en tu aplicación y cómo interactúan con las estrategias de renderizado de React. Las flags de características son lógica condicional que te permite controlar el estado de una característica de forma independiente de la implementación de código. Esta separación de las implementaciones de código de las versiones de características es fundamental para las organizaciones de productos grandes. Permite realizar commits frecuentes sin exponer cambios a los usuarios, lanzamiento condicional de características y una fácil reversión en caso de errores inesperados. El uso de FeatureFlag te proporciona un interruptor de apagado donde puedes desactivar tu característica. Te permite realizar pruebas A-B y medir el impacto de las nuevas características. Lanzas condicionalmente la característica a diferentes conjuntos de usuarios, lo que te permite controlar las externalidades y los cambios en tu producto. Se utiliza un FeatureFlag para obtener el estado y mostrar condicionalmente un componente. El estado de la flag se puede almacenar en un archivo o utilizando variables de entorno. Sin embargo, las variables de entorno tienen limitaciones en términos de complejidad. Un ejemplo más complejo utiliza la sintaxis de Growth Book, lo que permite un control avanzado sobre el lanzamiento de características. Construir tu propio sistema puede ser complicado, pero las plataformas de flagging de características ofrecen soluciones completas con dos ventajas principales. Las aplicaciones de flagging de características tienen una interfaz de usuario agradable para controlar las versiones de características y un SDK que se integra con el código. React plantea complicaciones en el uso de flags de características debido a sus estrategias de renderizado. Los generadores de sitios estáticos como Next.js tienen limitaciones en la segmentación de usuarios y requieren una nueva implementación para las actualizaciones. Los componentes del cliente no son asíncronos, lo que requiere el uso de primitivas de React. Estos enfoques tienen sus propios desafíos en la implementación de flags de características. Para inicializar el SDK, se instancia el SDK fuera de la aplicación y se utiliza un hook de efecto de usuario para descargar la carga de la flag de características y actualizar los datos del usuario en el SDK. El proveedor de Growth Book crea un contexto para evaluar las flags de características, lo que permite que los componentes accedan fácilmente a los estados de las flags. Sin embargo, puede haber un ligero parpadeo en la experiencia de usuario debido al tiempo que lleva inicializar el SDK y descargar el estado de la flag de características. La optimización de la red puede ayudar a reducir el parpadeo, pero la conexión de red del cliente está fuera de tu control. Hay algunas soluciones alternativas para el parpadeo, como mostrar un spinner de carga mientras se renderiza en segundo plano. El uso de flags de características para SEO no es ideal, ya que la carga HTML inicial no incluye todo el contenido. Los componentes del servidor en React 19 proporcionan una solución asíncrona sin la necesidad de complicados useEffect y state. react.cache permite almacenar en caché operaciones costosas en el ámbito de la solicitud actual. La llamada a la función getSdk recupera el valor de la flag de características de la caché, lo que proporciona llamadas posteriores más rápidas. Nuestro SDK tiene su propia caché en memoria. El renderizado dinámico puede ser costoso en términos de solicitudes, renderizado, llamadas de red y ejecución de React en el lado del servidor. También puede ser lento y puede ser un desafío realizar un seguimiento de los eventos. El enfoque híbrido servidor-cliente combina las ventajas de las estrategias anteriores sin los inconvenientes. Al convertir la aplicación externa en un componente del servidor y almacenar en caché la carga de la flag de características, podemos lograr un flagging de características sin parpadeo en el lado del cliente. El componente del cliente puede utilizar el hook UseMemo y el método initSync con la carga ya en memoria. Pasar la instancia del SDK y envolver la aplicación principal en un proveedor nos permite tener lo mejor de ambos mundos. Aunque puede ser un poco más complejo de configurar, el uso de Next.js con componentes del servidor de React ofrece un enfoque moderno y genial para el flagging de características con un alto rendimiento.

1. Introducción a Feature Flagging con React

Short description:

Hola a todos, soy Graham y estoy muy emocionado de darles una charla hoy sobre el uso de feature flags con componentes de servidor de React. Vamos a dar ejemplos de cómo pueden implementar feature flags en su aplicación y cómo interactúan con las estrategias de renderizado de React. Los feature flags son lógica condicional que te permite controlar el estado de una característica de forma independiente de la implementación del código. Esta separación entre la implementación del código y el lanzamiento de características es fundamental para las organizaciones de productos grandes. Permite realizar commits frecuentes sin exponer los cambios a los usuarios, lanzar características de forma condicional y revertir fácilmente en caso de errores inesperados.

Hola a todos, soy Graham y estoy muy emocionado de darles una charla hoy sobre el uso de feature flags con componentes de servidor de React, así que empecemos. Soy Graham McNichol. Soy el cofundador de Growthbook. Growthbook es la plataforma de feature flagging y pruebas A-B de código abierto más popular. Pasé por Y Combinator hace un par de años y anteriormente fui el CTO de mi última startup.

El objetivo de la charla de hoy es, si aún no están familiarizados, darles una breve introducción sobre qué es el feature flagging. Vamos a dar algunos ejemplos de cómo pueden implementar feature flags en su aplicación y luego algunos ejemplos más complejos. Y luego, lo más importante de esta charla, es hablar sobre cómo interactúa el feature flagging con React y en particular con algunas de las diferentes estrategias de renderizado que tiene React. Vamos a ver cuatro ejemplos diferentes de diferentes estrategias de renderizado que tiene React y cómo pueden usar el feature flagging en cada una de ellas.

Bien, teniendo eso en cuenta, vamos a ver qué es el feature flagging. Los feature flags son lógica condicional que colocas alrededor de un bloque de código que te permite controlar el estado de esa característica de forma independiente de la implementación del código. Realmente te ayuda a separar las implementaciones del código del lanzamiento de características, ¿verdad? Y eso es realmente fundamental cuando estás trabajando con organizaciones de productos grandes. Tienes muchos commits que ocurren al mismo tiempo.

Así que veamos algunas de esas ventajas. Desde el punto de vista del desarrollo, te permite hacer commits de código, aunque esté en progreso, porque nunca será visto por un usuario. Así que puedes hacer commits con más frecuencia sin exponer esos cambios a tus usuarios. También permite el desarrollo basado en tronco, siéntanse libres de buscarlo. No tengo tiempo para entrar en eso, pero también es una forma interesante de hacer desarrollo si se encuentran constantemente con muchos conflictos de fusión. También te permite hacer lanzamientos condicionales de características. Puedes lanzar características a un subconjunto de tus usuarios, o puedes hacer pruebas en vivo en producción, por ejemplo, apuntando solo a usuarios beta, o haciendo lanzamientos canarios, o lanzando solo a un pequeño subconjunto de tus usuarios. Realmente no puedes hacer eso sin otros sistemas o codificarlo directamente. Y FeatureFlag hace que eso sea tan fácil y trivial.

Desde una perspectiva de producto, como ingenieros, una de las cosas que sucede es que podemos lanzar una característica y causar un error inesperado. En ese caso, históricamente, tenías que revertir rápidamente tu código, encontrar el error y volver a implementarlo, o volver a una versión anterior y luego implementar esa versión. Y ahora estás esperando a que termine tu canalización de CI/CD. Es un poco estresante esperar un par de minutos mientras todo se ejecuta. Esperemos que sean solo un par de minutos. A veces puede ser mucho, mucho más tiempo. Y luego hay todo tipo de efectos de interacción. Si tu implementación se lanzó con otras características, ahora estás revirtiendo el trabajo de otras personas.

2. Ventajas de usar Feature Flags y pruebas A-B

Short description:

Usar FeatureFlag te proporciona un interruptor de apagado donde puedes desactivar tu característica. Te permite hacer pruebas A-B y medir el impacto de nuevas características. Lanzas la característica condicionalmente a diferentes conjuntos de usuarios, lo que te permite controlar las externalidades y los cambios en tu producto.

Y simplemente se vuelve muy complicado. Así que usar FeatureFlag te proporciona un interruptor de apagado donde puedes desactivar tu característica. Sí. Así que eso es realmente poderoso. Y lo otro genial que hace es que te permite hacer pruebas A-B. Creemos que FeatureFlags es la mejor manera de lanzar nuevas características. Y las pruebas A-B son la mejor manera de medir el impacto de esas características. Entonces lo que haces es lanzar condicionalmente esa característica a un conjunto aleatorio de usuarios que obtienen la versión de control, un conjunto aleatorio que obtiene la nueva variante, y luego mides el impacto. Entonces te permite controlar todas las diferentes externalidades que pueden ocurrir y los cambios en tu producto que pueden ocurrir si solo miras antes y después de las pruebas.

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

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Entendiendo la Arquitectura Fiber de React
React Advanced 2022React Advanced 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
React Summit 2022React Summit 2022
17 min
Composición vs Configuración: Cómo Construir Componentes Flexibles, Resilientes y a Prueba de Futuro
Top Content
Today's Talk discusses building flexible, resilient, and future-proof React components using composition and configuration approaches. The composition approach allows for flexibility without excessive conditional logic by using multiple components and passing props. The context API can be used for variant styling, allowing for appropriate styling and class specification. Adding variants and icons is made easy by consuming the variant context. The composition and configuration approaches can be combined for the best of both worlds.
Patrones de Arquitectura Remix
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Patrones de Arquitectura Remix
Top Content
This Talk introduces the Remix architecture patterns for web applications, with over 50% of participants using Remix professionally. The migration from single page applications to Remix involves step-by-step refactoring and offers flexibility in deployment options. Scalability can be achieved by distributing the database layer and implementing application caching. The backend for frontend pattern simplifies data fetching, and Remix provides real-time capabilities for collaborative features through WebSocket servers and Server-SendEvents.

Workshops on related topic

IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
Masterclass de alto rendimiento Next.js
React Summit 2022React Summit 2022
50 min
Masterclass de alto rendimiento Next.js
Workshop
Michele Riva
Michele Riva
Next.js es un marco convincente que facilita muchas tareas al proporcionar muchas soluciones listas para usar. Pero tan pronto como nuestra aplicación necesita escalar, es esencial mantener un alto rendimiento sin comprometer el mantenimiento y los costos del servidor. En este masterclass, veremos cómo analizar el rendimiento de Next.js, el uso de recursos, cómo escalarlo y cómo tomar las decisiones correctas al escribir la arquitectura de la aplicación.