2011-05-27 13 views
6

Al representar páginas web y aplicar estilos, los navegadores indexan ID y nombres de clase para una búsqueda eficiente, o atraviesa todo el DOM desde la parte superior cada vez que se identifica o el nombre de la clase se especifica para llegar al elemento correcto.Optimización de CSS, selectores anidados e indexación del navegador de nombres de ID/clase

Me pregunto por razones de optimización, y si vale la pena darle las sugerencias del navegador (selectores más largos) a donde está el objeto de una cierta identificación. Es decir.

#container #one-of-many-container-siblings #my-id 

en lugar de:

#my-id 

¿El ex rendimiento mejor rendimiento si el DOM es bastante grande?

Respuesta

8

En realidad funciona de manera opuesta a lo que estás pensando.

Recuerde que los navegadores analizan los selectores de CSS de derecha a izquierda.

Este:

#container #one-of-many-container-siblings #my-id 

va a tomar más medidas para que coincida con que esto:

#my-id 

Ver: http://www.css-101.org/descendant-selector/go_fetch_yourself.php

Teniendo en cuenta la cuestión que sólo ha pedido, le recomiendo que lea este artículo:

http://css-tricks.com/efficiently-rendering-css/

Se le ayudará a escribir selectores más eficientes:

#main-navigation { }  /* ID (Fastest) */ 
body.home #page-wrap { } /* ID */ 
.main-navigation { }  /* Class */ 
ul li a.current { }  /* Class * 
ul { }     /* Tag */ 
ul li a { }    /* Tag */ 
* { }      /* Universal (Slowest) */ 
#content [title='home']  /* Universal */ 
+0

Veo, muy interesante. Tenía la impresión de que el navegador analiza la hoja de estilos y luego aplica cada estilo, es decir, encuentra un selector, encuentra los elementos con los que coincide, aplica las propiedades de estilo, vaya al siguiente selector.Sin embargo, parecería que pasa realmente por el documento HTML, y para cada elemento pasa por todas las reglas de CSS y encuentra cuál se aplica. Por lo tanto, una lectura de derecha a izquierda funciona mejor para la exclusión que para la inclusión. –

+0

Muchas gracias por la información, ¡realmente útil! Hice una búsqueda rápida antes de plantear la pregunta y me costó encontrar detalles sobre cómo (detrás de escena) los navegadores procesan y renderizan estos documentos. ¡Es bueno saber un poco más sobre cómo funcionan estas cosas! –

1

El uso de la versión más corta siempre será más rápido porque se realizan menos comprobaciones, sin embargo, no sé por qué habría que optimizar el CSS en una página.

+0

La eficiencia puede ser un factor en los sitios web/aplicaciones de gran tamaño. Eche un vistazo al enlace que 'thirtydot' proporcionó en su respuesta: http://css-tricks.com/efficiently-rendering-css/ –

1

es mejor utilizar 2 o menos selectores como regla general para el rendimiento.

2

La definición de una identificación en HTML/CSS es una sola instancia de un elemento. Asumiendo que estás siguiendo esa regla, entonces todo lo que necesitas es la ID de ese elemento. El navegador buscará y encontrará ese elemento y se detendrá.

Con su "sugerencia", primero buscará el primer elemento, luego el segundo, luego el tercero, antes de parar. Esto, como probablemente puedas ver, es más ineficiente.

Cuando se trata de clases, esto puede ser un poco más ambiguo y borroso, pero la regla general es que cuantos menos selectores haya, mejor. Si se encuentra haciendo tres, cuatro o cinco selectores, podría valer la pena considerar una pequeña refactorización, como agregar clases o ID en lugares estratégicos, o incluso no ser tan específico con los selectores de CSS.