Dominar el rendimiento WooCommerce: ajuste de base de datos, caché Redis, corrección de cart fragments, optimización de imágenes y arquitectura headless.
ES

Optimización de rendimiento WooCommerce: La guía completa 2026

5.00 /5 - (20 votes )
Última verificación: 1 de mayo de 2026
16min de lectura
Guía
500+ proyectos WP
Experto WooCommerce

Un segundo de retraso en el tiempo de carga le cuesta a la tienda de e-commerce promedio un 7% en conversiones. Para una tienda WooCommerce que genera 50 000 EUR mensuales, eso se traduce en 3 500 EUR perdidos cada mes - 42 000 EUR al año que se evaporan porque las páginas cargan demasiado lento.

La optimización de rendimiento WooCommerce no es un lujo. Determina directamente cuántos ingresos genera tu tienda, dónde Google posiciona tus páginas de producto y si los visitantes completan sus compras o abandonan el carrito por frustración. Esta guía cubre cada capa de optimización, desde consultas a la base de datos hasta arquitectura headless, con resultados medibles en cada paso.

#Por qué el rendimiento de WooCommerce importa más que nunca

Los Core Web Vitals de Google son ahora una señal de clasificación confirmada, y las tiendas de e-commerce enfrentan el escrutinio más riguroso. Páginas de productos con LCP por encima de 2,5 segundos, cambios de diseño por imágenes de productos cargadas con retraso o interacciones lentas por JavaScript pesado - todo esto desencadena penalizaciones de posicionamiento en nichos competitivos.

Más allá del SEO, el impacto en el negocio es contundente:

  • Las tasas de conversión caen un 4,42% por cada segundo adicional de tiempo de carga
  • Las tasas de rebote aumentan un 32% cuando el tiempo de carga pasa de 1 a 3 segundos
  • El abandono de carrito se correlaciona directamente con la velocidad de la página de checkout - el 53% de los usuarios móviles se van si una página tarda más de 3 segundos
  • El valor medio de pedido disminuye conforme baja la velocidad de la página, porque las tiendas lentas no inspiran confianza

El efecto acumulativo es lo que más importa. Una tienda que carga en 1,5 segundos en lugar de 4,5 segundos no solo convierte un 10% mejor - se posiciona más alto, atrae más tráfico orgánico, convierte más de ese tráfico y genera valores de pedido más altos. La diferencia acumulada de ingresos puede alcanzar el 30-50% a lo largo de un año.

#La pila de rendimiento WooCommerce: comprender las capas

Cada solicitud de página WooCommerce pasa por múltiples capas, cada una añadiendo latencia:

  1. Resolución DNS → 50-150ms (elección de CDN y proveedor DNS)
  2. Handshake TLS → 50-100ms (configuración HTTP/2, TLS 1.3)
  3. Procesamiento del servidor → 200-2000ms (PHP, base de datos, WordPress, WooCommerce)
  4. Transferencia de red → 100-500ms (peso de página, compresión, CDN)
  5. Renderizado del navegador → 200-1000ms (CSS, JavaScript, imágenes, fuentes)

El procesamiento del servidor es donde las tiendas WooCommerce pierden más tiempo. Una página de producto WooCommerce típica sin optimizar ejecuta 300-800 consultas a la base de datos, carga 30-50 archivos PHP y ejecuta decenas de hooks de plugins - todo antes de que un solo byte llegue al navegador del visitante.

#Optimización de la base de datos: los cimientos

#Optimización de consultas

WooCommerce almacena los datos de productos en múltiples tablas: wp_posts, wp_postmeta, wp_terms, wp_term_relationships y tablas de búsqueda específicas de WooCommerce. La tabla wp_postmeta es el cuello de botella principal - una tienda con 5000 productos acumula fácilmente más de 500 000 filas en postmeta.

Índices críticos a añadir:

ALTER TABLE wp_postmeta ADD INDEX meta_value_index (meta_value(50));
ALTER TABLE wp_postmeta ADD INDEX compound_index (meta_key, meta_value(50));
ALTER TABLE wp_wc_product_meta_lookup ADD INDEX price_stock (min_price, stock_status);

