WebAssembly y React: Una nueva era de aplicaciones web de alto rendimiento

Rate this content
Bookmark
Slides

¡Espera, WebAssembly en el servidor?! ¡Pensé que era para el navegador!

En esta charla, exploraremos los beneficios de usar lenguajes de bajo nivel en el lado del servidor, y las diferentes posibilidades que WebAssembly ofrece para construir aplicaciones web de alto rendimiento. Nos adentraremos en diferentes proveedores de funciones WebAssembly, así como en casos prácticos de uso para integrar WebAssembly con React.

Al final de esta charla, te irás con una comprensión más profunda de cómo se pueden usar juntos WebAssembly en el lado del servidor y React. También obtendrás conocimientos prácticos sobre cómo usar lenguajes de bajo nivel en el lado del servidor, y consejos para superar los desafíos comunes al integrar WebAssembly con React.

Carmen Huidobro
Carmen Huidobro
14 min
12 Dec, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

WebAssembly es un formato de instrucción binaria para una máquina virtual basada en pilas, que permite el despliegue de código en lenguajes como Go, Rust o C++ para ejecutarse en el navegador. Permite algoritmos de compresión de imágenes eficientes y tiempos de ejecución completos como Node.js en el navegador. WebAssembly proporciona una capa de seguridad basada en capacidades y elimina la necesidad de preocuparse por la configuración del servidor. Ya está siendo utilizado por organizaciones y plataformas conocidas, y continúa evolucionando con características próximas como un modelo de componentes, capacidades de redes neuronales, recolección de basura y multihilo. Los módulos de WebAssembly se pueden usar en React y como herramienta de servidor.

Available in English

1. Introducción a WebAssembly

Short description:

Hola. Bienvenidos. Gracias por sintonizar hoy. Estoy emocionado de hablar sobre WebAssembly. WebAssembly, abreviado como Wasm, es un formato de instrucción binaria para una máquina virtual basada en pilas. Es un objetivo de compilación para lenguajes de programación, permitiendo la implementación en la web para aplicaciones de cliente y servidor. WebAssembly no es un lenguaje de programación, sino un estándar para bytecode de bajo nivel. Nos permite compilar código en lenguajes como Go, Rust o C++ para ejecutar en el navegador. Ejemplos de WebAssembly en el navegador incluyen la ejecución de juegos antiguos a través de archive.org o la Máquina del Tiempo.

Hola. Bienvenidos. Muchas gracias por sintonizar hoy. Estoy muy emocionado de hablarles sobre WebAssembly. Y, saben, estamos en línea, no puedo verlos, pero aún así quiero ver un levantamiento de manos. ¿Conocen WebAssembly? Veo algunas manos levantadas. Quizás, quizás no. ¿Me conocen a mí? Levanten la mano. No, solo estoy bromeando. Hola. Mi nombre es Ramón. Mis pronombres son él, él, cofundador de la Iniciativa de Aprendizaje Libre del Club de Malos Sitios Web y un gran defensor de la comunidad y el aprendizaje mutuo y desde un enfoque de comunidad. Simplemente, me da vida. Vamos a sumergirnos de lleno. Es posible que hayan oído hablar de WebAssembly, o a veces lo voy a llamar Wasm. Vamos a sumergirnos de lleno en lo que es, y quién mejor que el sitio web oficial para darnos la definición. WebAssembly, abreviado como Wasm, es un formato de instrucción binaria para una máquina virtual basada en pilas. Wasm está diseñado como un objetivo de compilación portátil para lenguajes de programación, permitiendo la implementación en la web para aplicaciones de cliente y servidor. Y esto es una creación colaborativa, y estoy muy emocionado por esto en particular.

Pero cuando pensamos en WebAssembly, quiero aclarar un par de cosas. En primer lugar, WebAssembly no es un lenguaje de programación, y me he encontrado pensando esto también. Quiero ir y aprender WebAssembly, pero no puedo aprenderlo de la misma manera que diría React. No es un marco de trabajo de front-end que aprendemos y aplicamos. Lo que es WebAssembly es un estándar para bytecode de bajo nivel. Es un objetivo de compilación, y podrías pensar, ¿qué es un objetivo de compilación? Es algo que usamos mucho tiempo cuando computamos. Es un estándar que tomamos nuestro código, digamos en Go o Rust o C++, lo compilamos o lo traducimos a WebAssembly, que luego podemos ejecutar en el navegador. Y quiero mostrarles un par de ejemplos de WebAssembly ejecutándose en el navegador, que son bastante divertidos. Es posible que hayan oído hablar de archive.org o, saben, la Máquina del Tiempo. Tienen una biblioteca de software antiguo que puedes ejecutar, por ejemplo, con DOSBox en WebAssembly, como juegos antiguos. Por cierto, pequeña nota, si estás dando una charla como esta, no vayas e investigues esto, porque vas a pasar un

2. WebAssembly para el Desarrollo de Software

Short description:

