---
title: Lazy loading y optimizacion del front
section: performance
slug: lazy-loading
description: "Tecnicas de lazy loading en PrestaShop: imagenes, modulos, JavaScript diferido, Core Web Vitals y optimizacion del front."
keywords: prestashop lazy loading imagenes defer async javascript core web vitals LCP CLS FID optimizacion front
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/performance/lazy-loading"
---

# Lazy loading y optimizacion del front

> Tecnicas de lazy loading en PrestaShop: imagenes, modulos, JavaScript diferido, Core Web Vitals y optimizacion del front.

El rendimiento del front impacta directamente en conversiones y SEO. Google mide Core Web Vitals (LCP, CLS, FID/INP) y penaliza tiendas lentas. Lazy loading y carga diferida son tecnicas esenciales.

## Lazy loading de imagenes

*Implementar lazy loading nativo*

```text
METODO 1: ATRIBUTO NATIVO loading="lazy"
- Soportado en todos los navegadores modernos
- En templates .tpl del tema:
  <img src="{$product.cover.medium.url}" loading="lazy" alt="{$product.name}">
- NO usar en imagenes above-the-fold (hero, logo, primer producto)
  → Estas deben cargar inmediatamente

METODO 2: INTERSECTION OBSERVER (JS)
- Para control mas fino o navegadores legacy
- Usa data-src en lugar de src
- JS detecta cuando la imagen entra en viewport
- Reemplaza data-src por src

EN PRESTASHOP CLASSIC
- Las imagenes de listado de productos NO tienen lazy loading por defecto
- Hay que modificar el template:
  themes/classic/templates/catalog/_partials/miniatures/product.tpl
- Añadir loading="lazy" al tag <img>

EN HUMMINGBIRD (PS 9)
- Lazy loading nativo incluido por defecto
- Tambien usa srcset para imagenes responsive
- Formato WebP automatico si esta disponible
```

## JavaScript defer y async

*Carga diferida de JavaScript*

```php
<?php

// ── Registrar JS con prioridad baja (se carga al final) ──
public function hookActionFrontControllerSetMedia(): void
{
    // priority: 200 = se carga despues de los scripts core
    $this->context->controller->registerJavascript(
        'mymodule-analytics',
        'modules/' . $this->name . '/views/js/analytics.js',
        [
            'position'  => 'bottom',   // Antes de </body>
            'priority'  => 200,        // Baja prioridad
            'attribute' => 'defer',    // defer = ejecutar despues del parse
        ]
    );

    // async = descargar en paralelo, ejecutar cuando este listo
    $this->context->controller->registerJavascript(
        'mymodule-chat',
        'modules/' . $this->name . '/views/js/chat.js',
        [
            'position'  => 'bottom',
            'priority'  => 300,
            'attribute' => 'async',
        ]
    );
}

// ── DIFERENCIA defer vs async ──
// defer: descarga en paralelo, ejecuta EN ORDEN despues del HTML parse
// async: descarga en paralelo, ejecuta INMEDIATAMENTE (sin orden)
// → defer para scripts que dependen de otros
// → async para scripts independientes (analytics, chat)

// ── Inline JS critico ──
$this->context->controller->registerJavascript(
    'mymodule-critical',
    'modules/' . $this->name . '/views/js/critical.js',
    [
        'position' => 'head',       // En <head>
        'priority' => 10,           // Alta prioridad
        'inline'   => true,         // Inline, sin request HTTP
    ]
);
```

## Core Web Vitals

| Metrica | Que mide | Objetivo | Causa comun en PS |
| --- | --- | --- | --- |
| LCP (Largest Contentful Paint) | Tiempo hasta que el elemento mas grande es visible | < 2.5s | Imagenes grandes sin optimizar, TTFB lento |
| CLS (Cumulative Layout Shift) | Desplazamiento visual inesperado | < 0.1 | Imagenes sin width/height, banners que aparecen tarde |
| INP (Interaction to Next Paint) | Respuesta a interacciones del usuario | < 200ms | JS bloqueante, handlers pesados en el carrito |
| FCP (First Contentful Paint) | Primer contenido pintado | < 1.8s | CSS render-blocking, fuentes externas |
| TTFB (Time to First Byte) | Tiempo hasta primer byte del servidor | < 0.8s | Queries lentas, sin cache de pagina, hosting lento |

## Optimizaciones avanzadas

*Checklist de optimizacion front*

```text
IMAGENES
✅ Formato WebP (30% menos que JPEG)
✅ Lazy loading en imagenes below-the-fold
✅ Atributos width y height en TODOS los <img> (evita CLS)
✅ srcset para imagenes responsive
✅ Comprimir con tinypng o squoosh

CSS
✅ Critical CSS inline en <head> (above-the-fold)
✅ Resto de CSS con media="print" onload (carga diferida)
✅ Eliminar CSS no usado (PurgeCSS)
✅ Activar CCC en PS (combinar + minificar)

JAVASCRIPT
✅ defer/async en scripts no criticos
✅ Mover JS al final del body
✅ Eliminar jQuery si usas Hummingbird
✅ Code splitting: cargar modulos JS solo donde se usan
✅ Minimizar third-party scripts (analytics, chat, ads)

SERVIDOR
✅ HTTP/2 o HTTP/3 habilitado
✅ Gzip o Brotli compresion
✅ Cache headers (Cache-Control, ETag)
✅ CDN para assets estaticos
✅ OPcache para PHP
✅ Redis o Memcached para cache de objetos

FUENTES
✅ font-display: swap (evita FOIT)
✅ Preload fuentes criticas: <link rel="preload" as="font">
✅ Alojar fuentes localmente (no Google Fonts externo)
✅ Subset: solo caracteres necesarios (latin vs full unicode)
```


---

*Fuente: [https://ayudaprestashop.es/performance/lazy-loading](https://ayudaprestashop.es/performance/lazy-loading). Version Markdown generada automaticamente para consumo por LLMs.*
