XMLParser 或 SimpleXML 哪个更快

Which is much faster, XMLParser or SimpleXML

提问人:PHPWDev 提问时间:4/9/2010 最后编辑:PHPWDev 更新时间:8/8/2013 访问量:9092

问:

伙计们,你怎么看?我目前将 SimpleXML 用于我的整个项目,平均内存使用量为 250KB,每次执行处理时间为 500 微秒。我只是打算切换到 XMLParser,非常感谢您的建议。

编辑:实际微时为 0.000578 微秒。我只是对毫微和微感到困惑,哈哈。

php simplexml xml 解析

评论


答:

16赞 vladr 4/9/2010 #1

至少在理论上,(SAX实现)可能比(DOM实现)更有效(速度方面,但尤其是内存方面),特别是在处理较大的文档时(DOM实现将整个XML树加载到内存中,这可能会对资源造成负担,而SAX实现允许程序员简单地遍历XML,而不必在内存中存储任何内容。 完全由你决定,如果有的话,你想在内存中保留什么) -- 参见比较各种 DOM 和各种 SAX 解析器实现的基准测试XMLParserSimpleXML

我之所以说可以,是因为执行 SAX 遍历在编程上比遍历或查询 DOM 更复杂,并且 SAX 使用不当(或在 DOM 更适合的情况下使用 SAX,例如,如果在 SAX 遍历结束时,您最终将自己几乎整个树加载到内存中)实际上会导致比使用 DOM API 更差的性能

评论

0赞 PHPWDev 4/9/2010
感谢您提供的信息,我将尝试 XML 解析器。
4赞 user187291 4/9/2010 #2

是的,XML Parser(不要与XMLParser混淆)是首选,如果您有内存问题,因为它不需要在使用前预加载和预解析整个文件。与 file_get_contents() 相比,这就像 fgets() 或 fread()

评论

0赞 PHPWDev 4/9/2010
感谢您的输入,但在这里我的场景,需要一次加载一个 500KB 的 XML 文件并将其转换为数组,这是因为 500kb 中的所有内容都是需要提取的重要信息。你觉得怎么样?
4赞 Josh Davis 4/9/2010 #3

在大多数情况下,XML Parser 在开发和执行方面都会慢得多,主要是因为您必须编写/执行大量用户空间 PHP 代码来导航/读取文档。

在某些情况下,您可以使用 XMLReader(不确定 XML 解析器)找到一些改进,但代价是额外的开发时间和更难的维护。由于您的应用程序已经使用了 SimpleXML,并且只使用了 250 KB,因此您的时间很可能会更好地花在应用程序的其他方面。对于使用 SimpleXML 进行某些 XML 处理来说,500 毫秒似乎相当多,您应该对其进行分析和/或在另一个问题中发布您最密集的 CPU 密集型例程以进行优化。

评论

1赞 PHPWDev 4/9/2010
是的,我刚刚在同一台机器中使用 XMLParser 和 SimpleXML 分析了两个脚本。它看起来是一样的,因为对于 XMLParser,我需要重新发明数组映射的轮子。数组会消耗内存。SimpleXML 是数组就绪的,因此也 consumes。尽管 SimpleXML 使用较少的编码,因此执行速度要快得多。我使用了 600KB 的 xml 文件,需要一次加载到内存中。所以似乎 SimpleXML 更好,但是如果我只需要加载 xml 文件的一部分,那么 XMLReader 或 XMLParser 会更好。
0赞 Steven De Groote 6/21/2013
FWIW,我可以补充一点,要解析常规的 RSS 文件(20 个项目),使用 SimpleXML 完成这项工作的速度大约快 7 倍