Contenido

style vs className, ¿cual es más rápido?

7 Oct

+ 4

Hace unos días me ví involucrado en una conversación sobre el uso de clases para definir estilos frente a definir los estilos directamente en el elemento. Quitando todas las obviedades sobre la comodidad de disponer de una clase y con todos los estilos necesarios para darle un aspecto diferente a esos elementos.

La conversación venía, ¿por si era mejor cambiar los estilos directamente mediante DOM, atacando a los atributos de style directamente o cambiando el className del elemento y dejar que el navegador sea el que asocie esa nueva class a los estilos recorriendolos y aplicándolo?

Pues trás 5 minutos de charla y 30 segundos de Google llegamos al gran Quirksmode, y evidentemente, como otras tantas veces, nos sacó de dudas con una de sus espectaculares tablas comparativas.

style_vs_classname

Funciones usadas

// Cambiar styles
function doChangeStyle()
{
	startTimer();
	var x = pointer.getElementsByTagName('td');
	for (var i=0;i<x.length;i++)
	{
		x[i].style.backgroundColor = '#00cc00';
		x[i].style.fontSize = '120%';
	}
	stopTime = new Date().getTime();
	setTimeout('stopTimer(2)',10);
}

// Cambiar className
function doChangeClassName()
{
	startTimer();
	var x = pointer.getElementsByTagName('td');
	for (var i=0;i<x.length;i++)
	{
		x[i].className = 'teststyle';
	}
	stopTime = new Date().getTime();
	setTimeout('stopTimer(1)',10);
}

El artículo, nos permite realizar una prueba creando una tabla y cambiandole los estilos a todos los elementos <td />.

Conclusiones

Pues la opción que no más usamos y que por un momento creí que podría ser la menos apropiada, className se comporta realmente rápida en todos los navegadores testeados excepto en Opera 9.5b que sería mejor usar el método style.

Eso era de esperarse porque className es una propiedad nativa de la interfaz HTMLElement en DOM y es mas rapido modificar una sola propiedad usando className a instanciar el objeto style y modificarle sus atributos.

Yo creo que es mejor añadir/quitarle clases ya que en ocasiones no sabes el valor por defecto que tiene y añadiendo o quitando el estilo te aseguras que al quitarle el estilo se vera como antes. Como bien dice Abel si quieres cambiarle más de un atributo el className también es mejor opción.

Interesantísimo el estudio.

No olvidemos que con clases es más semántico ya que podemos tocar los estilos sin tocar el comportamiento en el cliente (js). Además se pueden combinar clases como queramos, añadiendo otro nombre al atributo class.

className no funciona en IE, ahora mismo tengo un problema con una aplicación de hice usando xajax, y ahi cambiaba estilos con el className, estoy buscando alguna alternativa para que se vea bien en IE y FF.

En foros encontre una posible solución pero no me funciona

http://www.forosdelweb.com/f13/cambiar-id-classname-internet-explorer-no-pone-estilos-571128/

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo