PHP “Native” DOMDocument
Docs及其小姐妹SimpleXMLElement
Docs没有硬编码大小限制,但它们受到您允许 PHP 使用的内存的限制(请参阅PHP memory limit Docs)。
此外,您不能假设加载 100 MB XML 或 HTML 文件会消耗相同大小的内存。它通常比文件大小少得多(例如五分之一或十分之一甚至,取决于XML,所以你不能在这里只说因子X,如果你想获得精确的,你需要衡量你自己的信息)。
您在问题中提供的文件大小 - 3 MB - 我会说相当小。对于 Internet 中的 HTML 文件来说可能并不小,但对于基于libxml的 PHP 扩展来说可能并不小。memory_get_usage()
您可以在使用Docs加载该文件时了解 PHP 中的内存使用情况。
如果您有非常大的 XML 文件——通常是 X(HT)ML——比如说 1.5 GB——用 DOMDocument 进行解析将需要很长时间。然后使用XMLReader
文档将允许您解析文档而不将其加载到内存中(完全)。但这不是灵丹妙药,因为您仍然拥有解析时间,但您可以更好地控制要解析的内容以及要跳过的部分,因此您有更多空间来控制 PHP 用户空间中的优化。
PHP 库PHP Simple HTML DOM Parser Docs也没有施加特定的大小限制。然而,它不是 PHP 的二进制扩展,而是在 PHP 用户空间中。因此,您需要更好地了解该库的确切作用(参见simple_html_dom.php
HEAD 修订版)。如果您查看代码,您会发现它是一个纯粹用 PHP 编写的解析器。这是因为它最初是为 PHP 4 编写的,而DOMDocument
withDOMDocument::loadHTML
尚不存在。
可以想象,PHP 扩展比用 PHP 代码编写的 PHP 库可以更好地管理内存。特别是当涉及到 HTML 文档对象模型的树结构时(这句话本身并不正确,但是开发这种优化的内存需要大量工作和良好的设计,这并不总是易于创建或维护)。
但是:由于多年以来,不再需要使用该库。许多 PHP 用户不知道这一点,他们使用曾经流行的库发现过时的代码示例。库PHP Simple HTML DOM Parser甚至仍然不时在 Stackoverflow 上得到建议。
所以我能给出的最好建议是:除非你不需要编写兼容 PHP 4 的代码,否则不要使用那个库,也不要关心它的限制。而是将您的代码移植到DOMDocument::loadHTML()
Docs。