Различия в производительности между использованием селекторов ": 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
.