加快向PHAR添加文件的速度

时间:2016-08-09 14:15:08

标签: php performance phar

要将文件添加到PHAR存档,请为要添加到PHAR文件的每个文件调用Phar::addFile

但是,在向PHAR添加大量文件时(旁注:“PHAR Archive”或“PHAR”?),PHAR创建速度会急剧下降。我使用以下脚本来测量PHP创建包含存储在“Files”子目录中的100个1兆字节(1 000 000字节)文件的PHAR所花费的时间。

<?php

$pathStat = "pharstat.csv";
$pathPhar = "phar.phar";

if (file_exists($pathPhar)) {
    unlink($pathPhar);
}

$stat = new SplFileObject($pathStat, "w");

$phar = new Phar($pathPhar);
$phar->startBuffering();

$iterator = new DirectoryIterator(__DIR__ . "/Files");

$start = microtime(true);

foreach ($iterator as $file) {
    if ($file->getFilename() != "." && $file->getFilename() != "..") {
        $phar->addFile($file->getPathname(), $file->getFilename());

        echo "Added " . $file->getPathname() . "\r\n";

        $split = microtime(true);
        $stat->fwrite(number_format($split - $start, 6) . "\r\n");
    }
}

$phar->stopBuffering();

?>

每次将文件添加到PHAR时,脚本都会获取分割时间,并将其输出到“pharstat.csv”文件进行分析。

Here is a link to the data I got. Feel free to peer-review my results.

数据证实,向PHAR添加文件的速度越慢,PHAR中已有的文件就越多。此外,数据表明将 n 文件添加到PHAR中的时间增加了 n ²。

我使用Java的ZIP创建实用程序进行了快速实验,似乎PHP PHAR在 n ²行为中是独一无二的。

所以问题是:为什么PHAR这么慢?无论如何要加速它,理想情况下是 n 行为?

0 个答案:

没有答案