Minificar JavaScript
Aligere un script sin montar un proceso de compilación: en el ejemplo, una línea de comentario y una función sangrada quedan en una sola línea, function suma(a,b){return a+b;}, sin el comentario y con todos los nombres intactos. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- JavaScript minimizado
- // suma function suma(a, b) { return a + b; }
- JavaScript minimizado
- function suma(a,b){return a+b;}
No todo proyecto que entrega JavaScript quiere montar un bundler para lograrlo.
Por qué JavaScript es más difícil de reducir que el marcado
A diferencia de una hoja de estilos, JavaScript es un lenguaje de programación completo, con ámbitos, cierres y comportamiento dinámico, así que reducirlo sin riesgos exige cuidado. Renombrar una variable local es inofensivo, pero renombrar algo que se busca por su nombre escrito como texto, o que usa código fuera del archivo, rompe el script. Por eso la compactación descuidada basada en el texto siempre ha sido arriesgada con JavaScript de un modo que no lo es con el marcado o los estilos. Esta herramienta elige el camino prudente y nunca renombra nada: solo elimina comentarios, sangrías y los espacios y saltos de línea alrededor de símbolos como llaves, comas y operadores.
Qué obtiene y cuándo basta
En el ejemplo, una línea de comentario y una función repartida en tres líneas sangradas vuelven como una sola línea sin el comentario. Eso encaja con un script independiente, como el de contenido o el de fondo de una extensión de navegador que se empaqueta sin herramientas de compilación. La propia herramienta se presenta como una minificación básica y, para versiones de producción de proyectos grandes, recomienda un minificador que lea la estructura completa del código. Como trabaja sobre el texto y no sobre esa estructura, pruebe el resultado una vez antes de publicarlo, sobre todo si el script contiene texto entre comillas que parece un comentario.
Por qué minificar JS es más difícil de lo que parece
A diferencia del CSS, JavaScript es un lenguaje de programación completo con alcance de variables, clausuras y comportamiento dinámico, así que un minificador tiene que entender realmente la estructura del código para achicarlo sin romperlo: renombrar una variable local es seguro, pero renombrar algo referenciado dinámicamente por texto, o del que depende código fuera del alcance minificado, no lo es.
Por eso una compactación ingenua basada en texto siempre fue riesgosa para JavaScript de una manera que no lo es para el marcado o los estilos, y por eso los minificadores serios analizan el script en un árbol de sintaxis antes de tocar un solo carácter, una disciplina que viene desde las primeras herramientas de minificación de JS construidas junto con el ascenso del lenguaje como la capa de scripting dominante de la web.
Qué puede hacer con ella
Scripts de una extensión de navegador
Una extensión de navegador minifica sus scripts de contenido y de fondo independientes antes de empaquetar la versión, sin introducir una dependencia de bundler.
Empaquetado de funciones serverless
Un empaquetador de funciones serverless minifica el JavaScript de cada función generada antes del despliegue para reducir el peso del arranque en frío.
Preguntas frecuentes
¿Minificar rompe el comportamiento de mi script?
No, solo se aplican espacios en blanco, comentarios y renombrado demostrablemente seguro; el comportamiento en tiempo de ejecución del código se mantiene igual.
¿Necesito un bundler para usar esto?
No, ese es justamente el punto: está pensado para scripts que se entregan fuera de un pipeline de bundler, así que puede minificar sin adoptar una cadena de build.
¿Soporta sintaxis moderna de JavaScript?
Sí, la sintaxis moderna estándar como funciones flecha, clases y módulos se analiza y minifica correctamente.
¿Se guarda mi script de origen después de minificarlo?
No, tanto el JavaScript enviado como el minificado se eliminan después del período de retención y nunca se usan para entrenamiento.
¿Cambia los nombres de mis variables?
No. Los nombres quedan exactamente como los escribió; solo se quitan los comentarios, los saltos de línea y los espacios junto a los símbolos. En el ejemplo, suma, a y b conservan su nombre y la función entera cabe en una línea.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/data/js-minify \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"js":"const a = 1; // nota\nconst b = 2;"}'const res = await fetch("https://api.kit.forhosting.com/data/js-minify", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"js": "const a = 1; // nota\nconst b = 2;"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/js-minify",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"js": "const a = 1; // nota\nconst b = 2;"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/js-minify", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"js":"const a = 1; // nota\\nconst b = 2;"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"js":"const a = 1; // nota\nconst b = 2;"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/js-minify", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"js": "const a = 1; // nota\nconst b = 2;"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.js_minify",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Este endpoint toma un script tal cual y devuelve una versión más pequeña y funcionalmente idéntica, para equipos que necesitan minificar sin adoptar toda una cadena de build.
Cómo corre la solicitud
Envíe POST a /data/js-minify con el código fuente del script, y recibirá un task_id de inmediato mientras la minificación se procesa en segundo plano. El resultado, con los espacios en blanco y comentarios eliminados y los identificadores renombrados donde es demostrablemente seguro hacerlo, llega mediante una llamada de webhook firmada o queda disponible en un enlace firmado válido por 24 horas.
Cómo encaja en la automatización sin un paso de build
Cualquier flujo que genere o entregue JavaScript fuera de un bundler convencional (un sistema de plugins de un gestor de contenidos, un empaquetador de funciones serverless, un generador de código, un trabajo de CI que produce un solo script utilitario) puede llamar a este endpoint como su etapa de minificación en vez de incorporar un analizador y minificador de JS a su propio árbol de dependencias. Cobrar por solicitud sin cargo en las tareas fallidas permite que un script de despliegue minifique con seguridad cada archivo modificado en cada versión sin presupuestar gasto desperdiciado, y como la tarea es asíncrona, un lote de decenas de scripts puede enviarse de una vez y recogerse a medida que llega cada webhook, en vez de procesarse uno por uno en secuencia.
Casos de integración
Widget incrustable de terceros
Un widget incrustado en sitios de clientes minifica su script para reducir el tiempo de carga en páginas cuyo desempeño el widget no controla.
Mantenimiento de un panel de administración heredado
Una herramienta interna heredada sin sistema de build moderno minifica sus scripts escritos a mano mediante la API antes de cada versión.
Preguntas técnicas
¿Cómo minifico JavaScript con la API?
Envíe su script por POST a /data/js-minify, guarde el task_id devuelto y reciba el JavaScript minificado por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API para minificar JavaScript?
No, no hay plan gratuito ni prueba; cuesta $0.002 por solicitud, y una solicitud fallida nunca se cobra.
¿Puedo minificar muchos scripts por lote?
Sí, envíe una tarea asíncrona por archivo y reciba cada resultado por webhook, algo que funciona bien para un lote de decenas de scripts a la vez.
¿Ya está disponible este endpoint?
Sí, data.js_minify está en producción y acepta solicitudes ahora mismo.