0

我读过很多帖子说 SAX 比 DOM 快。我不确定我的问题是否愚蠢,但我认为如果我们有巨大的内存,DOM 必须更快。因为一旦将树结构加载到内存中,它应该比 SAX 更快。

我在这里需要一些澄清,请帮助我理解。我有一个用例,我每天都会收到一个要解析多次的大文件。我可以说 DOM 在第一次解析时可能会比 SAX 慢一点,并且在 DOM 的情况下所有后续解析都会非常快,因为它将整个文档结构加载到内存中并重用它。如果是这样,那我们怎么能说 SAX 比 DOM 快。如果我错了,请纠正我。如果明天我更改我的 XSD 并需要将新结构推送到内存中,那么有没有办法在不重新启动应用程序的情况下做到这一点。

4

1 回答 1

3

我们在以下情况下使用 SAX:

  1. 我们该死的确信,只需通过文件一次就足够了。顺便说一句,大多数时候都是这样。大多数情况下,可以将执行多次传递或返回/转发指针的代码重构为一次传递。

  2. 当我们通过某些流媒体渠道(例如通过网络)接收 xml 文件时,我们可能希望在整个文件完全下载之前进行实时读取。SAX 可以处理部分下载的文件,DOM 不能。

  3. 当我们对 XML 中的特定位置感兴趣时,而不是对完整的文档感兴趣。例如,Atom Feed 最适用于 SAX,但要分析 WSDL,您将需要 DOM。

我们在以下情况下使用 DOM:

  1. 好吧,当单程通行证不行时。我们需要在文件中上下移动。

  2. 当 XML 在磁盘上并且我们不需要实时读数时。我们可以慢慢来,加载它,阅读它,分析它,然后得出结论。

  3. 当你的老板要求在午餐前做而你不打扰质量时。

现在回答你的问题

您提供了:

  1. 你有一个巨大的文件:........SAX +1
  2. 解析多次:.....DOM +1

两者都获得平等的选票。将您现有的知识库添加到其中。(熟悉 SAX?)。巨大有多大?您所说的 XML 和内存都很大。即使是 100MB 的文件也没什么大不了的。DOM 可以处理它。您需要每天解析多次。如果一个操作在几分钟内完成,那么将数据保留在内存中接下来的几个小时似乎并不明智。在这种情况下,您将失去 DOM 的好处。但是如果一个操作本身需要一个小时,那么你保留预处理信息是完全正确的。

正如我所指出的,您没有提供足够的统计数据。统计数据大小、内存大小、DOM 中的加载时间、处理时间,您每天究竟需要多少次?您的机器在此期间做什么?闲置或分析其他此类文件?

接受这些统计数据。要么把它贴在这里,要么自己分析它们,你就会得出结论。

于 2013-08-31T05:15:40.833 回答