-
Notifications
You must be signed in to change notification settings - Fork 27
Open
Description
What's going on here, that causes such a large performance hit when inserting HTML into a template?
<?php
require "vendor/autoload.php";
// 1-kilobyte string of random characters:
$oneK = random_bytes(1024);
// 1-kilobyte string of HTML:
$html = <<<HTML
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
<tr><td>one </td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td><td>seven</td></tr>
HTML;
$xml = ' <main> @@ </main> ';
$tss = <<<TSS
main {
content: data(html);
content-mode: replace;
format: html;
}
TSS;
$tss2 = <<<TSS2
main {
content: data(html);
content-mode: replace;
}
TSS2;
$data['html'] = str_repeat($html, 4000);
$data2['html'] = str_repeat($oneK, 4000);
test($xml, $tss, $data2, "format html with random string");
test($xml, $tss2, $data2, "no format with random string");
test($xml, $tss, $data, "format html with HTML");
test($xml, $tss2, $data, "no format with HTML");
function test($xml, $tss, $data, $title) {
$template = new Transphporm\Builder($xml, $tss);
$start = microtime(true);
$template->output($data)->body;
$stop = microtime(true);
echo sprintf("%30s time: %12.6f seconds\n", $title, ($stop - $start));
}And the output on my laptop:
format html with random string time: 0.033743 seconds
no format with random string time: 0.002971 seconds
format html with HTML time: 36.562475 seconds
no format with HTML time: 0.123278 seconds
Metadata
Metadata
Assignees
Labels
No labels