Prince of Persia sigue siendo uno de mis favoritos. WebAssembly permite ejecutar algoritmos de compresión de imágenes eficientes y de bajo nivel en el navegador. No son solo algoritmos, sino también entornos completos como Node.js. WebAssembly del lado del servidor con WASI permite ejecutar WebAssembly en cualquier lugar. WASI proporciona acceso a recursos del sistema sin ser un sistema operativo. Wasmtime es uno de los entornos de ejecución de WebAssembly más prolíficos.

Pasé mucho tiempo jugando a estos juegos también. Prince of Persia sigue siendo uno de mis favoritos. Pero no es solo para juegos. También es para software de alta gama. Por ejemplo, Squoosh es un software que es un software en línea en el navegador que te permite ejecutar algoritmos de compresión de imágenes de bajo nivel, realmente eficientes. Ahora, podrías pensar, bueno, ¿no puedo hacer eso en JavaScript? Y por supuesto que puedes. Pero lo increíble de esto es que hace posible hacer estas compresiones de imágenes de una manera realmente eficiente en lugares donde JavaScript podría ser un lenguaje no ideal para la compresión de imágenes. Así que puedes tomar tus algoritmos preexistentes en C o C++ y ejecutarlos en el navegador. Pero no son solo algoritmos, son entornos completos. Es posible que hayas oído hablar de StackBlitz. Este es un proyecto que te permite hacer programación en el navegador, pero está ejecutando un runtime de Node.js en WebAssembly. No tu motor de JavaScript del navegador, un runtime de Node.js. Y esto puede ser tan grande como un software completo. Algunas personas tienen LibreOffice, si estás familiarizado con él. Es un software de tipo Microsoft Office de código abierto que ejecuta código para código en el navegador. Es una descarga de 300 megabytes, pero aún me parece increíble que puedas ejecutar esto en tu navegador.

Pero OK, Ramón, has estado hablando de todas estas cosas del navegador. ¿Qué pasa con el WebAssembly del lado del servidor? Seguramente WebAssembly no puede ejecutarse en cualquier lugar. Y tendrías razón, excepto que las personas que han estado trabajando en este estándar han estado haciendo cosas increíbles. WebAssembly con una interfaz de sistema o WASI nos permite tener estas interfaces de sistema para que podamos ejecutar WebAssembly prácticamente en cualquier lugar. Ahora, si estás familiarizado con ello, por cierto, tienes que ver esta guía que he enlazado aquí de Lynn Clark. Ha hecho esta guía ilustrada para WebAssembly, y es increíble. Entonces, la forma en que funciona un programa es que necesita interactuar con los recursos del sistema, que muchas veces están protegidos por un kernel. Así que el kernel hará cosas como darte acceso a tu sistema de archivos y otros recursos de tu computadora. Entonces, lo que WASI nos permite hacer es tener estos y tener acceso a estas llamadas al sistema. Pero para ser claro, no es un sistema operativo. Voy a dejar que ellos lo expliquen mejor de lo que puedo. Del proyecto Wasmtime, es una API proporcionada por el proyecto Wasmtime que proporciona acceso a varias características similares a las de un sistema operativo, incluyendo archivos, sistemas de archivos, sockets de Berkeley, relojes, números aleatorios. Es increíble. Entonces, lo que puedes hacer actualmente cuando ejecutas programas es que tomas tu código C, lo traduces o lo compilas a elf para Linux, ejecutable portátil para Windows o Mac o para Mac, lo cual está muy bien, pero cuando se trata de WebAssembly, ahora podemos tomar nuestro código C, crear un binario Wasm o WebAssembly, que luego puede ser ejecutado en cualquier sistema operativo con esta parte muy importante aquí, un runtime de WebAssembly. Voy a repasar rápidamente un par de ejemplos de estos, porque por supuesto mencioné Wasmtime,

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

