@ 2019-04-15T09:28:15Z <?php
/**
* This code demonstrates the performance difference when calling
* DOMElement::C14N() on generated DOMDocument versus on a DOMDocument that was
* loaded from a string.
*
* Calling DOMDocument::normalizeDocument() doesn't make any difference.
*
* Output example:
* Testing with 500 items
* Native DOM (not normalized)… 2.55357 seconds
* Native DOM (normalized)… 2.52199 seconds
* Export and re-import DOM… 0.06444 seconds
*/
define('NUMBER_OF_ITEMS', 200);
define('XML_NAME_SPACE', 'http://example.com/xml');
echo sprintf('Testing with %d items', NUMBER_OF_ITEMS) . PHP_EOL;
echo 'Generated DOM… ';
$nativeDOM = generate_random_dom();
$s = microtime(true);
iterate_with_xpath($nativeDOM);
echo number_format(microtime(true) - $s, 5) . ' seconds' . PHP_EOL;
echo 'Generated DOM with normalizeDocument()… ';
$nativeDOMNormalized = generate_random_dom();
$s = microtime(true);
$nativeDOMNormalized->normalizeDocument();
iterate_with_xpath($nativeDOMNormalized);
echo number_format(microtime(true) - $s, 5) . ' seconds' . PHP_EOL;
echo 'Export and re-import DOM… ';
$dom3 = generate_random_dom();
$s = microtime(true);
$importedXmlString = new \DOMDocument('1.0', 'UTF-8');
$importedXmlString->loadXML($dom3->saveXML());
iterate_with_xpath($importedXmlString);
echo number_format(microtime(true) - $s, 5) . ' seconds' . PHP_EOL;
/**
* Iterate over items' content and call C14N
*
* @param \DOMDocument $dom
*/
function iterate_with_xpath(\DOMDocument $dom): void
{
$xpath = new \DOMXPath($dom);
$xpath->registerNamespace('listElement', XML_NAME_SPACE);
/** @var \DOMElement $item */
foreach($xpath->query('//listElement:alpha', null, XML_NAME_SPACE) as $item) {
$item->C14N();
}
}
/**
* Generate random DOMDocument
*
* Example:
* <listElement>
* <listItem index="0">
* <alpha>random value here</alpha>
* </listItem>
* ...
* </listElement>
*
* @return \DOMDocument
*/
function generate_random_dom(): \DOMDocument
{
$dom = new \DOMDocument();
$dom->formatOutput = true;
/** @var \DOMElement $list */
$list = $dom->createElementNS(XML_NAME_SPACE, 'listElement');
$dom->appendChild($list);
for($i = 0; $i < NUMBER_OF_ITEMS; $i++) {
/** @var \DOMElement $listItem */
$listItem = $dom->createElementNS(XML_NAME_SPACE, 'listItem');
$listItem->setAttribute('index', $i);
$list->appendChild($listItem);
$subElement = $dom->createElementNS(XML_NAME_SPACE, 'alpha');
$subElement->appendChild($dom->createTextNode(uniqid('a', true)));
$listItem->appendChild($subElement);
}
return $dom;
}
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 7.3.12 0.007 0.443 15.80 7.3.11 0.007 0.481 15.99 7.3.10 0.003 0.482 15.82 7.3.9 0.003 0.431 15.81 7.3.8 0.003 0.424 15.96 7.3.7 0.007 0.422 15.82 7.3.6 0.000 0.447 15.71 7.3.5 0.010 0.438 15.73 7.3.4 0.007 0.436 15.81 7.3.3 0.006 0.429 15.85 7.3.2 0.008 0.417 17.71 7.3.1 0.008 0.448 17.55 7.3.0 0.007 0.435 17.52 7.2.24 0.003 0.447 16.09 7.2.23 0.003 0.425 16.32 7.2.22 0.000 0.427 16.16 7.2.21 0.003 0.428 16.00 7.2.20 0.007 0.423 16.07 7.2.19 0.003 0.426 15.94 7.2.18 0.003 0.426 16.10 7.2.17 0.007 0.418 16.14 7.2.16 0.005 0.431 16.06 7.2.15 0.008 0.424 17.90 7.2.14 0.013 0.511 17.81 7.2.13 0.013 0.464 17.97 7.2.12 0.008 0.424 18.00 7.2.11 0.008 0.448 17.91 7.2.10 0.013 0.417 17.85 7.2.9 0.010 0.410 18.12 7.2.8 0.010 0.414 17.77 7.2.7 0.010 0.415 17.91 7.2.6 0.006 0.453 17.89 7.2.5 0.013 0.417 17.81 7.2.4 0.011 0.465 17.90 7.2.3 0.005 0.425 17.85 7.2.2 0.007 0.416 17.90 7.2.1 0.011 0.468 17.89 7.2.0 0.003 0.424 17.82 7.1.33 0.007 0.454 16.83 7.1.32 0.003 0.425 16.77 7.1.31 0.003 0.423 16.74 7.1.30 0.007 0.491 16.64 7.1.29 0.007 0.418 16.71 7.1.28 0.010 0.417 16.79 7.1.27 0.008 0.465 16.73 7.1.26 0.007 0.485 16.78 7.1.25 0.003 0.423 16.81
preferences:dark mode live preview
39.49 ms | 400 KiB | 5 Q