Comenzamos con un nuevo capítulo en el que vamos a hablar sobre SSR
aplicado a Qwik.
Antes de empezar con el capítulo y mostraros sus caracterísiticas y como es su funcionamiento, lo ideal es saber que es exactamente SSR
.
SSR
? Definición.SSR
.Creamos un nuevo proyecto llamado 07-ssr para trabajar en el aspecto práctico de este capítulo.
SSR (Server-Side Rendering)
es una técnica en desarrollo web donde las páginas se generan y envían el contenido inicial de carga completamente desde el servidor al navegador del usuario en la primera etapa.
Esto hará que se realice la carga de las páginas de una manera más ligera, ya que no será necesario realizar solicitudes adicionales para obtener datos o contenido.
Entre las ventajas a destacar:
No todos son ventajas, también hay algún que otro inconveniente por utilizar esta técnica:
SSR
{#ssr-apply-with-qwik}Ahora que ya sabemos en que se basa SSR
y sus características principales, seguimos relacionando este concepto dentro de Qwik.
Este será uno de los conceptos fundamentales de Qwik que se diferencia de otras tecnologías.
Mientras que muchos frameworks tienen herramientas para acceder a un modo SSR
mediante configuraciones que en algunos casos son algo tediosas, Qwik ya lo trae por defecto.
El HTML vendrá proporcionado desde el servidor junto con los elementos esenciales que serán necesarios para iniciar nuestra aplicación.
Este comportamiento lo podemos ver a través de la pestaña de Response
(Herramientas de desarrollador
). Por eso lo de tener tanta velocidad y performance.
Ahora para poder plasmar estos conocimientos teóricos, vamos a añadir un ejemplo muy sencillo.
En el vamos a ver las diferentes etapas del ciclo de vida (veremos más detallado en el capítulo sobre los ciclos de vida en Qwik) y ahí es donde vamos a ver el comportamiento mediante SSR dentro de Qwik.
Creamos el proyecto con la plantilla en blanco (Empty App (QwikCity)...
) con el siguiente nombre 07-ssr.
Una vez que ya tenemos listo el proyecto y todas las dependencias instaladas, añadimos el siguiente código en src/routes/index.tsx
import { component$ } from "@builder.io/qwik";
export default component$(() => {
console.log("SERVIDOR: La primera vez que inicio la app, se muestra este mensaje:) ");
return (
<div>
<button onClick$={() => console.log("CLIENTE: Se ejecutará cuando hagamos CLICK. Mientras tanto no se carga esta parte del código")}>
Click para iniciar código
</button>
</div>
);
});
Podemos ver algunas novedades a través de este ejemplo, como por ejemplo el tema del evento onClick$
.
Esto lo veremos con más detalle en el capítulo de Eventos. Por el momento con entender que este evento se activa cuando hacemos click en el botón, es más que suficiente.
Analizando el código encontramos lo siguiente:
console.log
que se ejecutará si o si siempre en el servidor, ya que es parte de lo que compone la primera etapa.button
con un evento onClick$
registrado para que SI HACEMOS CLICK, muestre un registro en la consola del navegador.Una vez que ya entendemos las partes que construyen el componente, al iniciarse, lo que sería la primera carga, aplicando mediante SSR se va a descargar lo indispensable para poder iniciar la aplicación, nada más y el resultado inicial sería que se registra el mensaje en la consola del servidor (veremos con más detalle este proceso en los ciclos de vida en Qwik):
Aparte de mostrar el registro en el servidor, tendremos el HTML de la estructura y descargaremos información de la API, por si necesitamos su uso.
Abrimos las herramienta de desarrollador
de nuestro navegador y seleccionamos la pestaña Red
para ver lo que tenemos descargado en esta primera etapa.
En este punto, nos quedamos a la espera de que hagamos cualquier acción o interacción como pulsar el botón (NO LO HAGÁIS POR EL MOMENTO), que es lo que podríamos hacer en este caso, no habría más opciones.
Si realizamos la acción de click, tenemos la opción de descargar más código como el definido dentro del evento onClick$
que consiste en un nuevo registro en la consola:
<button
onClick$={() =>
console.log(
'CLIENTE: Se ejecutará cuando hagamos CLICK. Mientras tanto no se carga esta parte del código'
)
}
>
Click para iniciar código
</button>
Dentro de las herramientas de desarrollo
si miramos en los Elementos
, podemos ver la referencia del código Javascript que se descargará cuando realicemos la acción de click (NO LO EJECUTÉIS todavía):
El path con el código Javascript que se descargará en el caso de hacer click, lo encontramos dentro del atributo on:click
:
/src/routes_component_div_button_onclick_xoh0eog14zi.js#routes_...
Habiendo llegado a este punto y teniendo más claros los conceptos básicos, se puede dar por concluida la primera etapa donde se ha ejecutado el renderizado por el lado del Servidor (SSR).
A partir de ahora, cualquier evento que ocurra en nuestra aplicación (si hay un registro en la consola, alguna renderización, etc.), se ejecutará todo en el lado cliente, lo que sería en el navegador junto con las descargas y acciones a realizar.
La segunda etapa comienza cuando hacemos click en el botón (¡ahora si!), disparando el evento onClick$()
que hará que muestre el mensaje en la consola del NAVEGADOR
El código se va a descargar bajo demanda (por la acción del click) en el navegador y lo que hará es mostrar el mensaje en la consola del navegador, con el siguiente mensaje:
CLIENTE: Se ejecutará cuando hagamos CLICK. Mientras tanto no se carga esta parte del código
Y se visualiza de la siguiente forma:
Al hacer click, descarga el contenido en un fichero aparte, que corresponde a la referencia anterior cuyo path era:
/src/routes_component_div_button_onclick_xoh0eog14zi.js#routes...
y que podemos ver en la pestaña Red
dentro de las Herramientas de Desarrollo
:
Si no ejecutamos esta acción, su código no se descargará NUNCA, con lo que dejará sin mostrar el mensaje en la consola del navegador.
Y si seleccionamos la referencia, para ver su código descargado podremos ver que ahí se encuentra el registro que se muestra en la consola del navegador mediante la pestaña Respuesta
:
Como recordartorio, se visualiza de la siguiente forma en la consola:
Y con esto, tenemos lo básico y ensencial para entender este concepto, el de SSR (Server Side Rendering).
Ahora seguramente nos vengan a la cabeza las siguientes preguntas:
Quizás nos estemos cuestionando muchas cosas (y no es malo, es bueno tener dudas y preguntas a realizar) y por eso, mejor ir a la acción y obtener la respuesta:
2
como a continuación:Y observando la pestaña Red
podemos ver que no ha descargado nada nuevo, por lo que ya estamos viendo cual es su comportamiento, algo a tener en cuenta para futuras funcionalidades:
El código que encontráis es el resultado final de todo el proceso realizado durante el capítulo. Os recomiendo que vayáis haciendo los pasos poco a poco y paso a paso para ir interiorizando todos los conceptos.
El enlace lo tenéis a continuación:
https://shorten-up.vercel.app/3GGk2slwC4
En este punto hemos visto el comportamiento de SSR en Qwik con un ejemplo muy sencillo.
Es importante entender este apartado, ya que cuando lleguemos a trabajar con los ciclos de vida (fundamental en cualquier tecnología), entendiendo esto aunque sea de modo básico, nos hará comprender como se comportan las funciones que componen los ciclos de vida.
Estos ciclos de vida en Qwik, se trabajarán con las funciones useTask$
y useVisibleTask$
cuyo funcionamiento nos va a permitir trabajar de una forma más eficiente y segura, adaptándonos a las diferentes etapas de una aplicación en Qwik.