Estos índices por sí solos pueden reducir los tiempos de consulta de listados de productos de 200-500ms a 10-30ms.

#Limpieza de transients y datos autoloaded

WooCommerce genera miles de transients para datos de productos, sesiones de carrito y cachés de API. Los transients expirados se acumulan e inflan la tabla wp_options.

-- Contar transients expirados
SELECT COUNT(*) FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();

-- Limpiar transients expirados
DELETE a, b FROM wp_options a, wp_options b
WHERE a.option_name LIKE '_transient_%'
AND a.option_name NOT LIKE '_transient_timeout_%'
AND b.option_name = CONCAT('_transient_timeout_', SUBSTRING(a.option_name, 12))
AND b.option_value < UNIX_TIMESTAMP();

Las opciones autoloaded son otro asesino silencioso. WordPress carga todas las opciones autoloaded en cada solicitud de página. WooCommerce y sus plugins frecuentemente hacen autoload de megabytes de datos serializados:

-- Comprobar tamaño de datos autoloaded
SELECT SUM(LENGTH(option_value)) as autoload_size
FROM wp_options WHERE autoload = 'yes';

Si los datos autoloaded superan 1MB, realiza una auditoría y establece las opciones grandes y poco utilizadas a autoload = 'no'.

#Gestión de sesiones WooCommerce

WooCommerce almacena las sesiones de clientes en la base de datos por defecto. Las tiendas con alto tráfico pueden acumular miles de filas de sesión, creando contención de bloqueos durante el checkout:

-- Comprobar tamaño de tabla de sesiones
SELECT COUNT(*) FROM wp_woocommerce_sessions;

-- Limpiar sesiones expiradas
DELETE FROM wp_woocommerce_sessions
WHERE session_expiry < UNIX_TIMESTAMP();

Para tiendas con más de 100 usuarios simultáneos, migra las sesiones a Redis para acceso concurrente sin bloqueos.

#Optimización de imágenes para catálogos de productos

Las imágenes de productos son típicamente el elemento más grande en las páginas WooCommerce y el elemento LCP (Largest Contentful Paint) principal. Su optimización proporciona la mejora de rendimiento más visible para los visitantes.

#Selección de formato: AVIF vs. WebP vs. JPEG

FormatoTamaño (base JPEG 500KB)Soporte de navegadoresCalidad
JPEG500KB100%Base
WebP175KB (-65%)97%Equivalente
AVIF125KB (-75%)93%Superior

Utiliza AVIF como formato primario con fallback a WebP y JPEG como fallback final:

<picture>
  <source srcset="producto.avif" type="image/avif">
  <source srcset="producto.webp" type="image/webp">
  <img src="producto.jpg" alt="Nombre del producto" width="800" height="800" loading="lazy">
</picture>

#Dimensiones de imágenes de productos y lazy loading

Cada imagen de producto debe tener atributos width y height explícitos para prevenir Cumulative Layout Shift (CLS). La primera fila visible de productos (típicamente 3-4 imágenes) debe cargarse con prioridad:

add_filter('wp_get_attachment_image_attributes', function($attr, $attachment, $size) {
    if (is_shop() || is_product_category()) {
        global $wp_query;
        if ($wp_query->current_post >= 4) {
            $attr['loading'] = 'lazy';
            $attr['decoding'] = 'async';
        } else {
            $attr['loading'] = 'eager';
            $attr['fetchpriority'] = 'high';
        }
    }
    return $attr;
}, 10, 3);

#Estrategias de caching: el enfoque de tres capas

#Capa 1: Object cache con Redis

Redis object cache es la optimización de servidor más impactante para WooCommerce. Almacena resultados de consultas a la base de datos, valores calculados y datos de productos WooCommerce en memoria.

Medición de impacto de tiendas reales:

MétricaSin RedisCon RedisMejora
Consultas DB por página280-50030-60-80%
TTFB (sin caché)600-1200ms150-300ms-75%
Uso de memoria PHP64-128MB32-64MB-50%
Carga CPU del servidorAltaBaja-60%

Configuración Redis para WooCommerce:

// wp-config.php
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_MAXTTL', 86400);
define('WP_REDIS_PREFIX', 'woo_');

define('WP_REDIS_IGNORED_GROUPS', ['counts', 'plugins']);

Monitoriza las tasas de acierto de Redis - un caché Redis WooCommerce saludable muestra un 85-95% de hit rate. Por debajo del 70% indica fragmentación de claves de caché o TTL demasiado corto.

#Capa 2: Full page cache

Full page caching almacena el HTML completamente renderizado de las páginas, evitando PHP y base de datos por completo para visitantes en caché - típicamente 20-50ms de TTFB.

Reglas de exclusión críticas para WooCommerce:

  • /carrito/ - Siempre dinámico
  • /finalizar-compra/ - Siempre dinámico
  • /mi-cuenta/ - Siempre dinámico
  • Cualquier URL con la cookie woocommerce_items_in_cart establecida
  • Solicitudes POST
  • URLs con parámetros add-to-cart, removed_item, undo_item

#Capa 3: Fragment cache

Fragment caching almacena componentes individuales de página que son costosos de generar pero compartidos entre páginas - menús de navegación, widgets del pie de página, árboles de categorías y contadores de filtros de productos.

function get_cached_category_tree() {
    $cache_key = 'woo_category_tree_' . get_locale();
    $cached = wp_cache_get($cache_key, 'woo_fragments');

    if (false !== $cached) {
        return $cached;
    }

    $categories = get_terms([
        'taxonomy' => 'product_cat',
        'hide_empty' => true,
        'orderby' => 'count',
        'order' => 'DESC',
    ]);

    $output = render_category_tree($categories);
    wp_cache_set($cache_key, $output, 'woo_fragments', 3600);

    return $output;
}

#Cart Fragments AJAX: el asesino de rendimiento número uno

WooCommerce cart fragments es una funcionalidad JavaScript que actualiza el widget de mini-carrito en cada página. Dispara una solicitud AJAX no cacheable (?wc-ajax=get_refreshed_fragments) en cada carga de página - incluso cuando el carrito está vacío, incluso en páginas sin widget de carrito.

El impacto es devastador:

  • Añade 0,5-2 segundos a cada carga de página sin caché
  • Evita el page cache (cada solicitud AJAX impacta PHP/base de datos)
  • Envía 20-50KB de HTML en el cuerpo de la respuesta
  • Bloquea el hilo principal mientras parsea e inyecta HTML
  • Desencadena cambios de diseño cuando el widget del carrito se actualiza

#La solución: desactivar cart fragments en páginas sin carrito

add_action('wp_enqueue_scripts', function() {
    if (!is_cart() && !is_checkout()) {
        wp_dequeue_script('wc-cart-fragments');
    }
}, 99);

Para tiendas que necesitan un contador de carrito en vivo en el encabezado, sustituye los pesados cart fragments por una llamada REST API ligera:

// Contador de carrito ligero - sustituye los pesados cart fragments
async function updateCartCount() {
    try {
        const response = await fetch('/wp-json/wc/store/v1/cart', {
            credentials: 'same-origin'
        });
        const cart = await response.json();
        document.querySelector('.cart-count').textContent = cart.items_count;
    } catch (e) {
        // Fallo silencioso - el contador del carrito simplemente no se actualiza
    }
}

document.addEventListener('added_to_cart', updateCartCount);

Esta única optimización frecuentemente mejora las puntuaciones de PageSpeed móvil en 15-25 puntos.

#Optimización del flujo de checkout

La página de checkout es donde realmente se generan los ingresos, y a menudo es la página más lenta de una tienda WooCommerce. Cada 100ms de retraso en la página de checkout incrementa de forma medible el abandono de carrito.

#Reducir el peso de la página de checkout

Audita los scripts que se cargan en la página de checkout. Culpables habituales:

  • Píxeles de marketing (Facebook, Google Ads, TikTok) - Aplazar a requestIdleCallback
  • Widgets de chat en vivo - Cargar solo después de interacción del usuario
  • Scripts de analytics - Usar alternativas ligeras o aplazar
  • CSS/JS de plugins - Muchos plugins cargan en todas las páginas incluyendo checkout
