Español

Imágenes y fotografías · Conversor de imágenes y compresor

Cómo Web Workers y OffscreenCanvas mantienen la conversión de imágenes receptiva

· Cómo funciona

procesamiento del navegador lienzo trabajadores web

Un carril de interfaz de usuario al lado de un carril de trabajador separado que contiene un lienzo fuera de la pantalla
Ilustración de vector original de ToolAcre

Codificar una imagen grande requiere tiempo real de CPU y hacerlo en el hilo principal congelaría la página. Esta publicación explica cómo Web Workers y OffscreenCanvas mueven ese trabajo fuera del hilo de la interfaz de usuario y qué significa esa arquitectura para la privacidad y los límites.

La pestaña que se congelaría: ¿qué sucede cuando se ejecuta una codificación pesada en el hilo que también dibuja la página?

Decodificar, volver a dibujar y codificar un lote requiere trabajo de CPU y memoria de píxeles decodificada. Si cada operación se ejecutara en el mismo bucle de eventos que maneja los controles, las actualizaciones de progreso y la pintura, la interfaz podría dejar de responder hasta que finalice un archivo. Por lo tanto, el panel enfocado crea un módulo de trabajo de manera perezosa cuando comienza la primera conversión en lugar de pagar ese costo inicial por un visitante que nunca realiza una conversión.

La capacidad de respuesta es un objetivo arquitectónico, no un número de tiempo prometido. La carga del dispositivo, las dimensiones de la imagen, la implementación del navegador y la composición del lote aún determinan qué tan fluida se siente la página. Verificar con archivos representativos de los dispositivos que importan; no publique una duración de conversión universal ni afirme que un trabajador realiza un trabajo costoso de forma gratuita.

El hilo principal y por qué es valioso: un hilo para el diseño, la entrada y los scripts, y durante cuánto tiempo las tareas bloquean los tres

El hilo principal posee el DOM y los controles que toca un visitante. ToolAcre lo utiliza para validar selecciones, decodificar brevemente las dimensiones de origen, crear configuraciones, representar el estado y descargar resultados. El bucle repetido de decodificación, dibujo del lienzo y codificación del lote se encuentra detrás de `image.worker.js`, lo que permite que los mensajes de progreso regresen entre archivos.

Un trabajador no elimina todas las tareas del hilo principal. Cada archivo seleccionado se verifica y mide inicialmente en el panel, y los resultados luego se convierten en vistas previas y acciones de descarga allí. El diseño aleja la pesada y repetida canalización de la propiedad de la interfaz y al mismo tiempo mantiene las API del navegador y la presentación en el contexto al que pertenece cada una.

Web Workers: un segundo hilo sin DOM: qué puede y qué no puede tocar un trabajador y cómo viajan los archivos hasta él

El trabajador no tiene acceso DOM normal. Recibe descripciones de elementos serializables, configuraciones y el ArrayBuffer de cada archivo. Para cada elemento, crea el mismo plan de conversión pura utilizado por la interfaz, crea un Blob, ejecuta decodificar-dibujar-codificar, convierte el Blob resultante en bytes y registra una falla por archivo sin abandonar el resto del lote.

Ese aislamiento también da forma al manejo de errores. Un archivo corrupto puede ingresar a la matriz de fallas mientras continúan los elementos posteriores. El trabajador verifica la cancelación entre elementos e informa el progreso con el nombre de archivo actual. La interfaz de usuario traduce el tiempo de espera del trabajador en un consejo para probar menos imágenes o más pequeñas en lugar de dejar un botón desactivado sin explicación.

OffscreenCanvas: dibujar y codificar sin un elemento visible: cómo un trabajador obtiene su propio lienzo y llama a convertToBlob

`createCanvas` prefiere `OffscreenCanvas` cuando el constructor existe. Dentro de esa ruta, `encodeCanvas` llama a `convertToBlob` con tipo MIME de destino y calidad opcional. El mismo renderizador también puede crear un lienzo HTML y usar `toBlob` basado en devolución de llamada, preservando un respaldo para contextos donde OffscreenCanvas no está disponible.

