Javascript сумасшедшая идея найти узел - PullRequest
0 голосов
/ 18 апреля 2010

У меня была сумасшедшая (но настолько сумасшедшая, что это может сработать) идея, где каждый элемент на странице создается в javascript, но ему присваивается идентификатор, который представляет собой хэш его пути в DOM.

Таким образом, вместо поиска в DOM, чтобы найти элемент, вы хэшируете путь, а затем getElementById() с этим хешем.

Проблема в том, что получение пути может быть более дорогим, чем поиск DOM. Есть идеи, как это можно сделать или просто глупо?

Ответы [ 5 ]

2 голосов
/ 18 апреля 2010

Если вы знаете полный путь элемента, достаточно ли трудно идти по этому пути, чтобы оправдать подобные вещи? Обычно это такие вещи, как сбор элементов по общим аспектам, не связанным с их абсолютным путем. А с такими двигателями, как Sizzle , я не уверен, что вижу вариант использования для этого. : -)

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

Обратите внимание, что ваш подход не только работает с элементами, созданными во время выполнения Javascript; Вы можете легко присвоить их по факту с помощью функции рекурсивного спуска:

function createIDs(element) {
    var child;

    if (!element.id) {
        element.id = createElementID(element);
    }
    for (child = element.firstChild; child; child = child.nextSibling) {
        if (child.nodeType == 1) { // Element
            createIDs(child);
        }
    }
}

// Kick things off
createIDs(document.body);

Это единовременный удар по предварительно сгенерированному контенту, а не необходимость повторной генерации контента. Не защищаю, просто указываю.

1 голос
/ 18 апреля 2010

Я вижу две основные проблемы с этим:

  • Поскольку страница создается динамически на стороне клиента, роботы поисковых систем просто получат пустую страницу.

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

1 голос
/ 18 апреля 2010

"Где каждый элемент на странице создается в JavaScript"

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

1 голос
/ 18 апреля 2010

Звучит так, будто вы заново изобретаете фреймворк javascript, такой как jQuery.

Вы можете вставить html-фрагменты в DOM и сохранить эти ссылки в качестве указателей на функции или просто назначить каждому элементу уникальный идентификатор по мере их вставки, и они будут запрашивать идентификатор позже (что очень быстро).

0 голосов
/ 18 апреля 2010

Полагаю, вопрос в том, какую проблему вы пытаетесь решить с помощью этого.

Хэшировать путь для получения элемента с помощью уникального идентификатора - это хорошо, но откуда вы берете этот путь? Это будут довольно длинные «идентификаторы» и довольно громоздкие. Или, если вы используете жестко закодированные хэшированные идентификаторы, вы сильно запутываете свой собственный код. И если вы просто слегка реструктурируете документ, каждый путь и, следовательно, каждый идентификатор будут меняться. На самом деле, написание всего сайта на Javascript звучит довольно безумно. :)

В целом, это не похоже на то, что стоит хлопот. В любом современном поиске элементов фреймворка JS использование селекторов стиля CSS обычно не является узким местом, но его гораздо проще разрабатывать. Это может отличаться, если вы пишете сырой JS, но тогда я бы сказал, что вам все равно не следует этого делать, если только у вас нет мазохистской черты. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...