add_action('wp_enqueue_scripts', function() {
    if (is_checkout()) {
        wp_dequeue_script('contact-form-7');
        wp_dequeue_style('contact-form-7');
        wp_dequeue_script('slider-plugin');
        wp_dequeue_style('slider-plugin');
    }
});

#Auditoría de plugins: qué plugins ralentizan más WooCommerce

No todos los plugins tienen el mismo coste de rendimiento. Estos son los culpables más comunes basados en auditorías reales de tiendas:

Categoría de pluginImpacto típicoEnfoque alternativo
Constructores de páginas visuales+2-5s TTFB, +500KB-2MB JSEditor de bloques o tema personalizado
Botones de compartir en redes+300-800ms, 10-20 solicitudes ext.Iconos SVG estáticos con URLs de compartir
Plugins de productos relacionados+200-500ms, 10-50 consultas extraConsulta personalizada con object cache
Plugins SEO (pesados)+100-300ms, overhead en adminSEO ligero (Slim SEO)
Addons WooCommerce+100-500ms por addonAuditoría, consolidar, cachear
Analytics/tracking+200-1000ms, bloqueo de renderizadoTracking del lado del servidor o GTM

El proceso de auditoría de plugins:

  1. Instalar Query Monitor y activar el profiling de consultas a la base de datos
  2. Cargar una página de producto, listado de productos y página de checkout
  3. Ordenar consultas por tiempo - identificar qué plugins generan las consultas más lentas
  4. Desactivar plugins uno por uno, midiendo el impacto en TTFB y total de consultas
  5. Reemplazar plugins costosos por alternativas ligeras o código personalizado

#Configuración del servidor: PHP, OPcache y MariaDB

#PHP workers y configuración

WooCommerce es intensivo en PHP. Cada visitante simultáneo requiere un PHP worker:

; Optimizaciónes php.ini para WooCommerce
memory_limit = 256M
max_execution_time = 30
max_input_vars = 5000

; OPcache - crítico para WooCommerce
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 0
opcache.revalidate_freq = 0
opcache.interned_strings_buffer = 16
opcache.jit = tracing
opcache.jit_buffer_size = 64M

Fórmula de PHP workers: Para WooCommerce, asigna 1 PHP worker por cada 2-3 visitantes simultáneos. Una tienda con 50 visitantes simultáneos necesita 15-25 workers PHP-FPM:

pm = dynamic
pm.max_children = 25
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500

#OPcache: el impulso de rendimiento gratuito

OPcache almacena bytecode PHP compilado en memoria compartida. Para WooCommerce, que carga más de 500 archivos PHP por solicitud, OPcache reduce típicamente el tiempo de procesamiento PHP en un 40-60%.

Con PHP 8.1+ JIT (compilación Just-In-Time), las operaciones core de WooCommerce obtienen una mejora adicional del 10-20%.

#Tuning MariaDB/MySQL

[mysqld]
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 4
query_cache_type = 0
query_cache_size = 0
max_connections = 150
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
tmp_table_size = 64M
max_heap_table_size = 64M

El innodb_buffer_pool_size es la configuración más importante. Determina cuánto de tu base de datos cabe en RAM. Cuando el buffer pool es lo suficientemente grande, las lecturas de la base de datos provienen de la memoria en lugar del disco - una diferencia de velocidad de 100 veces.

#Headless WooCommerce: la solución de rendimiento definitiva

Cuando la optimización tradicional alcanza sus límites (típicamente PageSpeed 70-85 en móvil), la arquitectura headless rompe ese techo.

Headless WooCommerce mantiene el panel de administración WooCommerce para gestión de productos, pedidos e inventario. El frontend orientado al clientes se reconstruye con un framework moderno - Astro para tiendas enfocadas en contenido estático, Next.js para tiendas altamente dinámicas.

#Comparación de rendimiento: tradicional vs. headless

MétricaTradicional (optimizado)Headless con AstroMejora
PageSpeed móvil70-8595-100+15-30 puntos
TTFB200-400ms20-50ms-80-95%
LCP2,0-3,5s0,8-1,5s-50-75%
JS total300-800KB20-80KB-90%
Peso de página1,5-4MB200-600KB-75-85%
CLS0,05-0,250Eliminado

#Cuándo headless tiene sentido

