Para reducir el tiempo de carga de una página hay una serie de recomendaciones básicas y entre ellas está la de reducir al máximo los ficheros que carga el navegador, para ello la solución es devolver todo el código del fichero en una linea.
Para los css y javascript lo que suelo usar el gulp, en mi servidor de desarrollo tengo los ficheros «legibles» y cuando los quiero subir al repositorio hago la minificación con las siguientes tareas:
var gulp = require('gulp'), concat = require('gulp-concat'), uglify = require('gulp-uglify'), cleanCSS = require('gulp-clean-css'); gulp.task('javascript', function () { gulp.src('public/js/*.js') .pipe(uglify()) .pipe(gulp.dest('/mnt/repositorio/public/js/')); }); gulp.task('estilos', () => { gulp.src('public/css/*.css') .pipe(cleanCSS({compatibility: 'ie8'})) .pipe(gulp.dest('/mnt/repositorio/public/css/')); });
Pero minificar el html de salida, en mi caso en Laravel, es otra historia. Al principio probé con el componente gulp-htmlmin de gulp pero me generaba errores, también existe la posibilidad de usar paquetes de terceros para minificar como por ejemplo https://github.com/HTMLMin/Laravel-HTMLMin pero de los que he visto no funcionan en Laravel 5.0 que es el que uso por restricciones del servidor de producción, asi que googleando llegue me encontré en stackoverflow el middleware definitivo (lo retoque un poco):
<?php namespace App\Http\Middleware; use Closure; class MinifyHtml { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $response = $next($request); $buffer = $response->getContent(); if(strpos($buffer,'<pre>') !== false) { $replace = array( '/<!--[^\[](.*?)[^\]]-->/s' => '', "/<\?php/" => '<?php ', "/\r/" => '', "/>\n</" => '><', "/>\s+\n</" => '><', "/>\n\s+</" => '><', ); } else { $replace = array( '/<!--[^\[](.*?)[^\]]-->/s' => '', "/<\?php/" => '<?php ', "/\n([\S])/" => '$1', "/\r/" => '', "/\n/" => '', "/\t/" => '', "/ +/" => ' ', ); } $buffer = preg_replace(array_keys($replace), array_values($replace), $buffer); $response->setContent($buffer); ini_set('zlib.output_compression', 'On'); // If you like to enable GZip, too! return $response; } }
Y para instalarlo es tan sencillo como añadirlo al array $middleware que tenemos en el fichero kernel.php
0 Comentarios.