yo no soy un experto en las entrañas de jQuery, pero mi opinión es que el orden en que jQuery puede encontrar las cosas no es necesariamente el orden en que aparecer en el DOM. Para asegurarte de que obtienes el artículo que está primero en el DOM, jQuery obtiene todo y ordena el resultado para que se devuelva el primer elemento.
Como habrás notado, este es un problema de rendimiento. Sin embargo, no creo que puedas desactivar este comportamiento.
Lo que puede hacer es hacer sus consultas más específicas, de modo que se seleccione menos y haya menos elementos para que jQuery ordene para encontrar el primero. Por ejemplo, $ ('li: first') no es muy específico y será lento. $ ('# myList> li: first') en teoría será mucho más rápido (aunque no lo he comparado para verificarlo) porque a) solo buscará en una sola lista, yb) también se excluirán las sublistas.
Si va a utilizar todos los elementos de una selección para algo en algún punto, pero solo necesita el primero en un punto particular, entonces tiene sentido ejecutar el selector para obtener todos sus elementos y guardarlo en un var, luego use .first() para obtener el primer elemento cuando lo necesite.
var elems = $('li'), firstElem = elems.first();
Ahora elems contendrá el conjunto completo, y firstElem solo contendrá el primer elemento.
Por supuesto, también podría simplemente dar el primer elemento en cada grupo que tiene la intención de seleccionar una clase específica, pero esto podría considerarse una solución poco elegante.
Interesante, realmente podrían mejorar el selector ': first'. Pero no creo que cueste demasiado, obtengo 3 ms en este ejemplo que tiene un selector no nativo: http://www.jsfiddle.net/W8u64/ – BrunoLM
Como referencia, hubo una breve discusión sobre esto en jQuery foros. https://forum.jquery.com/topic/why-there-is-no-jquery-findone-method-or-smth-similar –
y, después de esa discusión, no parece que jQuery ellos mismos harán cualquier cosa al respecto [ticket # 11785] (http://bugs.jquery.com/ticket/11785) – Hashbrown