Pantalla de carga

Starter pack

En las experiencias 3D, es com煤n tener modelos complejos y texturas grandes. Esto puede llevar a tiempos de carga largos. Para evitar tener una pantalla en blanco y malas primeras impresiones, podemos a帽adir una pantalla de carga.

Personalmente pienso que cuando sea posible, una pantalla de carga deber铆a evitarse (a menos que sea una elecci贸n de dise帽o). Optimizar modelos y texturas deber铆a considerarse primero.

Pero a veces no tienes elecci贸n, e incluso los modelos optimizados pueden permanecer grandes o puedes tener muchos de ellos. En este caso, una pantalla de carga puede ser una buena soluci贸n.

Suspense

Suspense es un componente wrapper de React que te permite renderizar un componente de reserva mientras esperas a que se carguen datos.

Esos datos en las aplicaciones tradicionales generalmente se refiere a obtenci贸n de datos o carga dividida de c贸digo. Pero en React Three Fiber, podemos usarlo para esperar a que se carguen modelos y texturas.

El hook useLoader utiliza promesas para cargar modelos y texturas. As铆 que podemos usar Suspense para esperar a que se resuelvan.

En el paquete inicial he a帽adido 4 modelos en public/models/ de +3MB cada uno. (Lo cual es mucho para una aplicaci贸n web ya que todos contienen las mismas animaciones y podr铆an/deber铆an ser optimizados) Eso nos permitir谩 ver c贸mo funciona Suspense.

Cuando recargo, tenemos una pantalla en blanco larga antes de que se carguen los modelos. Esto no es una buena experiencia de usuario, los usuarios podr铆an pensar que la aplicaci贸n est谩 rota y irse.

Si est谩s trabajando localmente o tienes los modelos en cach茅 en tu navegador, podr铆as no ver la pantalla en blanco.

Para forzar la recarga de los recursos, puedes deshabilitar la cach茅 en la pesta帽a Network de las herramientas de desarrollo de tu navegador.

Tambi茅n puedes ralentizar la red con la opci贸n de Throttling.

Disable cache and Throttle network

Ahora todos deber铆amos ver la pantalla en blanco, vamos a a帽adir un componente Suspense con una propiedad fallback:

import { Canvas } from "@react-three/fiber";
import { Experience } from "./components/Experience";
import { Suspense } from "react";

const CubeLoader = () => {
  return (
    <mesh>
      <boxGeometry />
      <meshNormalMaterial />
    </mesh>
  );
};

function App() {
  return (
    <>
      <Canvas camera={{ position: [-4, 4, 12], fov: 30 }}>
        <Suspense fallback={<CubeLoader />}>
          <group position-y={-1}>
            <Experience />
          </group>
        </Suspense>
      </Canvas>
    </>
  );
}

export default App;

Nuestro componente fallback es un simple cubo, no es la pantalla de carga m谩s atractiva, pero es suficiente para entender c贸mo funciona Suspense.

Cuando recargamos, podemos ver que el cubo se muestra mientras se est谩n cargando los modelos. Cuando est谩n cargados, el cubo es reemplazado por el componente Experience.

Preload

Un problema com煤n que puedes enfrentar es que tus recursos no se requieran de inmediato. Por ejemplo, puedes tener un modelo que se carga solo cuando el usuario hace clic en un bot贸n. Por lo tanto, no ser谩 tomado en cuenta por Suspense.

Eso puede llevar a que el componente fallback se muestre nuevamente cuando se requiera el recurso. Para evitar eso, podemos usar la funci贸n preload de los diferentes Drei loaders.

End of lesson preview

To get access to the entire lesson, you need to purchase the course.