[英]Why WebBrowser.Document.DomDocument doesn't contain the actual DOM model?
[英]why DOM (Document Object Model) loads everything into main memory
文档对象模型(DOM)用于表示xml
, html
但是我无法理解DOM为什么将所有内容都加载到主内存中。它是用来使我们能够在其中插入,删除对象,还是有其他东西。
还有,使它用途如此广泛的优点是什么?
因为能够实现诸如
document.getElementsByTagName("foo");
您需要完全解析文档,并将节点树加载到内存中。 您可以在每次方法调用时想象重新解析文档的过程,但是这样做效率极低。
它之所以如此流行,是因为它是标准的API,受到地球上每种语言的支持,并且相对容易浏览节点并提取所需的信息。
XML文档实质上是树结构。 一次将整个树加载到内存很方便 。 对于某些XML架构尤其如此,其中某些节点依赖于树的其他部分。 这就是完整加载文档的优势。 这也意味着简化了诸如应用XSLT转换之类的操作,并且由于文档已经在内存中,因此可以说具有更高的性能。 不再需要I / O(并且由于大多数应用程序是I / O绑定的,而不是CPU绑定的,所以这很不错。)
缺点包括:
像SAX这样的事件驱动的解析策略更简单。 但是,它要求解析使用者以不维护内存中完整文档结构的方式跟踪状态。 此外,这几乎是单遍操作。 如果使用者需要回溯文档以实现所需的效果,则使用者将需要维护执行此操作所需的堆栈。 但是,事件驱动的解析使用的内存要少得多,一旦解析事件开始引发且解析起来就简单得多(因为它将大量的工作传递给使用者),就可以对其进行处理。
我不敢相信你可以说一个比另一个更好 。 他们只是不同的方法。 根据上下文,一种或另一种方法可能更适合当前的问题。
有人可能会说将整个文档加载到内存中的XML解析器只是事件驱动的SAX样式解析器的通用用途。 我不知道这是否是正确的,但肯定可以那样做。
DOM就是对象模式,一种访问某些内容的方式。
在大多数情况下,例如在浏览器中加载的HTML中,文档已经加载到内存中,而DOM仅使您以易于理解的方式访问它。
在文档上实现DOM时,对您没有明确的限制。 隐含的期望是,子节点的迭代将是线性的,树中的上/下将是恒定的时间。 通常,将整个文档加载到内存中以满足期望是最容易的,但是您不必这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.