Является ли хорошей идеей создание новой разметки XHTML по соображениям скорости и читабельности? - PullRequest
0 голосов
/ 08 июля 2010

Я разрабатываю для запуска веб-приложения и довольно часто сталкиваюсь со следующим кодом.

<div class="items container">
    <div class="item">
        <div class="property propertyA">Some stuff</div>
    </div>
</div>

Наш типичный селектор jQuery выглядит примерно так:

$("div.items.container > div.item > div.property.propertyA").map(doStuff());

заключается в том, что мы вызываем селектор классов ОЧЕНЬ часто до того момента, когда большая часть времени, затрачиваемого на выполнение JS, тратится на выполнение внутреннего метода curCSS jQuery.

Хотя у нас может быть только один контейнер элементов, он может содержать несколько сотен элементов каждыйс десятками свойств.На самом деле на странице всегда присутствует около 5K + HTML-тегов.

Мы объединяем все больше и больше логики на стороне клиента для размещения новых функций.Я чувствую, что это не будет устойчивым в течение длительного времени, так как некоторые браузеры уже показывают смертельное сообщение «Ваша страница не отвечает» при некоторых условиях.Мы думаем о рефакторинге всей клиентской стороны довольно скоро.

Я думал о реализации некоторых новых тегов XHTML в новом пространстве имен xml, чтобы он мог выглядеть следующим образом:

<items>
    <item>
        <propertyA>Some Stuff</div>
    </item>
</items>

Я бы тогдабыть в состоянии выбрать следующий способ:

$("items > item > propertyA")

или напрямую

$("propertyA")

Исправьте меня, если я ошибаюсь, но избавившись от моих медленных селекторов CSS в пользу некоторого "getElementsByTagName""может сэкономить мне много времени здесь, делая мой css cuter и мой общий код аккуратнее.Будет ли такое решение работать?

Кстати: здесь мы работаем с предположением, что IE не существует, и Firefox 3+ ||Chrome 3+ - наша целевая аудитория.

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Я не знаю, действительно ли то, что вы предлагаете, действительно необходимо или значительно улучшит скорость. Однако, если вы знаете, что классы "property" или "propertyA" всегда будут внутри класса "item", то было бы более эффективно просто использовать .property или .propertyA в качестве селектора.

Если ваш .items.container элемент уникален для страницы, попробуйте вместо него использовать идентификатор. Затем jQuery сначала выберет идентификатор и заглянет в него только для предметов. И не добавляйте имена тегов в запрос выбора, если у вас нет других элементов, которые вы хотите исключить (например, <p class="propertyA">...</p>).

Если вы неоднократно вызываете селектор, вы должны кэшировать результат, чтобы предотвратить повторение поиска (хотя я считаю, что jQuery 1.4 делает это для вас). Что-то вроде:

var $properties = $(".items.container > .item > .property.propertyA");
$properties.map(doStuff());
//later on...
$properties.map(doStuff());
0 голосов
/ 08 июля 2010

Пока вы создаете пользовательский xlmns, это отличная идея, все, что сокращает время разработки, является отличной идеей.Кроме того, это для закрытой среды?или вы просто отключаете поддержку IE?

...