Durante los últimos meses, desarrollé Lyra, un motor de búsqueda de texto completo increíblemente rápido escrito íntegramente en TypeScript. Me sorprendió ver cómo podía competir con soluciones escritas en Rust, Java y Golang, todos idiomas conocidos por ser típicamente "más rápidos que JavaScript"... ¿pero es eso cierto? En esta masterclass, compartiré algunas lecciones que aprendí mientras desarrollaba aplicaciones complejas y críticas para el rendimiento en JavaScript.
This talk has been presented at Node Congress 2023, check out the latest edition of this JavaScript Conference.
FAQ
Elasticsearch es una plataforma de búsqueda de texto completo que utiliza Apache Lucene como su motor de búsqueda subyacente. Es importante porque ofrece una interfaz RESTful, capacidades de sistema de discapacidad, fragmentación, consistencia de data, monitoreo y gestión de clústeres, facilitando así el manejo de grandes volúmenes de datos.
El ponente quería aprender más sobre los motores de búsqueda de texto completo y resolver algunos problemas personales que tenía con software existente como Elasticsearch y Algolia, que encontraba difíciles de desplegar, actualizar y personalizar, entre otros retos.
Con Elasticsearch, el ponente encontró desafíos como la dificultad de despliegue, actualización, gran consumo de memoria y CPU, y costos de gestión. En el caso de Algolia, los problemas incluían el alto costo a escala y su naturaleza de caja negra por ser de código cerrado.
Orama es un motor de búsqueda de texto completo, de código abierto y gratuito, diseñado para ejecutarse en cualquier entorno que soporte JavaScript. Ofrece características como soporte para conjuntos de caras, filtrado, tipo de tolerancia, derivación, y soporte para múltiples idiomas, entre otros.
Para optimizar rendimiento en JavaScript, se sugiere evitar funciones polimórficas en bucles, entender y utilizar correctamente el monomorfismo, y explorar bibliotecas como '2-Fast Properties' que mejora la eficiencia al editar la forma de un objeto.
Orama ofrece ventajas como la extensibilidad en JavaScript puro, velocidad de búsqueda medida en microsegundos, y la capacidad de ejecutarse en cualquier entorno JavaScript. Además, al estar basado en una CDN, elimina la necesidad de gestión de clústeres y aprovisionamiento de servidores.
Esta masterclass explora la creación de un motor de búsqueda de texto completo en JavaScript, destacando los desafíos con los motores de búsqueda existentes como Algolia y las ventajas de usar JavaScript. El orador enfatiza la importancia de la optimización de código y las técnicas de mejora del rendimiento en JavaScript. La charla también discute la evolución del motor de búsqueda Lyra en el proyecto de código abierto Orama, que ofrece un motor de búsqueda de texto completo rico en características y de alto rendimiento para JavaScript. El orador aborda preguntas sobre la elección del lenguaje, la escalabilidad y la implementación, y muestra los beneficios de implementar una base de datos inmutable en una CDN.
Bienvenidos a mi charla sobre Cómo interrumpir la búsqueda de texto completo con JavaScript. Me encanta Elasticsearch por su rendimiento y escalabilidad. Elasticsearch se basa en Apache Lucene, una potente biblioteca de búsqueda de texto completo. Sin embargo, también me encantan otros motores de búsqueda como Algolia, MeliSearch y MiniSearch. Decidí recrear un motor de búsqueda con mi equipo para aprender más y abordar problemas personales que tenía con el software existente, como dificultades de despliegue, actualizaciones, uso de memoria y costos elevados.
Bienvenidos a todos a mi charla, Interrumpiendo la búsqueda de texto completo con JavaScript. Ya me han presentado, así que no seguiré con eso. Y estoy aquí para hablar de la búsqueda de texto completo porque es un dominio que me encanta y algo que realmente me mantiene despierto por la noche porque me gusta tanto que no puedo dejar de pensar en ello. Y hay una buena razón por la que me gusta tanto, y es principalmente por Elasticsearch. ¿Cuántos de ustedes conocen Elasticsearch? Todos. ¿Cuántos de ustedes han usado Elasticsearch? De nuevo, casi todos. Y debo decir que me introduje en el software de código abierto principalmente por Elasticsearch. Así que tengo una relación muy apasionada con él y tuve el placer y el honor de trabajar en Apache You Know Me, que es una plataforma de data de clientes que utiliza Elasticsearch como una database líder en su infraestructura. Y cuando era un poco más junior, no sé, hace casi 10 años, me impresionó el rendimiento de un sistema tan complejo y distribuido. Me impresionó ver que podía lanzar millones y millones de registros contra él y no degradaría el rendimiento tanto. Eso fue realmente impresionante para mí, y es ahí donde decidí entrar en el software de código abierto e intentar entender cómo funciona Elasticsearch. Así que mi primera pregunta como un ingeniero junior curioso fue ¿cómo es eso posible? Quiero decir, ¿cómo puede un software mantener un rendimiento tan bueno incluso con mil millones de registros? Más tarde descubrí que Elasticsearch no es en realidad un motor de búsqueda de texto completo, sino Apache Lucene. Así que Apache Lucene es la biblioteca de búsqueda de texto completo, que Elasticsearch envuelve proporcionando una interfaz RESTful, capacidades de sistema de discapacidad, fragmentación, consistencia de data, monitoreo, gestión de clústeres y así sucesivamente. Así que un gran saludo a Elasticsearch.
Y antes de continuar, permítanme aclarar que de nuevo me encanta Elasticsearch y me encanta Algolia. Me encanta MeliSearch. Me encanta MiniSearch. Me encanta cada motor de búsqueda que existe. Y la razón por la que, por supuesto, estaré hablando de algo que recreé con mi equipo. La razón por la que hice eso en primer lugar es porque quería aprender más y, por supuesto, quería resolver algunos problemas muy personales que tenía con ese software. Así que nada personal. Por favor, si estás usando Elasticsearch, sigue usándolo, si te sientes cómodo con él. No hay problema con eso, por supuesto. Estaba hablando del hecho de que tenía algunos problemas personales con Elasticsearch. Mi primer problema personal era que es bastante difícil de desplegar, en mi opinión. Podría ser simplificado. Difícil de actualizar. Tiene una gran huella de memoria. El consumo de CPU se vuelve terrible tan pronto como
2. Desafíos con Java y Algolia
Short description:
No me gusta Java. Prefiero JavaScript. Algolia es caro y difícil de extender. Hacer software simple es extremadamente difícil, pero como ingenieros, tenemos que intentarlo.
añades más data. Es realmente costoso de gestionar y ejecutar. Difícil de extender y personalizar. Pero lo más importante, Java. Sabía que la gente se reiría de esto. Pero es una preocupación real, de hecho. Como, no me gusta Java. He estado programando en Java un poco. Prefiero JavaScript para siempre y siempre. También, probé diferentes soluciones, como Algolia, que es, de nuevo, un software extremadamente extraordinario. Y no estoy exagerando aquí. Los problemas que tuve con Algolia es que es increíblemente caro a scale. Es una gran caja negra, ¿verdad? Es de código cerrado. Y por lo tanto, es difícil de extender e intentar entender qué está pasando con él. Pero de nuevo, como dije, estos son mis problemas personales con ellos. Y tal vez cuando tuve estos problemas en primer lugar, era un poco demasiado inexperto en ese dominio. Elasticsearch y Algolia eran un poco demasiado para mí. Tal vez vale la pena tener tales problemas, ¿verdad? Porque la gente los está usando. Así que debe haber una razón por qué. Y también entiendo ahora que soy un poco más experimentado, que hacer software simple es extremadamente difícil. Pero siento que, como ingenieros,
3. Aprendiendo Haciendo y Escogiendo un Lenguaje
Short description:
Quería aprender haciendo, así que me propuse el objetivo de dar una charla sobre cómo funcionan los motores de búsqueda de texto completo y crear uno nuevo. Tuve que estudiar algoritmos y estructuras de datos extensivamente. Elegir un lenguaje de programación fue un desafío, pero terminé re-implementando en JavaScript y descubrí que era eficiente.
tenemos que intentarlo. Así que me puse algunos objetivos porque quería aprender más de nuevo. Y la única forma en que realmente puedo aprender es siguiendo una cita de Richard Feynman. Es decir, lo que no puedo crear, no lo entiendo. Así que quería aprender haciendo. Y me puse un objetivo. Quería dar una charla sobre cómo funciona un motor de búsqueda de texto completo. Y quiero crear un nuevo tipo de motor de búsqueda de texto completo. Y quería que fuera fácil masivamente escalable y fácil de extender. Entonces, tres objetivos fáciles, ¿verdad?
Y por supuesto, siempre que empiezas a intentar entender cómo funciona un motor de búsqueda de texto completo, tienes que lidiar con la teoría detrás de la búsqueda de texto completo. Así que árboles, gráficos, engramas, similitud de causina BN25, TF-ADF, tokenización, derivación, y más y más y más. Así que te encuentras en esa situación típicamente, ¿verdad? Sí, todo está bien. Estoy entendiendo en el teclado y espero que algo bueno salga. Spoiler, no lo hace. Pero aún así, la dura verdad, cuando decides que quieres aprender algo así, es que necesitas estudiar algoritmos en data estructuras, y necesitas estudiarlos mucho.
Y por supuesto, en cierto punto tienes que encontrar o elegir un lenguaje de programación para implementarlos, ¿verdad? Y quería ser un tipo genial, así que elijo, oh no, ese es el equivocado. Y vi a gente en la audiencia así cuando mostré el logo de Haskell ¿verdad? Por supuesto que no elegí Haskell, aunque me encanta. Intenté implementar en Rust en primer lugar. Era demasiado complejo, tengo que decir. Empecé diciendo, oh sí, extraño el recolector de basura, así que tal vez puedo intentar Golang, ¿verdad? Intenté Golang por un poco, y todavía era decente, pero aún bastante complejo de implementar. Y luego recordé a Lou, el Lou de Atwood. ¿Sabes quién era Atwood? Es el fundador de Stack Overflow. Así que cualquier aplicación que pueda ser escrita en JavaScript eventualmente será escrita en JavaScript. Y no hay nada más cierto que eso. Así que JavaScript es el rey de los lenguajes de programación. Todos lo sabemos. Por favor, un gran aplauso para JavaScript. Sí, vale la pena. Entonces, sí, empecé a reimplementar cosas en JavaScript traduciendo el code fuente que empecé a trabajar en Rust y luego en Golang. Y sorprendentemente, descubrí que, wow, era muy eficiente cuando empecé a implementar data estructuras de una manera adecuada.
4. Mejorando el Rendimiento y la Optimización del Código
Short description:
No existe un lenguaje de programación lento, solo algoritmos en el diseño de estructuras de datos. Veremos benchmarks para probar este punto. Quiero darles ejemplos de cómo mejorar su rendimiento en JavaScript. Al escribir un motor de búsqueda de texto completo, tienes que lidiar con consultas booleanas y calcular las intersecciones de los arrays. Usar MapReduce es útil pero no es lo más eficiente. Optimizar el algoritmo eliminando MapReduce y usando bucles simples puede resultar en una mejora del rendimiento del 13%. Conocer tu lenguaje y tiempo de ejecución es crucial para la optimización del código. Entender la diferencia entre monomorfismo y polimorfismo es importante.
Y este es el primer punto que me gustaría que se llevaran de esta charla. En mi opinión, que, de nuevo, es muy personal, no existe un lenguaje de programación lento, solo algoritmos en la estructura de data design. Veremos más adelante algunos benchmarks para probar este punto. Pero, por favor, realmente quiero que esto sea un punto clave de esta charla. Estamos en una conferencia de Node, ¿verdad? Entonces, con suerte, esto puede darnos esperanza.
Entonces, sí, también quiero darles algunos ejemplos de cómo mejorar realmente su rendimiento en JavaScript, Node, Deno, lo que sea. Entonces, cuando estás escribiendo un motor de búsqueda de texto completo, en cierto punto, tienes que lidiar con consultas booleanas, ¿verdad? Y, o, etc. Y en cierto punto, tienes que calcular las intersecciones de los arrays. Entonces, tienes varios arrays y tienes que determinar los elementos que aparecen en cada array y devolver eso. Este es un ejemplo usando el paradigma MapReduce. Y como un antiguo, y destaco, antiguo programador functional, solía amar esto mucho. Y sí, básicamente, veo a Matteo allí, está llevándose las manos a la cara y tú eres la razón por la que ya no code de manera funcional. Espero que lo sepas. Llegaremos allí más tarde. Pero de todos modos, usar MapReduce, es muy útil, en mi opinión, pero no es la forma más eficiente de lidiar con ese tipo de algoritmos. Entonces, esto es, llamémoslo versión uno. Podemos optimizarlo, eliminando todo el material de MapReduce y usando una iteración simple. Y luego tenemos que entender cómo funciona JavaScript y cómo funcionan los algoritmos. Y tal vez podemos tener la versión dos, optimizarla aún más, e ir a la versión tres. Entonces, no es una cuestión de paridad, es una cuestión de algoritmos. Aquí, básicamente, solo estamos añadiendo una sola línea que básicamente comienza la intersección desde el array más pequeño. Es una sintonización de performance muy simple que puedes aplicar en este tipo de algoritmos. Cuando ejecutas los benchmarks, y ahí está la referencia para los benchmarks, así que puedes ejecutarlos tú mismo, verás que tienes como un 13% de mejora en el performance simplemente eliminando el material de MapReduce y usando bucles simples, porque así es como, al final del día, los ordenadores tienden a trabajar. Quiero darles otros ejemplos, pero antes de hacer eso, como dije, construí un completo motor de búsqueda de texto, y con este PR solo, incrementamos el rendimiento en un 50%, cinco cero, el 50% del rendimiento total del motor de búsqueda de texto es solo cuidar cómo se calculan las intersecciones. Por eso quería traer este ejemplo a la mesa. Pero otra cosa que me gustaría que pensaran es, por favor, tienen que conocer su lenguaje, su tiempo de ejecución, y cómo optimizar su code para el tiempo de ejecución en el que se está ejecutando. Y puedo darles un par de ejemplos de eso. En primer lugar, ¿quién sabe la diferencia entre monomorfismo y polimorfismo? Estoy seguro de que hay más gente que eso. Entonces, básicamente, el polimorfismo es cuando creas una función que toma múltiples argumentos, de uno a infinitos argumentos, y básicamente llamas a la misma función con los mismos tipos de argumentos. Entonces, si tienes una función de suma donde calculas la suma de dos números,
5. Funciones Polimórficas y Optimización del Rendimiento
Short description:
En JavaScript, el uso del mismo operador para concatenar cadenas y calcular números hace que las funciones sean polimórficas. Las funciones polimórficas dentro de los bucles disminuyen el rendimiento. Consulta el repositorio Optimization Killers en GitHub para un código más eficiente. La biblioteca 2-Fast Properties asegura que las modificaciones de la forma del objeto no ralentizan el rendimiento. Al llamar a la función fast object dentro de un bucle, se calienta la optimización en línea para Db8Engine. JavaScript puede ser altamente eficiente con la optimización. Creé un motor de búsqueda de texto completo autónomo.
siempre pasarás números a esa función. Así que es monomórfica. Solo hay una forma para los data que estás pasando a los argumentos de la función. Pero claro, en JavaScript, como concatenar cadenas y calcular la suma de números usa el mismo operador, como el más. Así que fácilmente podrías usar el número de añadir para concatenar cadenas. Esto es lo que hace que la función sea polimórfica. Pronto descubrirás que si usas funciones polimórficas dentro de los bucles, estás disminuyendo el performance por muchas razones diferentes que mostraremos en un segundo. Hay un increíble repositorio en GitHub que tiene una increíble wiki llamada Optimization Killers. Se trata todo sobre el turbofan. Esta es básicamente una lista de cosas que me encantaría que exploraras si quieres aprender más sobre cómo realmente crear un code más eficiente para Node.js, específicamente. Hay un enlace allí, así que eres libre de tomar una foto y mirarlo más tarde. Hay una biblioteca específica que expone una API que es realmente loca para mí. Cuando mi colega Paolo me mostró eso, yo estaba como, oh, Dios mío, no, por favor, tienes que estar bromeando. La biblioteca se llama 2-Fast Properties. Si tienes un objeto y estás modificando la forma del objeto original, esto está ralentizando todo. Hay esta biblioteca que básicamente se asegura de que cada vez que editas la forma de un objeto, básicamente sigue siendo eficiente, ¿verdad? ¿Cómo lo hace? Eso debe ser como una locura de metaprogramación de reflexión pasando por ahí, ¿verdad? En realidad, no. Son 31 líneas de code con un montón de comentarios. ¿Puedes ver cómo lo hace? ¿Qué pasa si miento de la línea 24 a la 27? ¿Qué está pasando aquí? Así que, básicamente, estamos llamando a la función fast object dentro de un bucle, y eso calienta la optimization en línea para Db8Engine. Y eso es una locura. Quiero decir, esto se rompe en JavaScript Core. Así que si estás haciendo algo para Safari, por ejemplo, o para BUN, esto no funciona bien. Pero para Node.js o Dino, eso es excepcional. Esta es una mejora seria del performance aquí. Una vez que sabes cómo optimizarlo, JavaScript, es muy, muy eficiente. Y te traigo algunos benchmarks ahora. En solo un segundo. Puedes hacer fácilmente que tu code funcione en el área de los microsegundos. Lo veremos en solo un minuto. Pero antes de hacer eso, estaba hablando de cómo quería crear un motor de búsqueda de texto completo justo al principio. Así que vamos a bajar aquí por un segundo. Tuve el honor de hablar en la masterclass We Are Developers en Berlín el año pasado,
6. Lyra: De Proyecto de Código Abierto a Empresa
Short description:
Esto era muy malo, pero tenía cierto potencial. Lo limpiamos un poco y liberamos Lyra, un motor de búsqueda de texto completo para JavaScript. El proyecto ganó popularidad en GitHub, lo que nos llevó a crear una empresa llamada Orama, centrada en la búsqueda de texto completo de código abierto. Orama es la próxima evolución de Lyra y es completamente gratuita para su uso.
y di esta charla. Y creé un motor de búsqueda de texto completo muy pequeño y autónomo. Esto era muy malo, pero tenía cierto potencial. Así que lo limpiamos un poco. Estaba trabajando en un equipo en Nearform liderado por Mateo. Estaba muy feliz y orgulloso de ser parte de este equipo. Tenía a Paolo, que es un contribuyente de Node.js, Rafael Silva, ahora Node.js THC, y Cody Zuchlag, que además de ser un desarrollador increíble, también es profesor en la universidad NSU.
Y trabajando con ellos, decidimos optimizarlo un poco, hacerlo un poco más bonito, y liberarlo. Así que liberamos Lyra. Así que Lyra era un motor de búsqueda de texto completo destinado a ejecutar cualquier cosa que JavaScript ejecute. Y veremos cómo lo hace en solo un segundo. Una cosa bonita que pasó, y me gustaría que esto fuera una especie de historia inspiradora, si se quiere. Alguien tomó el enlace del proyecto Lyra y lo puso en Hacker News, sin decírmelo. Y al día siguiente descubrí que teníamos unas 3,000 estrellas en GitHub, lo cual fue una locura para mí. Nunca tuve ningún repositorio que creciera tan rápido en GitHub. Y decidimos que tal vez era el momento de crear algo alrededor de eso. Así que hablé con mi antiguo jefe en NearForm, y decidimos que sí, teníamos que crear una empresa alrededor de eso. Y llegaré allí en solo un segundo. Tuve la oportunidad de llevar a dos profesionales increíbles de NearForm, Paolo, que ha hablado hoy en este mismo escenario, que ahora está trabajando conmigo como arquitecto principal. Angela, que es la mejor diseñadora que uno puede soñar. Y yo, por supuesto. Pero aún así, necesitábamos a alguien con conocimiento del dominio, con conocimiento de cómo funciona el negocio. Y preguntando por ahí, nos sugirieron hablar con una persona que ahora se ha unido a la empresa como CEO y cofundador, una persona que fue una de las primeras en basarse en Node.js que creó OpenShift, Strongloop, Scalar, muchas hermosas startups ha servido a IBM como CTO. Y ahora es nuestro, estoy orgulloso de decirlo, cofundador y CEO, Sir Isaac Roth. Y estoy muy orgulloso de decir que fundamos juntos Orama. Así que Orama es la próxima evolución de Lira. Y aquí es donde queremos llevar la búsqueda de texto completo, que es de código abierto y gratuita. Sé que cuando digo empresas, la gente puede pensar, oh no, ahora estás comercializando algo. En realidad no. Esto es de código abierto. Tú
7. Introducción a Orama
Short description:
Orama es un motor de búsqueda de texto completo de código abierto y gratuito para JavaScript. Está licenciado bajo Apache 2.0 y se puede descargar usando NPM. Con Orama, puedes crear una base de datos de películas fuertemente tipada, insertar datos y realizar búsquedas basadas en propiedades seleccionadas o todas las propiedades. Orama se destaca entre otras bibliotecas de búsqueda de texto completo como mini-search, FUSE.js y FlexiSearch, que también son excelentes opciones para los desarrolladores.
puedes usarlo. Es gratis. Y queremos traer un nuevo paradigma a la búsqueda de texto completo. Y voy a mostrarte cómo. Entonces, en primer lugar, usar Orama es bastante simple. Es de código abierto. Es gratis para usar. Está licenciado bajo la licencia Apache 2.0. Y puedes descargarlo usando NPM.
Entonces, una vez que lo importas, digamos que creas una database de películas. Entonces debes tener un esquema, que es fuertemente tipado. Y puedes decir, OK, tendré mi título, un nombre de director, algunos metadatos, como la calificación, que es un número, ha ganado un Oscar, que es un booleano. Y luego tienes que insertar cosas, como mi película favorita de todos los tiempos, The Prestige. ¿Hay alguien más compartiendo esta pasión por esta película? Wow, increíble. No, no. ¿Por qué dices que no? Necesitamos discutir esto más tarde, ya sabes. Bueno. De todos modos, en mi opinión, esta es la mejor película de todos los tiempos, . Y sí, de todos modos, no es por eso que estamos aquí. Discutiremos esto más tarde. Insertamos cosas y luego buscamos cosas. Entonces, busquemos Prestige. Y seleccionamos las propiedades en las que queremos buscar. O podemos usar el operador estrella para buscar en todas las propiedades. Y eso es realmente todo. Así es como funciona. Pero ahora puedes estar pensando, ¿qué hace que Orama sea tan especial, verdad? Tenemos varias bibliotecas de búsqueda de texto completo construidas en JavaScript. Tenemos mini-search, tenemos FUSE.js, tenemos FlexiSearch. Y déjame decirte, todas estas son bibliotecas excepcionales. Si ya las estás usando ahora,
8. Conjunto de características y ventajas de Arama
Short description:
Arama tiene un gran conjunto de características, incluyendo soporte para conjuntos de caras, filtrado, impulso de campo y más. Puedes personalizar Arama usando hooks y componentes. Arama funciona en cualquier entorno de ejecución de JavaScript, excepto para Rhino. Es extensible en JavaScript puro y ofrece tiempos de búsqueda increíblemente rápidos medidos en microsegundos.
y si funcionan bien para ti, sigue usándolos. Son fantásticos. De verdad. Y me dieron mucha inspiration para construir lo que creamos hoy. Así que, nada malo sobre ellos. Solo quiero aprender más y crear algo diferente. Eso es realmente todo.
Pero dije, queremos crear algo diferente. Así que, creamos un gran conjunto de características. Y esto no es ni siquiera todo lo que cubrimos. Pero creo que esto es lo más importante que cubrimos. Como, tenemos soporte para conjuntos de caras, filtrado, tipo de tolerancia, impulso de campo, derivación, 26 idiomas de serie, soporte para palabras de parada, plugins, componentes y hooks, que no están relacionados con React. Quiero decir, hooks significa, por ejemplo, antes de insertar cosas, hacer algo después de insertar cosas, hacer algo después de tokenizar antes de tokenizar. Hay mucho que puedes personalizar sobre Arama. Y lo mismo se aplica para los componentes. Como, por ejemplo, si indexas números, por convención, hicimos algunos benchmarks y descubrimos que los árboles AVL son la estructura de data que está más optimizada para números en nuestro caso. Pero tú podrías tener un caso de uso diferente. Así que, exportamos una interfaz opaca. Así que, puedes traer tu propia estructura de data lo que también significa que si quieres probar tus habilidades y crear nuevas estructuras de data, puedes usar nuestra suite de pruebas para probar tus algoritmos y estructuras de data. Eso es simplemente fácil y divertido de hacer, supongo. Lo bueno de Arama, es que funciona donde sea que JavaScript se ejecute. Funciona en Cloud 5.0 workers. No tenemos ninguna dependencia y lo hicimos compatible con literalmente todos los entornos de ejecución que existen, excepto para Rhino. ¿Hay alguien aquí que conozca Rhino? Oh Dios mío, lo siento mucho por ti. He estado trabajando con él durante cinco años. No tienes idea. No, tal vez sí la tengas. Tal vez sí la tengas. Aparte de eso, creo que la mayor ventaja de usar Orama, si necesitas búsqueda de texto completo en tu aplicación, es que es extensible en JavaScript puro. Tenemos los hooks y sistemas de componentes incorporados, pero no es solo eso. Es increíblemente rápido y medimos el tiempo, el tiempo de búsqueda, en microsegundos. ¿No me crees? Tal vez es hora de una pequeña demostración.
9. Indexación y Consulta de Bases de Datos
Short description:
Permíteme darte un ejemplo. Tenemos una base de datos con 20,000 productos que indexaremos en el navegador y realizaremos consultas. También desplegamos la misma base de datos en nuestra propia CDN para comparar. Los tiempos de consulta son increíblemente rápidos, con resultados devueltos en milisegundos e incluso microsegundos. Ejecutar en una CDN significa que se te cobra por cada microsegundo que tu CPU funciona, a diferencia de AWS donde la carga mínima es de 1 milisegundo. Además, hay algunas imágenes faltantes debido a datos corruptos, pero aún así pagas por la transferencia de datos desde tu CDN.
Veamos. Vaya. Desapareció. Oh, aquí está. De acuerdo. Permíteme darte un ejemplo. Así que tengo una base de datos que tomé de keggle.com. Básicamente son 20,000 productos llenos de título, descripción, precios, enlaces a imágenes, reseñas, lo que sea. Vamos a indexar 20,000 productos en el navegador ahora mismo y haremos algunas consultas sobre ellos. Para ser honesto, también desplegué la misma base de datos exacta en nuestra propia CDN. Hablaremos de eso más tarde para poder hacer algunas comparaciones. Bien. ¿Estás listo? Vamos a poblar 20,000 productos en la base de datos. Debería tomar alrededor de tres segundos. Sí, así fue. Y ahora estamos listos para hacer algunas consultas. Así que hagamos una consulta. Vale. Vaya. 17 milisegundos. Eso está bien. Intentemos con, no sé, caballo. 175 microsegundos. ¿Por qué estoy destacando esto? Porque estás ejecutando en una CDN, en un worker, y te están cobrando cada microsegundo que tu CPU funciona. Así que esto es lo que te están cobrando por ejecutar esto, ¿verdad? En AWS, por ejemplo, eso no es cierto. El mínimo es 1 milisegundo. Pero aún así, estamos ejecutando en una CDN. Una cosa a tener en cuenta es que, como, ahora tenemos 10 imágenes en esta página, ¿verdad? Algunas imágenes en realidad faltan debido a los datos corruptos. Pero estás pagando por la dirección desde tu CDN, ¿verdad? Así que estás pagando como 1 megabyte y
10. Orama: Más barato, mejor, más rápido
Short description:
Orama es una búsqueda empresarial más barata, mejor y más rápida. Se ejecuta en nuestra propia CDN, eliminando la necesidad de gestión de clústeres, aprovisionamiento de servidores y degradación del rendimiento. Es tan fácil de usar como una biblioteca de JavaScript. Puedes integrar tu modelo de lenguaje grande con él y dejar que Orama haga su magia. Estamos contratando a un ingeniero de personal que trabaja principalmente en Node.js y Rust. ¡Gracias por estar aquí!
1.8. Lo siento, 1.8 megabytes para tu transferencia de data. Y estás pagando 12 kilobytes por el payload de Orama, que es básicamente gratis, ¿verdad? Pero si tu conjunto de data es lo suficientemente pequeño, como 20,000 productos, en mi opinión, es lo suficientemente pequeño, puedes hacer clic aquí. Tarda 100 microsegundos, y no estás pagando nada porque se ejecuta en el navegador, gracias. Y por supuesto, como dije, tenemos un buen conjunto de características. Así que solo para darte un ejemplo, si el caballo, no sé por qué escribí caballo, pero puedo multiplicarlo por, no sé, 1.8 si aparece en la descripción. Cero nanosegundos, sí, eso es básicamente, no podemos medirlo debido a lo rápido que es. Y si no me crees, eso es de código abierto. La forma en que medimos el rendimiento está en nuestro repositorio de GitHub. A veces no confío en mí mismo y voy a leer este code, y realmente funciona. Pregunté a varias personas, así que tengo que creerlo, supongo. No sé, puedes filtrar por precio, puedes crear conjuntos de caras alrededor de eso. Déjame ver. Bueno, no hay data, pero básicamente todo está entre uno y cincuenta, lo que sea. Pero esto es solo para mostrarte básicamente las capacidades de ejecutar algo en el borde, básicamente gratis. Así que eso es lo que quería compartir contigo. Quizás ahora puedas creerme que puede ejecutarse algunos microsegundos, ¿verdad? Así que en su núcleo, Orama es una búsqueda enterprise más barata, mejor, más rápida. Y lo bueno de esto es que dado que se ejecuta en nuestra propia CDN, quizás la tuya, deberíamos discutir esto, ¿verdad? No tienes gestión de clústeres, no hay aprovisionamiento de servidores, no hay degradación del performance, porque la CDN lo escala por ti, ¿verdad? Y es tan fácil de usar como una biblioteca de JavaScript. Pero eso no es todo. Puedes integrar tu modelo de lenguaje grande con él y dejar que Orama, o dejar que Orama haga su magia por ti. Eso es solo GPT por ejemplo, ¿verdad? Así que todos estamos en la misma página. Así que supongo que estoy terminando mi tiempo. Así que si quieres aprender más, por favor danos una estrella en GitHub, suscríbete a nuestro boletín en el sitio web de oramasearch.com y puedes encontrar lo que necesites aquí. Y por supuesto, estaré por aquí si tienes un caso de uso específico para compartir con nosotros para que podamos recoger comentarios. No tengo nada que decirte ahora mismo. Solo quiero recoger comentarios. Y también estamos hiring. Así que si estás interesado, estamos contratando a un ingeniero de personal que trabaja principalmente en Node.js y Rust. Y si estás interesado, somos totalmente remotos, PTO limitado, plan de acciones generoso, y eso es todo. Así que gracias por estar aquí.
QnA
Preguntas y Elección de Lenguaje
Short description:
Charla impresionante. Gracias. La primera parte de la charla me dio serias vibraciones de JSPerf. Java, ese fue el primero. ¿Por qué no elegiste Haskell? ¿Pregunta seria... quiero decir, respuesta seria? Depende de ti. Si quieres ejecutar en un navegador, no querrás usar pure script. Simplemente usa Javascript en sí o usa TypeScript de una manera que solo puedas eliminar los tipos y obtener Javascript puro de él. Así es como sugiero escribir Javascript en absoluto. Sí, siguiente pregunta, ¿cómo escala realmente? Oops. Sí, y se ha ido...
mucho por estar aquí. Ha sido un honor. Gracias, Michele. Charla impresionante. Gracias. Y tenemos algunas preguntas para ti. Y por cierto, la primera parte de la charla... Sí, la primera no era realmente una pregunta, pero era sobre Java. Alberto, te veo en la audiencia. Veo la segunda. Oh, no puedo creerlo. Lo siento. Queja personal. Oh, no. La primera parte de la charla me dio serias vibraciones de JSPerf. No sé si alguien más siente eso. Supongo que es algo bueno. Sí.
Java, ese fue el primero. ¿Por qué no elegiste Haskell? ¿Pregunta seria... quiero decir, respuesta seria? Depende de ti. De hecho, solía usar code Haskell durante un tiempo. No era bueno en eso. El problema es que si quieres ejecutar en un navegador, no querrás usar pure script. Sabes que puedes compilar Haskell a Javascript. No vale la pena, en mi opinión. No vale la pena compilar ningún lenguaje a Javascript. Simplemente usa Javascript en sí o usa TypeScript de una manera que solo puedas eliminar los tipos y obtener Javascript puro de él. Así es como sugiero escribir Javascript en absoluto. No uses ningún otro lenguaje en él. Sí, lo tengo.
Sí, siguiente pregunta, ¿cómo escala realmente? Oops. Sí, y se ha ido...
Búsqueda de texto completo en PubMed con Orama
Short description:
Podemos realizar una búsqueda de texto completo en PubMed con Orama, un motor de búsqueda de texto completo en memoria. Proporciona una solución ultra escalable para grandes conjuntos de datos, permitiéndote desplegarlo como prefieras. Desplegar tantos datos en una CDN es peligroso y difícil de lograr, pero encontramos una forma de hacerlo funcionar. Vamos a discutirlo más a fondo, aunque aún no puedo revelar los detalles públicamente.
Sí, lo revertiré en un segundo. Cómo escala realmente. ¿Podríamos hacer una búsqueda de texto completo en PubMed? 35 millones de artículos descargables gratis. 50 gigabytes gratis de artículos en el campo médico. Claro que puedes. De la misma manera que puedes hacerlo... Por supuesto que no estás haciendo eso en un navegador porque no tienes tanta memoria RAM. Este es un motor de búsqueda de texto completo en memoria. La mejor manera de hacer eso, en mi opinión, es... Me entristece mucho decir esto pero esto es... ¿Cómo queremos comercializar RAM, de acuerdo? Proporcionando una solución ultra escalable para tus grandes conjuntos de data. Por supuesto que puedes usar los proyectos de código abierto y desplegarlo como prefieras. Puedes desplegarlo en una CDN pero tantos data en una CDN eso es bastante peligroso y bastante difícil de lograr. Encontramos una forma de lograrlo. Definitivamente deberíamos discutir esto. Lamento mucho no poder revelar esto públicamente aún. Lo siento, esa es una respuesta muy mala.
Pruebas de búsqueda de texto en Orama
Short description:
Para garantizar la corrección de la búsqueda de texto, tenemos varias pruebas unitarias y pruebas generativas. Sin embargo, determinar si la búsqueda está funcionando correctamente puede ser un desafío debido a factores como el contexto y el stemming. Mientras que Algolia y Elastic pueden dar resultados diferentes, Orama te permite inyectar tu código y personalizar la búsqueda a tus preferencias utilizando hooks y componentes.
Muy bien. ¿Cómo pruebas que la búsqueda de texto funciona? Bueno, tenemos varias unit tests en primer lugar. Tenemos varias pruebas generativas y nos aseguramos cada vez que implementamos una nueva característica nos aseguramos de generar aún más unit tests en datos reales para garantizar su corrección. El mayor problema es determinar si la búsqueda está funcionando correctamente o no porque el contexto importa, el stemming importa y si ejecutas la misma búsqueda en Algolia y Elastic es muy poco probable que obtengas exactamente los mismos resultados por varias razones. Entonces, ¿cómo determinas si está funcionando o no? Un hecho interesante sobre Orama es que puedes inyectar tu code y hacerlo funcionar y buscar como prefieras. Así que solo puedo garantizarte que está funcionando bien porque tenemos una adopción de la community que lo demuestra, tenemos unit tests y pruebas de integración que lo demuestran pero si no está funcionando como quieres que funcione siempre puedes usar los hooks y componentes para hacerlo funcionar como prefieras.
El cambio de marca de Orama y el significado del nombre
Short description:
Orama es una versión con cambio de marca de Lyra debido a conflictos de nombres. El nombre Orama significa 'ver' en griego y es un nombre divertido de usar en inglés. La decisión de cambiar de marca fue principalmente para evitar confusiones e incorporar la empresa bajo un nombre único.
Genial, creo que la siguiente pregunta irá. Sí, ¿será Orama diferente de Lyra? Hablando de características. Oh, en absoluto. Solo tuvimos que cambiar la marca del nombre básicamente porque Lyra era un códec de Google y tuvimos algunos problemas con el nombre. También hay muchas empresas llamadas Lyra donde incorporamos la empresa. Así que decidimos ir con Orama que en griego significa ver y siento que Orama también es un nombre divertido, ¿verdad? Para usar en inglés. Eso es lo que me dijeron, soy italiano. Siento que no lo sé. Tengo buenos sentimientos sobre el nombre pero eso es solo un cambio de nombre en realidad. No es nada más que eso.
Penalización del Recolector de Basura y Despliegue
Short description:
La penalización del recolector de basura es significativa para cargas de trabajo de alto volumen, pero no es una preocupación cuando se ejecuta en una CDN. Los conjuntos de datos grandes en el navegador pueden ser problemáticos, por lo que Algolia o Elasticsearch son mejores opciones para despliegues monolíticos en servidores Node.js. Los motores de búsqueda en JavaScript deberían ejecutarse en el borde o en el navegador.
Sí, pregunta sobre el recolector de basura. ¿Qué tan significativa es la penalización del recolector de basura en tu opinión para cargas de trabajo de alto volumen? Así que cada vez que ejecutas en una CDN, realmente no te importa eso en absoluto porque cada vez que haces una consulta es probable que golpees un nodo diferente o un nodo que ya está desgastado por la solicitud anterior y siempre está en caché. Así que el hecho es que la penalización del recolector de basura es mala si tienes un conjunto de datos grande en el navegador pero no es probable que tengas un gran conjunto de data en el navegador. Siento que tener un despliegue monolítico en un servidor Node.js, no es bueno. Si querías eso, por favor usa Algolia o Elasticsearch. Son buenos en esto y también porque tendrías que lidiar con protocolos de consenso para data distribuida, consistencia de data. Tienes que asegurarlo. Así que mi opinión es que los motores de búsqueda construidos en JavaScript para ejecutarse en el borde deberían ejecutarse en el borde o en el navegador. Eso es realmente todo.
Razones para Elegir JavaScript Imperativo
Short description:
Solía escribir JavaScript funcional, pero descubrí que JavaScript imperativo es más rápido y mejor en muchos aspectos. Los números muestran que el código imperativo supera al código orientado a objetos o funcional. Aunque puede que no haya estado escribiendo buen JavaScript orientado a objetos o funcional, mi código imperativo funciona mejor.
De acuerdo, suena genial. Sí, hay algunas preguntas. ¿Por qué ya no usas un paradigma funcional? Por culpa de Matteo Collina, que está aquí sonriendo. No, porque tiene razón. Quiero decir, no es la forma más eficiente de escribir JavaScript code. Antes de unirme a NIRF y su equipo, trabajaba principalmente con JavaScript funcional. Luego descubrí que esta no es la mejor manera de escribir JavaScript. Y si cuentas el número... Quiero decir, los números son lo que importa en cierto punto y los números muestran que el JavaScript imperativo es mucho más rápido y mejor en muchos aspectos que el JavaScript orientado a objetos o funcional. Probablemente eso se deba a que estaba escribiendo un terrible JavaScript orientado a objetos o de programación funcional. Pero como lo escribo, mi código imperativo funciona mejor. Así que por eso es imperativo.
Beneficios de Implementar una Base de Datos Inmutable en una CDN
Short description:
Hay una pregunta sobre los benchmarks en comparación con Elastic Search. Estamos a punto de publicarlos. Implementar una base de datos inmutable en una CDN ofrece ventajas, como experiencias de búsqueda personalizadas. Potenciar documentos en lugar de campos puede aumentar la conversión para los usuarios. Gracias por unirse a la sala de preguntas y respuestas.
Sí, tiene sentido. Sí, también hay una pregunta sobre los benchmarks en comparación con Elastic Search. ¿Tienes alguna referencia?
Estamos a punto de publicarlos, de hecho, sí. Y aún no. No son públicos. Estamos a punto de publicarlos.
Bien, creo que necesito elegir una última. Permíteme rápidamente... Oh, esa es buena. Sí, absolutamente. Esto es bueno por una cosa que no mencioné. Pero por ahora, necesito hacerlo. Si implementas una base de datos inmutable en una CDN, tienes algunas ventajas. Por ejemplo, si nadie está buscando, no estás pagando nada. Lo que significa que si tienes 1000 usuarios, puedes construir 1000 índices diferentes, implementarlos en una CDN, y no estás pagando nada hasta que comiencen a buscar. Lo que significa que cada usuario puede tener una experiencia de búsqueda diferente y personalizable y personalizada. ¿Verdad? Así que sí, puedes potenciar documentos en lugar de campos. Y puedes decir como, a Michele le gustan, no sé, las camisetas violetas. Así que cada vez que busca camisetas, tendrá campos potenciados para Violeta y camisetas juntas, ¿verdad? Porque tal vez tengo un historial de búsqueda o historial de conversión en e-commerce. Tal vez a otras personas como Paolo, siempre bromeo con él porque le gustan las camisetas amarillas. Si busco camisetas, tendré un índice que potenciará las camisetas violetas. Paolo tendrá un índice que potenciará las camisetas amarillas. Como puedes ver, esto está aumentando la conversión para tus usuarios, con suerte. Y así que sí, definitivamente, puedes potenciar documentos y deberías potenciar documentos en lugar de campos.
Muy bien, muchas gracias. Gracias. Hay muchas más preguntas. Simplemente no puedo, sí. No sé cómo se llama, pero estaré allí. Sí, exactamente. Es una sala de preguntas y respuestas. Así que todos, por favor, únanse a la sala de preguntas y respuestas. Gracias. Y en realidad...
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
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.
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
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.
Today's Talk discusses the future of performance tooling, focusing on user-centric, actionable, and contextual approaches. The introduction highlights Adi Osmani's expertise in performance tools and his passion for DevTools features. The Talk explores the integration of user flows into DevTools and Lighthouse, enabling performance measurement and optimization. It also showcases the import/export feature for user flows and the collaboration potential with Lighthouse. The Talk further delves into the use of flows with other tools like web page test and Cypress, offering cross-browser testing capabilities. The actionable aspect emphasizes the importance of metrics like Interaction to Next Paint and Total Blocking Time, as well as the improvements in Lighthouse and performance debugging tools. Lastly, the Talk emphasizes the iterative nature of performance improvement and the user-centric, actionable, and contextual future of performance tooling.
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía). En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también. Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso. (Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del tiempo. Puntos Cubiertos: 1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso Cómo Ayudará a los Desarrolladores: - Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
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.
Construir aplicaciones web instantáneas a gran escala ha sido elusivo. Los sitios del mundo real necesitan seguimiento, análisis y interfaces y interacciones de usuario complejas. Siempre comenzamos con las mejores intenciones pero terminamos con un sitio menos que ideal. QwikCity es un nuevo meta-framework que te permite construir aplicaciones a gran escala con un rendimiento de inicio constante. Veremos cómo construir una aplicación QwikCity y qué la hace única. El masterclass te mostrará cómo configurar un proyecto QwikCity. Cómo funciona el enrutamiento con el diseño. La aplicación de demostración obtendrá datos y los presentará al usuario en un formulario editable. Y finalmente, cómo se puede utilizar la autenticación. Todas las partes básicas para cualquier aplicación a gran escala. En el camino, también veremos qué hace que Qwik sea único y cómo la capacidad de reanudación permite un rendimiento de inicio constante sin importar la complejidad de la aplicación.
Sumérgete en el mundo de la IA con nuestro masterclass interactivo diseñado específicamente para desarrolladores web. "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" ofrece una oportunidad única para cerrar la brecha entre la IA y el desarrollo web. A pesar de la prominencia de Python en el desarrollo de IA, el vasto potencial de JavaScript sigue siendo en gran medida inexplorado. Este masterclass tiene como objetivo cambiar eso.A lo largo de esta sesión práctica, los participantes aprenderán cómo aprovechar LangChain, una herramienta diseñada para hacer que los modelos de lenguaje grandes sean más accesibles y útiles, para construir agentes de IA dinámicos directamente dentro de entornos JavaScript. Este enfoque abre nuevas posibilidades para mejorar las aplicaciones web con funciones inteligentes, desde el soporte al cliente automatizado hasta la generación de contenido y más.Comenzaremos con los conceptos básicos de LangChain y los modelos de IA, asegurando una base sólida incluso para aquellos nuevos en IA. A partir de ahí, nos sumergiremos en ejercicios prácticos que demuestran cómo integrar estas tecnologías en proyectos reales de JavaScript. Los participantes trabajarán en ejemplos, enfrentando y superando los desafíos de hacer que la IA funcione sin problemas en la web.Este masterclass es más que una experiencia de aprendizaje; es una oportunidad de estar a la vanguardia de un campo emergente. Al final, los asistentes no solo habrán adquirido habilidades valiosas, sino que también habrán creado funciones mejoradas con IA que podrán llevar a sus proyectos o lugares de trabajo.Ya seas un desarrollador web experimentado curioso acerca de la IA o estés buscando expandir tus habilidades en áreas nuevas y emocionantes, "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" es tu puerta de entrada al futuro del desarrollo web. Únete a nosotros para desbloquear el potencial de la IA en tus proyectos web, haciéndolos más inteligentes, interactivos y atractivos para los usuarios.
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
Top Content
WorkshopFree
2 authors
Usar una biblioteca puede parecer fácil a primera vista, pero ¿cómo eliges la biblioteca correcta? ¿Cómo actualizas una existente? ¿Y cómo te abres camino a través de la documentación para encontrar lo que quieres? En esta masterclass, discutiremos todos estos puntos finos mientras pasamos por un ejemplo general de construcción de un editor de código usando CodeMirror en React. Todo mientras compartimos algunas de las sutilezas que nuestro equipo aprendió sobre el uso de esta biblioteca y algunos problemas que encontramos.
Comments