Headless WooCommerce es la elección correcta cuando:

  • Tu tienda tiene 1000+ visitantes diarios y el rendimiento impacta directamente los ingresos
  • Los Core Web Vitals son un factor de clasificación competitivo en tu nicho
  • La optimización tradicional ha alcanzado una meseta en PageSpeed 70-85
  • Necesitas una experiencia de compra altamente personalizada (configuradores, 3D, AR)
  • El comercio multicanal requiere la misma API para web, móvil y quioscos

Para tiendas más pequeñas, la inversión en desarrollo headless frecuentemente supera las ganancias de rendimiento. Concéntrate primero en las estrategias de optimización tradicionales - entregan el 80% de los resultados por el 20% del esfuerzo.

Lee nuestra guía detallada sobre headless WooCommerce con Astro para la arquitectura completa y el recorrido de implementación.

#Antes/después: resultados reales de optimización WooCommerce

Estos resultados provienen de optimizaciones reales de tiendas WooCommerce realizadas por nuestro equipo:

MétricaAntes de la optimizaciónDespués (tradicional)Después (headless)
PageSpeed móvil287898
TTFB1800ms280ms35ms
LCP6,2s2,1s1,0s
CLS0,320,020
INP450ms120ms45ms
Peso de página4,8MB1,2MB380KB
Consultas DB/página680450 (estática)
Tasa de conversión1,2%2,8%3,9%
Ingresos mensuales42 000 EUR98 000 EUR136 500 EUR

El camino de optimización tradicional (Redis, tuning de base de datos, optimización de imágenes, corrección de cart fragments) proporcionó un aumento de ingresos del 133%. La migración headless añadió un 39% adicional sobre eso.

#Checklist de Core Web Vitals para WooCommerce

#Largest Contentful Paint (LCP) - Objetivo: por debajo de 2,5s

  • Precargar la imagen principal del producto en las páginas de producto
  • Usar AVIF con fallback WebP para todas las imágenes de productos
  • Configurar CDN para entrega de imágenes con edge caching
  • Asegurar que la imagen LCP no tenga lazy loading
  • Eliminar CSS y JavaScript bloqueadores de renderizado above-the-fold
  • Establecer fetchpriority="high" en la imagen principal del producto

#Cumulative Layout Shift (CLS) - Objetivo: 0

  • Establecer width y height explícitos en todas las imágenes de productos
  • Reservar espacio para galerías de imágenes de productos antes de que carguen
  • Prevenir cambios de diseño por cart fragments cargados tarde
  • Usar font-display: swap con fuentes de respaldo ajustadas en tamaño

#Interaction to Next Paint (INP) - Objetivo: por debajo de 200ms

  • Aplazar JavaScript no crítico a requestIdleCallback
  • Dividir tareas largas en el JavaScript de filtros de productos
  • Usar content-visibility: auto para cuadrículas de productos fuera de la pantalla
  • Minimizar trabajo del hilo principal de scripts de analytics y tracking

#Monitorización y optimización continua

La optimización de rendimiento no es un proyecto único. Las tiendas WooCommerce cambian constantemente - nuevos productos, nuevos plugins, actualizaciones de tema, picos de tráfico:

  1. Configurar Real User Monitoring (RUM) - Rastrear Core Web Vitals de sesiones reales de visitantes
  2. Automatizar pruebas PageSpeed - Ejecutar pruebas Lighthouse diarias en páginas clave
  3. Monitorizar tasas de acierto de Redis - Alertar cuando la tasa cae por debajo del 80%
  4. Rastrear conteo de consultas a la base de datos - Alertar cuando las consultas por página exceden la línea base en un 20%
  5. Revisar actualizaciones de plugins - Probar actualizaciones en staging primero

#Próximos pasos

La optimización de rendimiento WooCommerce es un proceso por capas. Comienza con los cambios de mayor impacto - Redis object cache, corrección de cart fragments y optimización de imágenes - y luego avanza progresivamente hacia el tuning de base de datos, la configuración del servidor y las optimizaciones de frontend.

Para tiendas donde el rendimiento es una ventaja competitiva crítica, la arquitectura headless WooCommerce entrega resultados que la optimización tradicional simplemente no puede igualar.

