| 
<?php
 /*
 * Usage: php html.php [tagName]
 * tagName: id, name or empty string
 *
 */
 $xhrAsy = 'xhr.open("POST", "http://localhost/web-analyzer/html/gen_csv.php", true);';
 
 if(isset($argv[2]) && is_string($argv[2])) {
 if($argv[2] === 'firefox') {
 $xhrAsy = 'xhr.open("POST", "http://localhost/web-analyzer/html/gen_csv.php", false);';
 }
 } else {
 die('missing the arguments two: web browser name (chrome/firefox/edge/phantomjs)');
 }
 
 $base = 2;
 $times = [];
 for($index=0;$index<=16;$index++) {
 $times[] = pow($base, $index);
 }
 
 $fileNames = [
 './measure-chrome-p.csv',
 './measure-chrome-div.csv',
 './measure-chrome-span.csv',
 './measure-chrome-nest-p.csv',
 './measure-chrome-nest-div.csv',
 './measure-chrome-nest-span.csv',
 ];
 
 $htmlList = glob('./*.html');
 foreach($fileNames as $value) {
 @unlink($value);
 $fileInfo = pathinfo($value);
 $tagArr = explode('-', $fileInfo['filename']);
 if(count($tagArr) === 3) {
 $tagName = $tagArr[count($tagArr)-1];
 } else {
 $tagName = $tagArr[count($tagArr)-1].'-'.$tagArr[count($tagArr)-2];
 }
 $str = $tagName.'-0,';
 foreach($times as $val) {
 $str .= $tagName.'-'.$val.',';
 }
 file_put_contents($value, substr($str, 0, -1).PHP_EOL);
 }
 
 foreach($htmlList as $value) {
 if(file_exists($value)) {
 @unlink($value);
 }
 }
 
 $btnStr = '<button onclick="clickBtn()">click</button>';
 $html = '<!DOCTYPE html><html><head>
 <meta http-equiv="cache-control" content="max-age=0" />
 <meta http-equiv="cache-control" content="no-cache" />
 <meta http-equiv="expires" content="0" />
 <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
 <meta http-equiv="pragma" content="no-cache" />
 <meta charset="utf-8" />
 <script>
 document.onreadystatechange = function() {
 if(document.readyState === "complete") {
 var renderTime = performance.timing.domComplete - performance.timing.domLoading;
 console.log(renderTime);
 var xhr = new XMLHttpRequest();
 xhr.onreadystatechange = function() {
 if(this.readyState == 4 && this.status == 200) {
 console.log("The csv file is generated...");
 }
 };
 
 '.$xhrAsy.'
 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 xhr.send("render_time=" + renderTime + "&file_name=#_THEFILENAME_#");
 }
 }
 </script>
 </head><body id="the-body">';
 
 if(isset($argv[1])) {
 if($argv[1] === 'name') {
 $tags = [
 'p' => [
 '<p name="this-name">This is text','</p>'
 ],
 'div' => [
 '<div name="this-name">This is text','</div>'
 ],
 'span' => [
 '<span name="this-name">This is text','</span>'
 ],
 ];
 } else if($argv[1] === 'id') {
 $tags = [
 'p' => [
 '<p #_ID_#>This is text','</p>'
 ],
 'div' => [
 '<div #_ID_#>This is text','</div>'
 ],
 'span' => [
 '<span #_ID_#>This is text','</span>'
 ],
 ];
 } else if($argv[1] === 'none') {
 $tags = [
 'p' => [
 '<p>This is text','</p>'
 ],
 'div' => [
 '<div>This is text','</div>'
 ],
 'span' => [
 '<span>This is text','</span>'
 ],
 ];
 } else {
 die('missing arguments one: please specify the type. The possible value is: id/name/none');
 }
 }
 
 file_put_contents('measure-0.html', str_replace('#_THEFILENAME_#', 'measure-0.csv', $html).'</body></html>');
 foreach($times as $len) {
 $numberLen = $len;
 foreach($tags as $tagKey => $tagArray) {
 $tagNest = '';
 $endTagNest = '';
 $handler = fopen('measure-'.$tagKey.'-'.$len.'.html', 'w+');
 $handlerNest = fopen('measure-'.$tagKey.'-nest'.$len.'.html', 'w+');
 fputs($handler, str_replace('#_THEFILENAME_#', 'measure-'.$tagKey.'-'.$len, $html));
 fputs($handlerNest, str_replace('#_THEFILENAME_#', 'measure-'.$tagKey.'-nest'.$len, $html));
 for($index=0;$index<$numberLen;$index++) {
 if(empty($argv[1]) || $argv[1] !== 'id') {
 $tagNest .= $tagArray[0];
 $tag = $tagArray[0];
 } else {
 $tagNest .= str_replace('#_ID_#', 'tag-'.$index, $tagArray[0]);
 $tag = str_replace('#_ID_#', 'tag-'.$index, $tagArray[0]);
 }
 $endTagNest .= $tagArray[1];
 $endTag = $tagArray[1];
 fputs($handler, $tag.$endTag);
 }
 
 fputs($handler, '</body></html>');
 fputs($handlerNest, $tagNest.$endTagNest.'</body></html>');
 fclose($handler);
 fclose($handlerNest);
 }
 }
 $fileLists = [];
 $fileNames = [
 './measure-div-#_NUMBER_#.html',
 './measure-div-nest#_NUMBER_#.html',
 './measure-p-#_NUMBER_#.html',
 './measure-p-nest#_NUMBER_#.html',
 './measure-span-#_NUMBER_#.html',
 './measure-span-nest#_NUMBER_#.html',
 ];
 $timeRev = array_reverse($times);
 foreach($fileNames as $value) {
 foreach($timeRev as $number) {
 $fileLists[] = str_replace('#_NUMBER_#', (string)$number, $value);
 }
 }
 $fileLists[] = './measure-0.html';
 $fileListStr = '';
 
 foreach($fileLists as $value) {
 $fileListStr .= 'linkList.push("http://localhost/web-analyzer/html/'.$value.'");'.PHP_EOL;
 }
 
 $evalString = '<!DOCTYPE html>
 <html>
 <head>
 <title>evaluate html page</title>
 <meta http-equiv="cache-control" content="max-age=0" />
 <meta http-equiv="cache-control" content="no-cache" />
 <meta http-equiv="expires" content="0" />
 <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
 <meta http-equiv="pragma" content="no-cache" />
 <meta charset="utf-8" />
 <script>
 var linkList = [];
 '.$fileListStr.'
 var index = 0;
 document.onreadystatechange = function () {
 if (document.readyState === "complete") {
 var ifr = document.getElementById("this-iframe");
 ifr.src = linkList[index];
 ifr.onload = function() {
 index += 1;
 if(index === linkList.length) {
 ifr.onload = function() {
 window.frames[0].stop();
 return;
 }
 return;
 }
 ifr.src = linkList[index];
 };
 }
 };
 </script>
 </head>
 <body>
 <iframe id="this-iframe" src=""></iframe>
 </body>
 </html>';
 file_put_contents('./evaluate.html', $evalString);
 
 |