Domain Driven Design with Vue Applications
Vue.js London 2023Vue.js London 2023
14 min
Domain Driven Design with Vue Applications
Top Content
Introduction to Domain Driven Design- What is DDD?- Key principles of DDD- Benefits of using DDD in web application developmentDomain Modeling in Vue 3 Applications- How to design and implement domain models in Vue 3- Strategies for integrating domain logic with Vue's reactive data model and component-based architectureBest Practices for Implementing DDD in Vue 3- Strategies for organizing code in a way that follows DDD principles- Techniques for reducing coupling between domain and application logic- Tips for testing and debugging domain logic in Vue 3 applications
How to Share Code between React Web App and React Native Mobile App in Monorepo
React Summit 2022React Summit 2022
7 min
How to Share Code between React Web App and React Native Mobile App in Monorepo
Usually creating web and mobile apps require different tech stacks, and it is pretty hard to share code. This talk will show how I added a React web app and a React Native mobile app in the same monorepo using Nx, and how I optimized codeshare between react web app and react native mobile app.
The Next Wave of Web Frameworks is BYOJS
JSNation 2022JSNation 2022
23 min
The Next Wave of Web Frameworks is BYOJS
Web application development has had many shifts over the lifetime of the web. From server-side applications with a sprinkle of JavaScript to Single Page Applications built entirely with JavaScript. Now we’re heading back to where many new web frameworks build for static first, with JavaScript added as needed. This talk covers building web applications with JavaScript through the lens of Astro, a static site generator where the choice of JavaScript framework is uniquely yours.
MIDI in the Browser... Let's Rock the Web!
JSNation 2022JSNation 2022
28 min
MIDI in the Browser... Let's Rock the Web!
If you own an electronic music instrument made in the last 3 decades, it most likely supports the MIDI protocol. What if I told you that it is possible to interact with your keytar or drum machine directly from your beloved browser? You would go crazy, right? Well, prepare to do so…With built-in support in Chrome, Firefox and Opera, this possibility is now a reality. This talk will introduce the audience to the Web MIDI API and to my own WEBMIDI.js library so you can get rockin' fast.Web devs, man your synths!
Using Next.JS and Redux for Epic Noscript Web Apps
React Advanced Conference 2021React Advanced Conference 2021
21 min
Using Next.JS and Redux for Epic Noscript Web Apps
A short exploration of a method for building websites that work without JS, while still enjoying the convenience of modern frontend and backend technologies - with live coding!
Reusing App State in React Native with Recoil
React Advanced Conference 2021React Advanced Conference 2021
24 min
Reusing App State in React Native with Recoil
A group of volunteers all over the world is working on React and React Native apps for the ADHD America program (non-for profit organization). In our work we use Recoil - quite a new React state management tool that looks quite promising. I'll show how we use it in both apps - for web and for mobile and explain why we decided to try it.

Workshops on related topic

Web Accessibility in JavaScript Apps
React Summit 2022React Summit 2022
161 min
Web Accessibility in JavaScript Apps
Workshop
Sandrina Pereira
Sandrina Pereira
Often we see JavaScript damaging the accessibility of a website. In this workshop, you’ll learn how to avoid common mistakes and how to use JS in your favor to actually enhance the accessibility of your web apps!
In this workshop we’ll explore multiple real-world examples with accessibility no-nos, and you'll learn how to make them work for people using a mouse or a keyboard. You’ll also learn how screen readers are used, and I'll show you that there's no reason to be afraid of using one!
Join me and let me show you how accessibility doesn't limit your solutions or skills. On the contrary, it will make them more inclusive!
By the end, you will:- Understand WCAG principles and how they're organized- Know common cases where JavaScript is essential to accessibility- Create inclusive links, buttons and toggleble elements- Use live regions for errors and loading states- Integrate accessibility into your team workflow right away- Realize that creating accessible websites isn’t as hard as it sounds ;)
Build a Universal Reactive Data Library with Starbeam
JSNation 2023JSNation 2023
66 min
Build a Universal Reactive Data Library with Starbeam
WorkshopFree
Yehuda Katz
Yehuda Katz
This session will focus on Starbeam's universal building blocks. We'll use Starbeam to build a data library that works in multiple frameworks.We'll write a library that caches and updates data, and supports relationships, sorting and filtering.Rather than fetching data directly, it will work with asynchronously fetched data, including data fetched after initial render. Data fetched and updated through web sockets will also work well.All of these features will be reactive, of course.Imagine you filter your data by its title, and then you update the title of a record to match the filter: any output relying on the filtered data will update to reflect the updated filter.In 90 minutes, you'll build an awesome reactive data library and learn a powerful new tool for building reactive systems. The best part: the library works in any framework, even though you don't think about (or depend on) any framework when you built it.
Table of contents- Storing a Fetched Record in a Cell- Storing multiple records in a reactive Map- Reactive iteration is normal iteration- Reactive filtering is normal filtering- Fetching more records and updating the Map- Reactive sorting is normal sorting (is this getting a bit repetitive?)- Modelling cache invalidation as data- Bonus: reactive relationships
Build Web3 apps with React
React Summit 2022React Summit 2022
51 min
Build Web3 apps with React
WorkshopFree
Shain Dholakiya
Shain Dholakiya
The workshop is designed to help Web2 developers start building for Web3 using the Hyperverse. The Hyperverse is an open marketplace of community-built, audited, easy to discover smart modules. Our goal - to make it easy for React developers to build Web3 apps without writing a single line of smart contract code. Think “npm for smart contracts.”
Learn more about the Hyperverse here.
We will go over all the blockchain/crypto basics you need to know to start building on the Hyperverse, so you do not need to have any previous knowledge about the Web3 space. You just need to have React experience.
Building Modern CMS Driven Web Applications with Strapi the OSS Headless CMS
React Advanced Conference 2021React Advanced Conference 2021
159 min
Building Modern CMS Driven Web Applications with Strapi the OSS Headless CMS
Workshop
Daniel Madalitso Phiri
Daniel Madalitso Phiri
In this workshop, we'll build out a fully functional website and integrated blog with Next.js and Strapi.

Table of contents:
- An introduction to Headless CMS and supported architectures
- Getting up and Running with Strapi and Next.js
- Integrating Blog functionality into a Next.js app
- Deploying your Next.js and Strapi Apps Bonus
- Implementing content previews with Next.js

Prerequisites:Basic React Knowledge Basic knowledge of Node.js and npm Basic Web Concepts.