Estoy comenzando un proyecto con jQuery.
¿Qué trampas / errores / conceptos erróneos / abusos / usos incorrectos tuvo en su proyecto jQuery?
javascript
jquery
flybywire
fuente
fuente
Respuestas:
No estar al tanto del golpe de rendimiento y usar en exceso los selectores en lugar de asignarlos a variables locales. Por ejemplo:-
Más bien que:-
O incluso mejor con el encadenamiento : -
Encontré este el momento esclarecedor cuando me di cuenta de cómo funcionan las pilas de llamadas.
Editar: sugerencias incorporadas en los comentarios.
fuente
var $label = $('#label');
Comprende cómo usar el contexto. Normalmente, un selector jQuery buscará todo el documento:
Pero puede acelerar las cosas buscando dentro de un contexto:
fuente
[0]
.$('.myClass', ct);
o si sabe que ct es una instancia de jQuery, puede usar findct.find(".myClass")
No use selectores de clase básica, como este:
Esto terminará mirando cada elemento para ver si tiene una clase de "botón".
En cambio, puede ayudarlo, como:
Esto lo aprendí el año pasado del blog de Rebecca Murphy
Actualización : esta respuesta se dio hace más de 2 años y no es correcta para la versión actual de jQuery. Uno de los comentarios incluye una prueba para probar esto. También hay una versión actualizada de la prueba que incluye la versión de jQuery en el momento de esta respuesta.
fuente
$('.b')
podría usarsedocument.getElementsByClassName('b')
si el navegador lo admite, pero al hacerlo$('a.b')
, obtendrá todos los elementos coincidentes con la claseb
y luego confirmará que son anclas en una operación de dos etapas. Esto último me parece más trabajo. Para una analogía de la vida real, intente esto: encuentre todos los calcetines en mi habitación. Ahora, tira las que no estén en mi tocador.Intente dividir las funciones anónimas para poder reutilizarlas.
fuente
(anonymous)
. Lea más sobre este consejo aquí: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…He visto cientos de líneas de código dentro de la declaración doc ready. Feo, ilegible e imposible de mantener.
fuente
Durante el uso
$.ajax
función para las solicitudes de Ajax al servidor, debe evitar usar elcomplete
evento para procesar los datos de respuesta. Se disparará si la solicitud fue exitosa o no.En lugar de
complete
usarsuccess
.Ver Ajax Events en los documentos.
fuente
Eventos de animación "encadenado" con devoluciones de llamada.
Suponga que desea animar un párrafo que desaparece al hacer clic en él. También quería eliminar el elemento del DOM después. Puede pensar que simplemente puede encadenar los métodos:
En este ejemplo, se llamará a .remove () antes de que se complete .fadeOut (), destruyendo su efecto de desvanecimiento gradual y simplemente haciendo que el elemento desaparezca instantáneamente. En cambio, cuando desee disparar un comando solo al finalizar el anterior, use la devolución de llamada:
El segundo parámetro de .fadeOut () es una función anónima que se ejecutará una vez que la animación .fadeOut () se haya completado. Esto produce un desvanecimiento gradual y una posterior eliminación del elemento.
fuente
Si vincula () el mismo evento varias veces, se activará varias veces. Usualmente siempre voy
unbind('click').bind('click')
solo para estar segurofuente
No abuses de los complementos.
La mayoría de las veces solo necesitará la biblioteca y tal vez la interfaz de usuario. Si lo mantiene simple, su código será mantenible a largo plazo. No todos los complementos son compatibles y se mantienen, en realidad la mayoría no. Si puede imitar la funcionalidad utilizando elementos centrales, lo recomiendo encarecidamente.
Los complementos son fáciles de insertar en su código, le ahorran algo de tiempo, pero cuando necesite algo extra, es una mala idea modificarlos, ya que pierde las posibles actualizaciones. El tiempo que ahorra al principio se perderá más tarde al cambiar los complementos obsoletos.
Elija los complementos que usa sabiamente. Además de la biblioteca y la interfaz de usuario, uso constantemente $ .cookie , $ .form , $ .validate y thickbox . Por lo demás, principalmente desarrollo mis propios complementos.
fuente
Peligro: usar bucles en lugar de selectores.
Si te encuentras buscando el método jQuery '.each' para iterar sobre elementos DOM, pregúntate si puedes usar un selector para obtener los elementos.
Más información sobre los selectores jQuery:
http://docs.jquery.com/Selectors
Peligro: NO usar una herramienta como Firebug
Firebug fue hecho prácticamente para este tipo de depuración. Si vas a estar jugando en el DOM con Javascript, necesitas una buena herramienta como Firebug para darte visibilidad.
Más información sobre Firebug: http://getfirebug.com/
Otras grandes ideas están en este episodio del podcast polimórfico: (jQuery Secrets with Dave Ward) http://polymorphicpodcast.com/shows/jquery/
fuente
Malentendido de usar este identificador en el contexto correcto. Por ejemplo:
Y aquí una de las muestras de cómo puedes resolverlo:
fuente
Evite buscar en todo el DOM varias veces. Esto es algo que realmente puede retrasar su secuencia de comandos.
Malo:
Bueno:
Malo:
Bueno:
fuente
Siempre almacene $ (this) en una variable significativa, especialmente en un .each ()
Me gusta esto
fuente
$self
o$this
si es demasiado vago para pensar en un buen nombre de variable.Similar a lo que dijo Repo Man, pero no del todo.
Cuando desarrollo win.NET de ASP, a menudo lo hago
olvidando el signo #. La forma correcta es
fuente
Eventos
no clona ninguno de los eventos; debes volver a vincularlos a todos.
Según el comentario de JP, t - clone () vuelve a unir los eventos si pasa true.
fuente
Evite la creación múltiple de los mismos objetos jQuery
fuente
$this = $(this);
en una línea separada. Si puede (sin ensuciar), olvídese$this
y$(this).fadeIn().fadeIn();
También digo esto para JavaScript, pero jQuery, JavaScript NUNCA debería reemplazar a CSS.
Además, asegúrese de que el sitio sea utilizable para alguien con JavaScript desactivado (no tan relevante hoy como en el pasado, pero siempre es bueno tener un sitio totalmente utilizable).
fuente
Haciendo demasiadas manipulaciones DOM. Si bien los métodos .html (), .append (), .prepend (), etc. son excelentes, debido a la forma en que los navegadores procesan y vuelven a procesar las páginas, usarlos con demasiada frecuencia provocará retrasos. A menudo es mejor crear el html como una cadena e incluirlo en el DOM una vez, en lugar de cambiarlo varias veces.
En vez de:
Prueba esto:
O incluso esto ($ wrapper es un elemento recién creado que aún no se ha inyectado al DOM. Agregar nodos a este contenedor wrap div no causa ralentizaciones, y al final agregamos $ wrapper a $ parent, usando solo una manipulación DOM ):
fuente
Usar ClientID para obtener la identificación "real" del control en proyectos ASP.NET.
Además, si está utilizando jQuery dentro de SharePoint, debe llamar a jQuery.noConflict ().
fuente
Pasar ID en lugar de objetos jQuery a funciones:
Pasar un conjunto envuelto es mucho más flexible:
fuente
Uso excesivo de encadenamiento.
Mira esto:
Explicación
fuente
Utilice cadenas de estilo acumulador
Usando el operador +, se crea una nueva cadena en la memoria y se le asigna el valor concatenado. Solo después de esto, el resultado se asigna a una variable. Para evitar la variable intermedia para el resultado de concatenación, puede asignar directamente el resultado usando el operador + =. Lento:
Más rápido:
Las operaciones primitivas pueden ser más rápidas que las llamadas a funciones
Considere el uso de operaciones primitivas alternativas sobre llamadas de función en bucles y funciones críticas de rendimiento. Lento:
Más rápido:
Lea más en JavaScript Mejores prácticas de rendimiento
fuente
Si desea que los usuarios vean entidades html en su navegador, use 'html' en lugar de 'texto' para inyectar una cadena Unicode, como:
fuente
Mis dos centavos)
Por lo general, trabajar con jquery significa que no tiene que preocuparse por los elementos DOM reales todo el tiempo. Puede escribir algo como esto,
$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})
y este código se ejecutará sin arrojar ningún error.En algunos casos esto es útil, en algunos casos, para nada, pero es un hecho que jquery tiende a ser, bueno, compatible con los partidos vacíos. Todavía,
replaceWith
arrojará un error si uno intenta usarlo con un elemento que no pertenece al documento. Lo encuentro bastante contra-intuitivo.Otro error es, en mi opinión, el orden de los nodos devueltos por el método prevAll () -
$('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()
. No es un gran problema, en realidad, pero debemos tener en cuenta este hecho.fuente
Si planea Ajax en muchos datos, como por ejemplo, 1500 filas de una tabla con 20 columnas, entonces ni siquiera piense en usar jQuery para insertar esos datos en su HTML. Use JavaScript simple. jQuery será demasiado lento en máquinas más lentas.
Además, la mitad del tiempo, jQuery hará cosas que harán que sea más lento, como tratar de analizar las etiquetas de script en el HTML entrante y tratar las peculiaridades del navegador. Si desea una velocidad de inserción rápida, utilice JavaScript simple.
fuente
.innerHTML
lo hará. Pero si está creando algo como Gmail donde el usuario mantiene la pestaña abierta durante horas, solo tendrá que morder la bala y lidiar con la lentitud adicional. Para los curiosos, esto es exactamente lo que hace jQuery.html()
: james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.htmlUsar jQuery en un pequeño proyecto que se puede completar con solo un par de líneas de JavaScript ordinario.
fuente
couple of lines of ordinary JavaScript
Claro que no hay problema. ¿Pero cuándo es solo eso? Las personas que dicen "¿por qué no usar vanilla javascript?" IE aún no me ha mordido lo suficiente ... y sin mencionar la cantidad de código sin formato y repetitivo que tiene que escribir para hacer cosas simples en JS.No entiendo el evento vinculante. JavaScript y jQuery funcionan de manera diferente.
Por demanda popular, un ejemplo:
En jQuery:
Sin jQuery:
Básicamente, los ganchos necesarios para JavaScript ya no son necesarios. Es decir, uso el marcado en línea (onClick, etc.) porque simplemente puede usar los ID y las clases que un desarrollador normalmente aprovecharía para fines de CSS.
fuente