Ну, я столкнулся с ОГРОМНОЙ разницей в производительности между DomDocument
и SimpleXML
. У меня есть ~ 15 МБ большой XML-файл с примерно 50 000 элементов, таких как:
...
<ITEM>
<Product>some product code</Product>
<Param>123</Param>
<TextValue>few words</TextValue>
</ITEM>
...
Мне нужно только «прочитать» эти значения и сохранить их в массиве PHP. Сначала я попробовал DomDocument
...
$dom = new DOMDocument();
$dom->loadXML( $external_content );
$root = $dom->documentElement;
$xml_param_values = $root->getElementsByTagName('ITEM');
foreach ($xml_param_values as $item) {
$product_code = $item->getElementsByTagName('Product')->item(0)->textContent;
// ... some other operation
}
Этот скрипт умер через 60 секунд с превышением максимального времени выполнения ошибка. Только 15 000 пунктов 50k были проанализированы.
Итак, я переписал код для SimpleXML
версии:
$xml = new SimpleXMLElement($external_content);
foreach($xml->xpath('ITEM') as $item) {
$product_code = (string) $item->Product;
// ... some other operation
}
Через 1 секунду все было сделано.
Я не знаю, как эти функции реализованы внутри PHP, но в моем приложении (и с моей XML-структурой) действительно, ОЧЕНЬ ОГРОМНО разница в производительности между DomDocument
и SimpleXML
.