Es importante describir con precisión el recurso alternativo. Se prefiere OffscreenCanvas, no el único lienzo posible en la fuente. Del mismo modo, la codificación WebP del navegador se verifica mediante el resultado de codificación final en lugar de asumirse a partir del soporte de decodificación. La aplicación promete un error cuando el codificador solicitado no puede producir el formato, no una sustitución silenciosa con otro tipo MIME.

Transferibles y copias: mover un ImageBitmap o ArrayBuffer a un trabajador sin duplicar decenas de megabytes

Antes de llamar al trabajador, el panel lee cada archivo en un ArrayBuffer e incluye esos buffers en la lista de transferencia. La propiedad pasa al trabajador en lugar de clonar cada búfer de entrada. Después de la codificación, el trabajador envuelve los bytes del Blob en un Uint8Array y registra ese búfer de respaldo para su transferencia en la ruta de respuesta.

Esto reduce las copias evitables, pero las imágenes y lienzos decodificados aún ocupan memoria. `executePlan` cierra cada ImageBitmap en un bloque `finally` para que sus píxeles decodificados puedan liberarse rápidamente. Los transferibles, la limpieza explícita de mapas de bits y una protección del presupuesto de píxeles abordan diferentes fuentes de presión; ninguno autoriza un reclamo de lote ilimitado.

Por qué esta arquitectura también es la historia de la privacidad: todo el proceso reside en su pestaña y el panel de red permanece en silencio

El código de conversión llama a las API de lienzo y de imagen del navegador sin una solicitud de carga de archivos. Una prueba unitaria protege la planificación de cada combinación de entrada y salida admitida con acceso a la red prohibido. La declaración de privacidad de la configuración es correspondientemente limitada: el código de la herramienta no realiza ninguna solicitud para transportar el archivo, el texto pegado o el resultado generado.

La página en sí aún puede cargar recursos del sitio y scripts externos revelados, por lo que el “panel de red silencioso” necesita interpretación. Borre DevTools después de la carga y busque un nombre de archivo de prueba distintivo e inofensivo o bytes de carga útil en nuevas solicitudes. La revisión del código fuente y la observación del tiempo de ejecución respaldan una afirmación sobre la ruta de conversión; ninguno de los dos convierte todo el entorno del navegador en un entorno limitado fuera de línea.

De dónde vienen los límites: los límites de memoria y lienzo reemplazan los límites de carga, por lo que el techo es su dispositivo

El procesamiento local reemplaza un límite de carga con restricciones de validación de entrada, píxeles decodificados, asignación de lienzo y memoria disponible del dispositivo. Cada archivo de entrada tiene un límite de 40 MB por el panel enfocado. La geometría de salida planificada se ajusta al presupuesto de píxeles del dispositivo y el usuario recibe una advertencia que indica las dimensiones reducidas cuando esa protección cambia la solicitud.

No hay un recuento de lotes fijo en la configuración. Veinte gráficos pequeños y veinte fotografías de alta resolución no son asignaciones equivalentes. Un teléfono puede fallar antes que una computadora de escritorio. El verdadero consejo operativo es procesar menos archivos o más pequeños después de un tiempo de espera o una falla de memoria, no publicar un recuento máximo o un límite de megapíxeles no admitidos.

Conclusión: trabajo pesado, interfaz silenciosa: cómo Image Converter & Compressor realiza conversiones fuera del hilo principal de su dispositivo

La interfaz permanece más silenciosa porque la canalización repetida se ejecuta en un trabajador, su lienzo puede estar fuera de la pantalla y los buffers de bytes grandes viajan como transferibles. Esas son propiedades de origen concretas, no taquigrafías de marketing. Explican dónde ocurre el trabajo y cómo regresa el progreso sin afirmar que cada navegador lo programe de manera idéntica.

Pruebe la arquitectura con las imágenes que realmente utiliza su flujo de trabajo. Observe los controles durante la conversión, confirme el progreso de cada archivo, inspeccione las fallas y consulte el panel de Red para ver el marcador de prueba. El diseño de ToolAcre le brinda evidencia observable: un módulo de trabajo real, resultados medidos y bytes de descarga local en lugar de un trabajo remoto opaco.