Различия в производительности между использованием селекторов ": not" и ".not()"?

Существуют ли различия в скорости и эффективности между двумя строками.

$("table td:not(:first-child)")

и

$("table td").not(":first-child")

Я бы подумал, что первым было бы лучше, поскольку оно удаляет объекты, но есть ли реальная разница и является ли это существенным.

Спасибо

Ответ 1

Как вы можете видеть из теста jsperf, :not в среднем примерно в два раза быстрее. В целом, хотя эта производительность, вероятно, будет очень малой частью вашего общего времени выполнения.

Состояние документов jquery:

Метод .not() в конечном итоге предоставит вам более читаемые чем нажатие сложных селекторов или переменных в: not() селекторный фильтр. В большинстве случаев это лучший выбор.

Итак, вам действительно нужно решить, превышают ли доли секунды, которые вы получаете, с большей удобочитаемостью.

Ответ 2

Зависит от браузера.

Браузеры, поддерживающие querySelectorAll, получат повышение производительности с помощью...

$("table td:not(:first-child)")

... потому что это действительный селектор. Старые браузеры (IE7 и ниже) не будут.

Однако вы должны быть осторожны с селектором :not(). jQuery (Sizzle) расширяет его с помощью нестандартных селекторов, поэтому легко сломать qSA.