Dos capas de velocidad: Liquid (Servidor) + Front-End (Navegador)
La velocidad de la tienda Shopify tiene dos capas distintas. Optimización de líquidos acelera la generación de HTML del lado del servidor, reduciendo TTFB. Optimización del front-end acelera lo que hace el navegador con ese HTML, reduciendo LCP, TBT e INP.
Thunder Page Speed Optimizer maneja la capa frontal: aplazar JavaScript que bloquea el renderizado, optimizando Entrega de CSSy gestionar el orden de carga de recursos. Este artículo cubre la capa del lado del servidor: cómo hacer que sus plantillas de Liquid generen HTML más rápido.
Realiza una prueba de velocidad en tu tienda para ver ambas capas en acción. Si TTFB está por encima de 800 ms, la optimización de Liquid debería ser su primera prioridad. Si TTFB ya es rápido pero LCP/TBT son lentos, arreglando recursos que bloquean el renderizado con Thunder tendrá el mayor impacto.
Cómo funciona el proceso de renderizado líquido de Shopify
Comprender el proceso de renderizado le ayuda a saber dónde los esfuerzos de optimización marcan la diferencia:
- Llega la solicitud — Shopify recibe la solicitud HTTP del navegador
- Coincidencia de rutas — Shopify determina qué plantilla representar (producto, colección, página, etc.)
- Obtención de datos — Shopify carga datos de productos, datos de colecciones, configuración y metafields de la base de datos
- Procesamiento de líquidos : el motor de plantillas procesa todas las etiquetas, bucles, condicionales y filtros de Liquid.
- Representación de sección : cada sección de la plantilla se procesa de forma independiente
- Ensamblaje HTML : las secciones procesadas se combinan en el documento HTML final
- Respuesta enviada : el HTML completo se envía al navegador (aquí es cuando se mide el TTFB)
Los pasos 3-6 es donde la calidad del código Liquid más importa. Las plantillas complejas con bucles excesivos, acceso intensivo a datos y anidamiento profundo de snippets extienden estos pasos de 50ms a 500ms+.
La idea clave: cada etiqueta de Liquid se ejecuta en cada carga de página. A diferencia del JavaScript de front-end que puede ser almacenado en caché, diferido o de carga diferida, Liquid se vuelve a ejecutar desde cero en cada solicitud. Esto hace que la optimización del lado del servidor sea compuesta — una mejora de 100ms en Liquid significa 100ms ahorrados en cada vista de página. Obtenga más información sobre cómo TTFB encaja en el panorama general en nuestra Guía de optimización de TTFB.
Creación de perfiles de rendimiento líquido con Theme Inspector
El Inspector de temas de Shopify La extensión de Chrome es la mejor herramienta para identificar código Liquid lento. A continuación se explica cómo utilizarlo de forma eficaz:
Configuración
- Instale "Shopify Theme Inspector for Chrome" desde Chrome Web Store
- Inicie sesión en su administrador de Shopify en el mismo navegador
- Navegue hasta el escaparate de su tienda (no el administrador, la URL real de la tienda)
- Haga clic en el ícono de extensión del Inspector de temas → agrega
?pb=1a la URL - El gráfico de llamas del perfilador aparece en la parte inferior de la página.
Qué buscar
- Bloques anchos en el gráfico de llamas : representan archivos de Liquid o bloques de código que tardan más en renderizarse
- Secciones >50ms : cualquier sección que tarde más de 50 ms es candidata a optimización
- Llamadas de renderizado de fragmentos : renderizaciones de fragmentos de alta frecuencia que se repiten docenas de veces
- Tiempo total de renderizado líquido : se muestra en la parte superior del generador de perfiles. Menos de 200 ms es bueno; más de 500 ms necesita trabajo
Perfile varios tipos de páginas: página de inicio, páginas de productos, páginas de colección. Cada uno tendrá diferentes obstáculos. Las páginas de colección suelen tener el tiempo de renderizado de Liquid más alto debido a los bucles de productos; consulte nuestra guía de velocidad de la página de colección para obtener consejos específicos de la página.
Errores comunes en el rendimiento de los líquidos (y cómo solucionarlos)
1. Bucles anidados (el factor determinante del rendimiento número uno)
Un bucle dentro de un bucle multiplica las iteraciones exponencialmente. Este es el problema de rendimiento de Liquid más común y de mayor impacto:
{% comment %} ❌ BAD: 50 products × 10 variants = 500 iterations {% endcomment %}
{% for product in collection.products %}
{% for variant in product.variants %}
{% if variant.available %}
<option>{{ variant.title }} - {{ variant.price | money }}</option>
{% endif %}
{% endfor %}
{% endfor %}
{% comment %} ✅ BETTER: Limit products, handle variants client-side {% endcomment %}
{% for product in collection.products limit: 12 %}
<div data-variants='{{ product.variants | json }}'>
{{ product.title }}
</div>
{% endfor %} Solución: Limite las iteraciones del bucle externo, mueva el procesamiento interno a JavaScript cuando sea posible o aplane la estructura de datos usando json filtrar y procesar en el front-end.
2. Acceso excesivo a objetos
Cada vez que accedes a una propiedad de objeto Liquid, Shopify realiza una búsqueda. Acceder repetidamente a la misma propiedad hace perder tiempo de procesamiento:
{% comment %} ❌ BAD: Accessing product.title 6 times {% endcomment %}
<h1>{{ product.title }}</h1>
<meta property="og:title" content="{{ product.title }}" />
<title>{{ product.title }} | {{ shop.name }}</title>
<span class="breadcrumb">{{ product.title }}</span>
<script>dataLayer.push({'name': '{{ product.title }}'})</script>
{% comment %} ✅ BETTER: Assign once, reference the variable {% endcomment %}
{% assign product_title = product.title %}
<h1>{{ product_title }}</h1>
<meta property="og:title" content="{{ product_title }}" />
<title>{{ product_title }} | {{ shop.name }}</title>
<span class="breadcrumb">{{ product_title }}</span>
<script>dataLayer.push({'name': '{{ product_title }}'})</script> Regla general: Si accede a la misma propiedad de objeto más de 3 veces, asígnela primero a una variable. Esto tiene un impacto especial dentro de los circuitos donde los ahorros se multiplican.
3. Consultas de recopilación ilimitadas
Cargar una colección completa cuando solo necesitas unos pocos productos obliga a Shopify a buscar y procesar datos innecesarios:
{% comment %} ❌ BAD: Loads all products in the collection {% endcomment %}
{% for product in collections["best-sellers"].products %}
{{ product.title }}
{% endfor %}
{% comment %} ✅ BETTER: Limit to what you actually display {% endcomment %}
{% for product in collections["best-sellers"].products limit: 8 %}
{{ product.title }}
{% endfor %} Impacto: Una colección con 500 productos tarda mucho más en iterarse que una limitada a 8. Utilice siempre
Límite limit: cuando sabes cuántos artículos necesitas.
4. Fragmentos profundamente anidados
Cada uno render tiene gastos generales. Una sección que representa un fragmento, que representa otro fragmento, que representa otro fragmento más, crea una cadena de sobrecarga de procesamiento:
{% comment %} ❌ BAD: 3 levels of nesting for each product card {% endcomment %}
{% comment %} section → product-card snippet → price snippet → badge snippet {% endcomment %}
{% render "product-card", product: product %}
{% comment %} Inside product-card.liquid: {% endcomment %}
{% render "price-display", variant: product.selected_or_first_available_variant %}
{% comment %} Inside price-display.liquid: {% endcomment %}
{% render "sale-badge", compare_price: variant.compare_at_price %}
{% comment %} ✅ BETTER: Flatten into fewer, larger snippets {% endcomment %}
{% render "product-card", product: product %}
{% comment %} product-card.liquid handles price and badge inline {% endcomment %} Mejores prácticas: Mantenga el anidamiento de fragmentos en 2 niveles como máximo. Si encuentra más de 3 niveles de anidamiento, aplane los fragmentos internos en su padre.
5. Filtros de líquidos pesados en grandes conjuntos de datos
Filtros de líquidos como where, map, y sort iterar a través de las colecciones del lado del servidor. Encadenar múltiples filtros en grandes conjuntos de datos complica el procesamiento:
{% comment %} ❌ SLOW: Three filter passes on a large collection {% endcomment %}
{% assign available = collection.products | where: "available", true %}
{% assign tagged = available | where: "tags", "featured" %}
{% assign sorted = tagged | sort: "price" %}
{% comment %} ✅ FASTER: Use a single limited loop with conditionals {% endcomment %}
{% for product in collection.products limit: 50 %}
{% if product.available and product.tags contains "featured" %}
{% comment %} Render product {% endcomment %}
{% endif %}
{% endfor %} Mejores prácticas de rendimiento de líquidos
Más allá de solucionar errores específicos, estas prácticas mantienen las plantillas de Liquid rápidas a medida que crece su tienda:
Usar paginación para colecciones grandes
Siempre ajuste los bucles de colección en etiquetas de paginación. Sin paginación, Shopify intenta procesar todos los productos a la vez:
{% paginate collection.products by 24 %}
{% for product in collection.products %}
{% comment %} Render product card {% endcomment %}
{% endfor %}
{{ paginate | default_pagination }}
{% endpaginate %} Aprovechar la API de representación de secciones
Shopify API de representación de secciones te permite actualizar secciones individuales a través de AJAX sin recargar toda la página. Utilice esto para:
- Actualizaciones del cajón del carrito (volver a representar solo la sección del carrito)
- Cambios en la variante del producto (volver a representar la información del producto sin recargar la página completa)
- Filtrado de colecciones (actualice solo la sección de la cuadrícula de productos)
- Agregar rápidamente al carrito (volver a representar el recuento del carrito sin navegación)
Esto reduce la carga del servidor porque solo se procesa una sección en lugar de toda la plantilla de página.
Carga de sección condicional
No es necesario representar todas las secciones para todos los visitantes. Utilice condicionales líquidos para omitir secciones pesadas cuando no sean relevantes:
{% comment %} Only render recently viewed if there are items to show {% endcomment %}
{% if section.settings.show_recently_viewed %}
{% comment %} Render recently viewed section {% endcomment %}
{% endif %}
{% comment %} Skip heavy related products section on mobile if configured {% endcomment %}
{% unless section.settings.hide_on_mobile and request.user_agent contains "Mobile" %}
{% comment %} Render related products {% endcomment %}
{% endunless %} Minimizar el acceso a metacampos
Las búsquedas de metacampos requieren consultas de bases de datos. Si utiliza metacampos ampliamente, agrupe su acceso:
{% comment %} ❌ BAD: Multiple metafield accesses scattered through template {% endcomment %}
<p>{{ product.metafields.custom.material }}</p>
<!-- ... 50 lines later ... -->
<span>{{ product.metafields.custom.material }}</span>
{% comment %} ✅ BETTER: Assign once at the top {% endcomment %}
{% assign material = product.metafields.custom.material %}
{% assign care_instructions = product.metafields.custom.care %}
{% assign origin = product.metafields.custom.origin %} Optimización del lado del servidor (líquido) frente a optimización del front-end
| Aspecto | Optimización de líquidos | Front-End (Thunder) |
|---|---|---|
| Qué afecta | TTFB (tiempo de respuesta del servidor) | LCP, OTC, INP, CLS |
| Donde corre | Servidores de Shopify | Navegador del visitante |
| Impacto típico | Reducción de TTFB de 50-300 ms | Mejora de renderizado de 1 a 3 segundos |
| Implementación | Ediciones de código de tema (trabajo de desarrollador) | Automático (instalar y configurar) |
| Mantenimiento | Manual: vuelva a auditar cuando cambie el tema | Automático: se adapta a los cambios |
Para máxima velocidad: optimice las plantillas de Liquid para obtener TTFB más rápido, luego use Thunder para optimización de entrega front-end. Ver nuestro servicio de optimización para obtener ayuda práctica.
Lista de verificación de optimización de líquidos de Shopify
Resuelva estos problemas en orden: primero el perfil y luego solucione los problemas más importantes:
- Instalar el inspector de temas de Shopify : perfila tu página de inicio, página de producto y página de colección. Tenga en cuenta el tiempo total de renderizado y las secciones lentas.
- Reparar bucles anidados : busque patrones de bucle dentro de bucle y aplánelos o agregue límites.
- Agregar
limit:a todos los bucles de recolección : nunca itere una colección completa sin un límite explícito. - Uso
assignpara valores repetidos : cualquier propiedad a la que se acceda más de 3 veces debe asignarse a una variable. - Aplanar anidamiento de fragmentos : siga anidando en 2 niveles como máximo. Fragmentos en línea profundamente anidados.
- Agregar paginación : todas las plantillas de colección deben utilizar
paginate. - Instale Thunder para optimización del front-end : complemente sus mejoras de Liquid con optimización automática de JS/CSS. Instalar ahora o ver desglose completo de funciones
- Volver a perfilar después de cambios : ejecuta Theme Inspector nuevamente y compara el tiempo total de renderizado. Apunta a menos de 200 ms.
Preguntas frecuentes sobre la optimización de Shopify Liquid
¿Cómo afecta el renderizado líquido a la velocidad de la tienda Shopify?
Liquid es el lenguaje de plantillas del lado del servidor de Shopify: se ejecuta en los servidores de Shopify antes de que el HTML se envíe al navegador. El código complejo de Liquid aumenta directamente el tiempo hasta el primer byte (TTFB) porque el servidor tarda más en generar la respuesta HTML. Los factores que afectan más al rendimiento incluyen bucles for anidados, acceso excesivo a objetos (llamar a product.title 20 veces en lugar de asignarlo una vez), fragmentos profundamente anidados y cargar objetos de colección completa cuando solo necesitas unos pocos productos. La optimización de Liquid reduce el tiempo de procesamiento del servidor entre 50 y 300 ms.
¿Qué es el Inspector de temas de Shopify y cómo lo uso?
El Shopify Theme Inspector es una extensión de Chrome que perfila el tiempo de renderizado de Liquid. Instálela desde la Chrome Web Store, abra su tienda mientras está conectado a su administración de Shopify y haga clic en el icono de la extensión. Muestra un gráfico de llama de qué archivos Liquid y bloques de código tardan más en renderizarse. Busque fragmentos o secciones que tarden más de 50ms; esos son sus objetivos de optimización. El perfilador funciona en tiendas de desarrollo y tiendas con la página de contraseña deshabilitada.
¿Debo usar fragmentos o secciones para componentes líquidos?
En términos de rendimiento, las secciones generalmente son mejores que los fragmentos profundamente anidados. La API de representación de secciones de Shopify 2.0 permite volver a representar secciones individuales sin recargar toda la página. Los fragmentos están bien para piezas pequeñas y reutilizables (iconos, componentes simples), pero evite anidar fragmentos a más de 2 niveles de profundidad. Cada llamada de procesamiento de fragmentos tiene una sobrecarga: una página que procesa más de 30 fragmentos será considerablemente más lenta que una que utilice menos secciones más grandes. La excepción: los fragmentos con renderizado condicional (solo renderizar cuando sea necesario) pueden ser más eficientes que las secciones que siempre se cargan.
¿Cómo puedo reducir los bucles de Liquid que ralentizan mi tienda Shopify?
Los mayores problemas de rendimiento de los bucles Liquid provienen de los bucles anidados y la iteración ilimitada. Primero, use siempre el parámetro 'limit': en lugar de recorrer todos los 500 productos en una colección, use 'for product in collection.products limit:12'. Segundo, evite los bucles anidados: un bucle de 50 productos con un bucle interno de 10 variantes crea 500 iteraciones. Tercero, mueva la lógica de filtrado al front-end con JavaScript cuando sea posible, en lugar de usar filtros Liquid where/map en grandes conjuntos de datos. Cuarto, use las etiquetas de paginación para limitar los datos que Shopify obtiene de la base de datos.
¿La cantidad de secciones de Shopify afecta la velocidad de la página?
Sí, cada sección agrega tiempo de renderizado líquido. Una página de inicio con 15 secciones tarda más en renderizarse en el lado del servidor que una con 8 secciones. Sin embargo, el impacto varía significativamente: una sección de texto simple puede agregar entre 1 y 5 ms, mientras que una sección de "colección destacada" que carga 12 productos con datos variantes puede agregar entre 50 y 200 ms. El recuento total de secciones importa menos que lo que hace cada sección. Concéntrese en optimizar las secciones pesadas (colecciones, cuadrículas de productos, contenido dinámico) en lugar de reducir el recuento total de secciones ligeras.
¿Shopify almacena en caché el renderizado de Liquid?
Shopify utiliza una caché de borde de CDN para páginas completamente estáticas (como publicaciones de blog), pero la mayoría de las páginas de Shopify se renderizan dinámicamente: páginas de productos, páginas de colección, páginas de carrito y cualquier página con contenido personalizado. Esto significa que el código Liquid se ejecuta en la mayoría de las solicitudes a pesar de la CDN. Sin embargo, Shopify sí almacena en caché fragmentos de Liquid internamente utilizando un sistema de caché de fragmentos que reutiliza fragmentos renderizados cuando los datos subyacentes no han cambiado. Usted no puede controlar esta caché directamente, pero puede beneficiarse de ella manteniendo su código Liquid simple y evitando operaciones costosas que eluden la caché (como marcas de tiempo generadas dinámicamente o contenido aleatorio en cada carga).
¿Puede Thunder Page Speed Optimizer ayudar con el rendimiento de Liquid?
Thunder se centra en la optimización del front-end (aplazamiento de JavaScript, optimización de CSS, orden de carga de recursos) en lugar de la representación del lado del servidor de Liquid. Piense en ello como dos capas complementarias: la optimización líquida reduce el TTFB al hacer que el servidor genere HTML más rápido, mientras que Thunder optimiza lo que sucede después de que llega el HTML, posponiendo los recursos que bloquean el procesamiento y mejorando Core Web Vitals. Para obtener mejores resultados, optimice ambos: limpie las plantillas de Liquid para una respuesta más rápida del servidor y luego use Thunder para optimizar la entrega front-end.
Líquido más rápido = Primer byte más rápido = Todo más rápido
La optimización líquida es la base de la velocidad de la tienda Shopify. Cada milisegundo ahorrado en el renderizado del lado del servidor se traduce directamente en un TTFB más rápido, y un TTFB más rápido significa que todo lo posterior (renderizado, interactividad, carga visual) comienza antes. Las soluciones más impactantes suelen ser las más simples: limitar los bucles de recopilación, asignar valores repetidos y aplanar fragmentos anidados.
Para obtener una imagen completa de la velocidad, combine la optimización de Liquid con mejoras en la entrega frontal. manijas Thunder Page Speed Optimizer Aplazamiento de JavaScript, Optimización CSSy carga de recursos: la contraparte frontal del trabajo Liquid del lado del servidor.
Prueba tu tienda ahora para ver su TTFB actual e identificar oportunidades de optimización. Para obtener una estrategia de optimización completa, consulte nuestra guía completa de optimización de velocidad de Shopify.
Optimización de velocidad experta para tu tienda
Nuestro equipo se encarga de todo — optimización del tema, limpieza de apps, garantía de Core Web Vitals. La mayoría de tiendas optimizadas en 2 semanas.
✅ Garantía Core Web Vitals · ⚡ Entrega en 2 semanas · 🎁 6 meses de Thunder gratis
Desde €1.500 · Más información