JS Framework, который не использует селекторы CSS? - PullRequest
1 голос
/ 18 мая 2010

Что я заметил в большинстве JavaScript-фреймворков, так это то, что наиболее распространенный способ поиска / доступа к элементам DOM - это использование селекторов CSS.

Однако для этого обычно требуется, чтобы инфраструктура включала синтаксический анализатор селекторов CSS, потому что они должны поддерживать селекторы, чего изначально не имеет браузер, в первую очередь это собственные проприетарные расширения фреймворков.

Я бы подумал, что эти парсеры большие и медленные. Разве не было бы эффективнее иметь что-то, что не требует парсера, такие как вызовы цепочек методов?

Некоторые любят:

id("example").children().class("test").hasAttribute("href")

вместо

$("#example > .test[href]")

Есть ли какие-то рамки, которые делают что-то подобное? И как они сравниваются с jQuery и друзьями по производительности и размеру?

РЕДАКТИРОВАТЬ: Вы можете считать это теоретической темой для обсуждения. Я не планирую использовать что-либо кроме jQuery в каких-либо практических проектах в ближайшем будущем. Мне просто интересно, почему нет других, возможно, лучших подходов.

Ответы [ 3 ]

3 голосов
/ 18 мая 2010

Обход и манипулирование DOM являются одними из самых полезных функций в современных популярных JavaScript-фреймворках благодаря тому, как они эффективно справляются с кросс-браузерными проблемами. Если вы работаете с DOM, вам в конечном итоге понадобятся эти функции, и все, что вы напишите самостоятельно, обязательно будет менее эффективным, чем лучшие методы.

Что касается скорости, я бы предположил, что незначительное снижение производительности при разборе селекторов будет компенсировано оптимизацией, присущей двигателю. Если вы полагаетесь на то, что программист указывает путь (например, ваш пример), вы можете упустить возможности оптимизации, о которых вы не знали. Например, в вашем примере предположим, что это в конечном итоге быстрее справа налево (сначала найдите все class = "test" с помощью hrefs, а затем проверьте родителей). Вы бы положились на программиста, чтобы запомнить эти причуды оптимизации.

3 голосов
/ 18 мая 2010

Обратите внимание, насколько это дольше. Каждый использует селекторы в стиле CSS по какой-то причине.

Библиотека jQuery Sizzle оптимизирована для скорости синтаксического анализатора, так что вам не о чем беспокоиться.

1 голос
/ 18 мая 2010

Из того, что я читал, эти библиотеки (или, по крайней мере, JQuery) используют собственные возможности браузера, где это возможно. Это означает, что вы можете использовать css-селекторы с минимальным воздействием, придерживаясь простых идентификаторов и классов, где это возможно.

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

Например, я буду использовать JSON для передачи и хранения большего количества данных за один раз (даже если некоторые из них могут никогда не понадобиться), а не для выполнения множества небольших запросов.

Как намекает SLaks, css-селекторы делают читабельность кода и долгосрочное обслуживание намного проще и сокращают время кодирования. И, как говорит Эндрю, эти библиотеки также решают кросс-браузерные проблемы, что приводит к гораздо более низкой потере волос.

...