Hi!

Can you provide some benchmark setups that this could be researched - i.e. describe what was benchmarked and how to reproduce it?
I have already played with this topic. If you don't have an opcode cache
 lazy loading is a good solution: it is worth loading a code only when
it is needed. But if you have opcode cache it is worth to put often used
includes into one big file.

I used the following test code:
<?php

$measurements = array();


$_GET += array("includeFileCardinality" => 9);
$_GET["includeFileCardinality"] =
min(max((int)$_GET["includeFileCardinality"], 1), 9);


$start = microtime(TRUE);
    if ($_GET["includeFileCardinality"] >=1)
include_once("include.test/flash_config.php");
    if ($_GET["includeFileCardinality"] >=2)
include_once("include.test/access.php");
    if ($_GET["includeFileCardinality"] >=3)
include_once("include.test/awe_config.php");
    if ($_GET["includeFileCardinality"] >=4)
include_once("include.test/functions.php");
    if ($_GET["includeFileCardinality"] >=5)
include_once("include.test/domain_constants.php");
    if ($_GET["includeFileCardinality"] >=6)
include_once("include.test/categories.php");
    if ($_GET["includeFileCardinality"] >=7)
include_once("include.test/config.php");
    if ($_GET["includeFileCardinality"] >=8)
include_once("include.test/common.php");
    if ($_GET["includeFileCardinality"] >=9)
include_once("include.test/errorhandler.lib.php");
$measurements["include - tobb kulon fajl"] = microtime(TRUE)-$start;


$start = microtime(TRUE);
    include_once("include.test/_all_in_one.php");
$measurements["include - egy nagy fajl"] = microtime(TRUE)-$start;


if (php_sapi_name() == "cli")
{
    echo serialize($measurements);
}
else
{
    header("Content-Type: text/html; charset=UTF-8");
    displayMeasurments("Eredmények apache modul esetén", $measurements);
    displayMeasurments("Eredmények CLI módban",
unserialize(shell_exec("php ".__FILE__)));
    echo "
        <form>
            Az egyesével include-olt fájlok száma:<br>
            <select name=\"includeFileCardinality\" size=\"5\">
                <option value=\"1\">1</option>
                <option value=\"2\">2</option>
                <option value=\"3\">3</option>
                <option value=\"4\">4</option>
                <option value=\"5\">5</option>
                <option value=\"6\">6</option>
                <option value=\"7\">7</option>
                <option value=\"8\">8</option>
                <option value=\"9\">9</option>
            </select><br>
            <input type=\"submit\" value=\"Teszt\">
        </form>
    ";
}


function displayMeasurments($title, $measurements)
{
    $fastestTime = min($measurements);
    echo "<table border=\"1\">\n<tr><td colspan=\"3\"
align=\"center\"><strong>".$title."</strong></td></tr>\n";
    foreach($measurements as $testMethod => $elapsedTime)
    {
        echo "<tr><td>".$testMethod."</td>\n";
        echo "<td>".$elapsedTime."</td>\n";
        echo
"<td>".round($elapsedTime/$fastestTime*100)."%</td></tr>\n\n";
    }
    echo "</table>\n<br>";
}

?>

The files come from a real life project. I get the following result:
Results (apache module)
include - more files    0.000619888305664       307%
include - one big file  0.000202178955078       100%

I run the test code a lot of time, I get this characteristics always.
Then I tried the code on heavily IO loaded server (x100 req/sec+DB
replica) and the difference was bigger (5-600%).


Best Regards,
Felhő

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to