Как реализован NodeList?

DOM NodeList (возвращаемый, например, element.getElementsByTagName) — интересный объект, поскольку он не является снимком, а отражает изменения в документе, сделанные после того, как вы создали NodeList.

Мне было интересно, как можно реализовать такую ​​коллекцию: полностью ленивое вычисление должно быть ужасно медленным, но сохранение согласованности кэшированной версии требует большого внутреннего учета.

Я попытался поискать в блоге статьи на эту тему в Google, а также попытался найти соответствующие файлы исходного кода для Mozilla, но сразу ничего не нашел (а когда я не могу найти что-то сразу, я прихожу сюда...).

Так как же Firefox, Safari, Internet Explorer (и другие небраузерные реализации DOM) обрабатывают NodeList?


person Thilo    schedule 19.11.2008    source источник


Ответы (1)


Для XML-библиотеки .NET существует 3 внутренних подкласса XmlNodeList с разными стратегиями. Коллекция XmlChildNodes для свойства XmlNode.ChildNodes использует простую ленивую оценку на основе ссылки на содержащий ее элемент. XmlElementList использует прослушиватели событий при изменении DOM. Третий, XPathNodelList, предназначен для запросов XPath (например, XmlNode.SelectNodes()) и оценивает XPath каждый раз, когда осуществляется доступ к его индексу, считывается его свойство Count или выполняются итерации.

person Mark Cidade    schedule 19.11.2008