Está en: » Artículos »

Compresor de código javascript

Compresor de código javascript


Ú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;
?>

Comentarios

Deje su comentario

Previsualización de comentario
  1. Anónimo dice: