Compresor de código javascript
Enviado por miguelcarmona :: 23 de octubre de 2008
Últimamente he estado añadiendo algunas actualizaciones para las cuales he añadido varias librerías javascript. Ya que el tamaño de carga estaba aumentando considerablemente, decidí utilizar algún compresor de código.
Tras bastante rato probando algunos con resultados poco satisfactorio (no funcionaban los códigos resultantes), encontré el proyecto JSMin del señor Douglas Crockford el cual me llamó la atención. Al ver que el proyecto estaba hospedado en code.google.com, me pareció una muy buena opción, pero claro, daba el código del proyecto para varios lenguajes.
Como es normal, me decanté por php (aquí está la variante del proyecto para php).
La cuestión es que es algo engorroso tener que editar el php cada vez que querramos comprimir algún archivo, y para colmo, el ejemplo sólo muestra el código, de manera que hay que ver la fuente, copiar y pegar en un archivo para guardarlo.
Así que por estas razones, opté por crear un pequeño script php el cual permite un upload de archivo y muestra luego una ruta para su descarga.
El script requiere un archivo (jsmin-1.1.1.php) el cual podéis descargar desde https://github.com/rgrove/jsmin-php. Debéis descargarlo en la misma carpeta del script, o editar el require y establecer la ruta correcta
El código del archivo es:
<?php
/* Script de copia de compresión para javascript
Derechos atribuibles a Miguel Ángel Carmona
https://miguelcarmona.com
Este script es software libre; Usted puede redistribuirlo y/o modificarlo
bajo los terminos de la GNU Licencia Pública General (GNU General Public License)
publicada por la Fundación de Software Libre (Free Software Foundation)
versión 3 o posterior
*/
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-ES">
<head>
<title>compresor de javascript | miguelcarmona.com</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tbody>
<tr>
<td align="center">
<form action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']; ?>" method="POST" enctype="multipart/form-data">
<table cellspacing="5" cellpadding="5" border="0" style="width: 390px;">
<tbody>
<tr>
<td align="center">
<label for="archivo">Enviar archivo: </label>
<input id="archivo" name="archivo" type="file">
</td>
</tr>
<tr>
<td align="center">
<input type="submit" value="Comprimir archivo" style="width: 100%;">
</td>
</tr>
</tbody>
</table>
</form>
</td>
</tr>
</tbody>
</table>
<?php
$salida = '';
if( !empty($_FILES) )
{
//datos del arhivo
$nombre_archivo = $_FILES['archivo']['name'];
$tipo_archivo = $_FILES['archivo']['type'];
$tamano_archivo = $_FILES['archivo']['size'];
$original = "upload/$nombre_archivo";
$compreso = "temp/$nombre_archivo"; //nombre del archivo a escribir
if ( $tamano_archivo --> 1000000 ) { //descartamos el archivo si es superior a 1 Mb.
$salida .= "El tamaño del archivo no es correcto.\n";
$correcto = false;
}else{
if ( is_uploaded_file($_FILES['archivo']['tmp_name']) && move_uploaded_file( $_FILES['archivo']['tmp_name'], $original ) ){
$correcto = true;
}else{
$salida .= "Ocurrió algún error al subir el fichero.\n";
}
}
if ( $correcto )
{
require 'jsmin-1.1.1.php';
$salida_compresor = JSMin::minify(file_get_contents($original));
$fp = fopen($compreso, "w"); //creamos el archivo y lo abrimos
if( fputs($fp, $salida_compresor) ) //comprobamos si se ha escrito correctamente
$correcto = true;
else
$correcto = false;
fclose($fp);
if($correcto)
{
$salida .= "el archivo $nombre_archivo se comprimió correctamente\n";
$compresion = filesize($original)*100/filesize($compreso);
$compresion = explode('.', $compresion);
$salida .= " porcentaje de compresión: $compresion[0]\n";
$salida .= "puede verlo/descargarlo aquí: <a href="$compreso">$nombre_archivo</a>";
}
else
{
$salida .= 'error al crear el archivo';
}
}
}
echo $salida;
?>