XML性能:元素 vs 属性
XML性能: 元素 vs 属性
在XML中,元素和属性都很常见,因此可以预期解析器都能很好地处理它们。我猜测元素的查找速度可能稍快一些,但我只看了jQuery Sizzle的结果:
-1(1)"你应该使用X,因为<插入与解释为何使用X无关的填充文本"。(2)"我期望X",对X的信任并不意味着X会按照你希望的方式运行,除非你有理由相信某件事,否则不要说它按照那种方式工作。我们知道XML可以很好地处理属性和节点,问题想要知道的是XML是否有对解析节点或属性的一般偏好。如果我不关心我使用哪个,XML解析器会更喜欢我使用哪个?
从上述内容中可以看出,这篇文章讨论了XML中使用元素和属性的性能问题。问题的出现是因为作者想知道在解析XML时,解析器是否对元素和属性有偏好。为了解决这个问题,作者提供了两个链接,第一个链接是关于XML最佳实践的,提到了使用元素的好处;第二个链接是关于DTD的,提供了元素和属性的比较。
文章中还提到了一个关于元素和属性性能的jQuery Sizzle的调查结果。尽管作者猜测元素的查找速度可能稍快,但并没有给出确切的结论。
总之,根据给出的信息,可以得出结论:在XML中,元素的性能可能略优于属性,但具体的性能差异需要进一步的研究和实验来确定。
XML性能:元素与属性之争
在性能方面,属性会占用较少的空间,这对性能是一个优势。而基于属性的设计在SAX解析中会生成较少的事件,这可以节省一点时间。然而,在绝大多数情况下,元素和属性之间的性能差异根本不重要。
与大多数先验性能担忧一样,最好的做法是先进行构建、测量和调整,前提是你的基本设计是正确的。你的基本设计的正确性不会受到元素与属性的驱动。
你应该尽量使用行业标准的XML模式,并按照它们在元素与属性方面的做法进行设计。如果你是自己从头开始设计,可以参考“XML Element vs XML Attribute”和其他类似的问题的答案。
我对你的说法“基于属性的设计会生成较少的SAX事件”非常好奇。你能帮我理解一下为什么会这样吗?
实现可能会有所不同,但是SAX通常会为每个属性生成0或1个事件,而为每个元素生成2个事件。(属性可以从开始元素事件或通过单独的事件中检索;元素通常有一个开始和一个结束事件。)但是我真的想强调一下,在这个回答中,这种差异几乎从来不重要(而且还依赖于具体实现)。在选择元素和属性之间,有更重要的设计考虑因素,而且在许多其他性能方面,会超过属性和元素之间的任何差异。
因此,SAX解析器会在一个事件(startElement)中记录属性名和属性值,这是第一个相关的事件,也是发送的第一个事件,而自闭合避免了对结束标签的检查。而对于获取innerHTML表示值的元素,需要完成属性解析,然后是子级的startElement来找到键,然后才能获取值,并且之后(在内部)浪费时间处理一个无用的endElement事件,然后是另一个endElement事件。
(注:文中的内容已按照逻辑顺序进行了整理,但并未进行语法或规范上的修改)