2011-04-28 22 views
7

Mi idea es de alguna manera minificar el código HTML en el lado del servidor, por lo que el cliente recibe menos bytes.Cómo minimizar el código HTML?

¿Qué quiero decir con "minify"?

No comprimiendo. Más como, por ejemplo, los creadores de jQuery lo hacen con .min .js versiones. En otras palabras, necesito eliminar los espacios en blanco y las líneas nuevas innecesarios, pero no puedo eliminar tanto la presentación de los cambios HTML (por ejemplo, eliminar el espacio en blanco entre las palabras reales en el párrafo).

¿Hay alguna herramienta que pueda hacerlo? Sé que hay HtmlPurifier. ¿Es capaz de hacerlo? ¿Alguna otra opción?

P.S. Por favor no ofrezcas expresiones regulares. Sé que solo Chuck Norris puede analizar HTML con ellos. =]

+1

No creo que tiene que hacer esto. La mayoría de los servidores web admiten la publicación de páginas web "gzipped". Tus espacios en blanco ya no serán un problema. Siempre debe publicar sus páginas web con gzip. –

+0

Puede escribir un programa simple que utiliza una biblioteca de análisis HTML para analizar el archivo HTML y luego volver a escribirlo. Si usa C#, puede mirar la biblioteca LINQ-to-HTML. –

+0

Estoy de acuerdo con Stephen Chung: si descomprimes el código HTML, se compactarán todos los espacios en blanco. Será un proceso más rápido que arreglar el HTML en sí mismo. – bart

Respuesta

3

Puede analizar el código HTML en un árbol DOM (que debe mantener el espacio en blanco de contenido en los nodos), luego volver a serializarlo en HTML, sin ningún espacio embellecedor.

0

puede utilizar la herramienta Bastante Dif: http://prettydiff.com/?m=minify&html también minify cualquier CSS y JavaScript en el código HTML, y la minimización se produce de una manera regresiva por lo que no impide futuro embellecimiento del HTML volver a leer formar.

8

Un poco tarde pero aún así ... Mediante el uso de output_buffering es tan simple como eso:

function compress($string) 
{ 
    // Remove html comments 
    $string = preg_replace('/<!--.*-->/', '', $string); 

    // Merge multiple spaces into one space 
    $string = preg_replace('/\s+/', ' ', $string); 

    // Remove space between tags. Skip the following if 
    // you want as it will also remove the space 
    // between <span>Hello</span> <span>World</span>. 
    return preg_replace('/>\s+</', '><', $string);  
} 

ob_start('compress'); 

// Here goes your html.  

ob_end_flush(); 
+4

Probablemente no querrás eliminar espacios en blanco en Etiquetas como pre, código, etc. –

+0

@BijayRungta tienes razón. Aunque es posible evitar eso con algunas modificaciones. Acabo de dar una idea :) +1 a tu comentario. –

+0

Analizando HTML con una expresión regular [no funciona] (http://stackoverflow.com/a/1732454/509706). Su expresión regular se interrumpirá, p. '

bar

'. –

Cuestiones relacionadas