¿Necesitas optimización profesional de WooCommerce? Nuestro equipo ha optimizado cientos de tiendas WooCommerce, desde pequeños catálogos de productos hasta operaciones enterprise con más de 50 000 SKUs. Contáctanos para una auditoría de rendimiento y descubre exactamente qué está ralentizando tu tienda y cómo soluciónarlo.

También ofrecemos servicios integrales de optimización de velocidad WordPress que cubren toda la pila - servidor, base de datos, aplicación y frontend.

Siguiente paso

Transforma el artículo en una implementación real

Este bloque refuerza el enlazado interno y lleva al lector al siguiente paso más útil dentro de la arquitectura del sitio.

¿Por qué mi tienda WooCommerce es tan lenta?
Las causas más comunes son: WooCommerce cart fragments AJAX cargando en cada página (añade 0,5-2s), sin object cache (Redis/Memcached) causando consultas repetidas a la base de datos, imágenes de productos sin optimizar, demasiados plugins con scripts de frontend y hosting compartido con PHP workers insuficientes. Comienza con el profiling mediante Query Monitor.
¿Cómo desactivo los cart fragments de WooCommerce?
Desregistra el script de cart fragments en páginas sin carrito usando wp_dequeue_script('wc-cart-fragments') enganchado a wp_enqueue_scripts con verificación condicional. Este único cambio frecuentemente mejora PageSpeed en 15-25 puntos.
¿Vale la pena Redis para WooCommerce?
Redis object cache es la optimización de servidor más impactante para WooCommerce. Almacena los resultados de consultas en memoria, reduciendo el número de consultas de 200-500 por página a 20-50. Mejora típica de TTFB: 60-80%. Redis requiere acceso al servidor y cuesta alrededor de 5-15 EUR/mes en hosting gestionado.
¿Qué puntuaciones de Core Web Vitals debería lograr una tienda WooCommerce?
Valores objetivo: LCP por debajo de 2,5s, CLS igual a 0, INP por debajo de 200ms. Una tienda WooCommerce tradicional bien optimizada puntúa 70-85 en PageSpeed móvil. Headless WooCommerce con Astro puntúa consistentemente 95-100.
¿Debería cambiar a headless WooCommerce por el rendimiento?
Headless WooCommerce ofrece el mejor rendimiento posible (PageSpeed 95-100), pero requiere una inversión significativa en desarrollo. Tiene sentido para tiendas con 1000+ visitantes diarios, tasas altas de abandono de carrito o nichos competitivos donde los Core Web Vitals afectan los rankings.

¿Necesitas un FAQ adaptado a tu sector y mercado? Preparamos una versión alineada con tus objetivos de negocio.

Hablemos

Artículos Relacionados

Como construir una tienda e-commerce ultra-rápida con WooCommerce Headless y Astro. Inmersion en la arquitectura, comparación de rendimiento y guía de implementación paso a paso.
wordpress

WooCommerce Headless con Astro: Guia de rendimiento e-commerce 2026

Como construir una tienda e-commerce ultra-rápida con WooCommerce Headless y Astro. Inmersion en la arquitectura, comparación de rendimiento y guía de implementación paso a paso.

Migra de Shopify a WooCommerce sin perder datos, clientes ni posiciones SEO. Cubre transferencia de productos, redirecciones 301, mapeo de URL, automatizacion con WP-CLI y lista de verificación post-migración.
wordpress

Migración de Shopify a WooCommerce: la guía completa paso a paso

Migra de Shopify a WooCommerce sin perder datos, clientes ni posiciones SEO. Cubre transferencia de productos, redirecciones 301, mapeo de URL, automatizacion con WP-CLI y lista de verificación post-migración.

Configura WooCommerce para el mercado britanico con las pasarelas de pago adecuadas, integración de envio Royal Mail, configuración de IVA y cumplimiento de Making Tax Digital. Ejemplos practicos de código incluidos.
wordpress

WooCommerce UK - pagos, envio e IVA: la guía completa de configuración

Configura WooCommerce para el mercado britanico con las pasarelas de pago adecuadas, integración de envio Royal Mail, configuración de IVA y cumplimiento de Making Tax Digital. Ejemplos practicos de código incluidos.