3v4l.org

run code in 300+ PHP versions simultaneously
<?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; }

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).

VersionSystem time (s)User time (s)Memory (MiB)
7.3.120.0070.44315.80
7.3.110.0070.48115.99
7.3.100.0030.48215.82
7.3.90.0030.43115.81
7.3.80.0030.42415.96
7.3.70.0070.42215.82
7.3.60.0000.44715.71
7.3.50.0100.43815.73
7.3.40.0070.43615.81
7.3.30.0060.42915.85
7.3.20.0080.41717.71
7.3.10.0080.44817.55
7.3.00.0070.43517.52
7.2.240.0030.44716.09
7.2.230.0030.42516.32
7.2.220.0000.42716.16
7.2.210.0030.42816.00
7.2.200.0070.42316.07
7.2.190.0030.42615.94
7.2.180.0030.42616.10
7.2.170.0070.41816.14
7.2.160.0050.43116.06
7.2.150.0080.42417.90
7.2.140.0130.51117.81
7.2.130.0130.46417.97
7.2.120.0080.42418.00
7.2.110.0080.44817.91
7.2.100.0130.41717.85
7.2.90.0100.41018.12
7.2.80.0100.41417.77
7.2.70.0100.41517.91
7.2.60.0060.45317.89
7.2.50.0130.41717.81
7.2.40.0110.46517.90
7.2.30.0050.42517.85
7.2.20.0070.41617.90
7.2.10.0110.46817.89
7.2.00.0030.42417.82
7.1.330.0070.45416.83
7.1.320.0030.42516.77
7.1.310.0030.42316.74
7.1.300.0070.49116.64
7.1.290.0070.41816.71
7.1.280.0100.41716.79
7.1.270.0080.46516.73
7.1.260.0070.48516.78
7.1.250.0030.42316.81

preferences:
39.49 ms | 400 KiB | 5 Q