Por ahora la mayoría de la gente en este sitio son probablemente consciente de que:¿Por qué no llevar la delegación de eventos Javascript al extremo?
$("#someTable TD.foo").click(function(){
$(e.target).doSomething();
});
va a realizar mucho peor que:
$("#someTable").click(function(){
if (!$(e.target).is("TD.foo")) return;
$(e.target).doSomething();
});
Ahora cuánto peor, por supuesto, depende de la cantidad de touchdowns su mesa tiene, pero este principio general debería aplicarse siempre y cuando tengas al menos algunos TD. (NOTA: Por supuesto, lo más inteligente sería usar el delegado de jQuery en lugar de lo anterior, pero solo estaba tratando de hacer un ejemplo con una diferenciación obvia).
De todos modos, expliqué este principio a un compañero de trabajo, y su respuesta fue "Bueno, para los componentes de todo el sitio (por ejemplo, una entrada de selección de fecha) ¿por qué detenerse? ¿Por qué no vincular un solo manejador para cada tipo de componente para el CUERPO mismo? " No tuve una buena respuesta.
Obviamente, usar la estrategia de delegación significa replantearse cómo se bloquean los eventos, por lo que es una desventaja. Además, hipotéticamente podría tener una página donde tenga un "TD.foo" que no debería tener un evento conectado. Pero, si comprende y está dispuesto a trabajar en torno al cambio burbujeante del evento, y si aplica una política de "si coloca .foo en un TD, SIEMPRE va a conectar el evento", ninguno de estos parece una Vaya cosa.
Creo que me debe estar perdiendo algo, así que mi pregunta es: ¿hay algún otro inconveniente al solo delegar todos los eventos de todos los componentes del sitio al BODY (en lugar de vincularlos directamente a los elementos HTML involucrados? , o delegándolos a un elemento padre que no sea BODY)?
Creo que es una cuestión de preferencia y un escenario de caso por caso . Lo que quiero decir es que primero debes escribir el código para que sea lo más legible posible. De esta manera, usted u otra persona puede entrar y examinar el código más tarde y pasarlo bien con él. Una vez que haya hecho eso, puede verificar que el código tenga un buen rendimiento y optimizarlo según sea necesario. En su escenario específico, $ ("someTable TD.foo") es más fácil de leer, administrar y seguir que el escenario con un retorno. Alguien podría leer el otro código y malinterpretarlo, causando que introduzca errores con sus cambios. Solo mi opinión – evasilchenko
Estoy totalmente de acuerdo: los desarrolladores deben diseñar primero, sin preocuparse por la optimización, y optimizar solo más adelante según corresponda. Sin embargo, todo esto surgió de la necesidad de la vida real de optimizar un diseño existente (teníamos una gran página hasta que nuestros clientes decidieron usarlo con miles y miles de filas), así que estábamos tratando de encontrar la mejor estrategia. para manejar esa optimización. – machineghost
posible duplicado de [¿Deberían vincularse todos los eventos de jquery a $ (documento)?] (Http://stackoverflow.com/q/12824549/1048572) – Bergi