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

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

4 голосов
/ 19 ноября 2008

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

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

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

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

1 Ответ

1 голос
/ 19 ноября 2008

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

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