PHP 网站创建文件性能瓶颈


PHP Website creating files performance bottle neck

我有一个用PHP构建的LAMP网站。 我有一个像http://myproject.com/report-download.php这样的页面,上面有一个按钮,上面写着Export CSV . 当用户单击该按钮时,他们会获得一个csv文件,其中包含一些最初在MySQL数据库中的报告数据。 当我只有几条记录时,这很好用。 但是当我有 100 万条记录时,页面需要更长的时间才能抓取数据并创建 csv 文件。 在此CSV创建期间,用户需要很长时间才能从网站上的一个页面转到另一个页面。

当 Web 服务器仍在生成 CSV 时,PHP 开发人员通常如何解决页面加载缓慢的问题? 我可以通过 PHP 线程解决这个问题吗? 还是我应该对阿帕奇做些什么?

加法

I create the csv file kinda like this
while($row = $db->getData($pageNumber))
{
   add_to_file('file.csv.inprogress',array_to_csv($row));
   $pageNumber++;
}
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo file_get_contents('file.csv.inprogress');

但是创建csv文件需要很长时间,因此在此期间,用户的页面加载时间真的很慢。

我会通过运行将文件创建推送到后台

exec('nohup php script_that_creates_csv.php');

脚本完成后添加一个数据库条目,并使用 AJAX 每隔 n 秒检查一次此条目的数据库。这样,您/您的用户很可能不会为执行和创建csv而烦恼。

被调用的脚本应包含用于创建 csv 并将实际状态插入数据库的代码

根据您使用的PHP版本,您可以使用缓存扩展,例如APC,Xcache,OPCache,Eaccelerator或Memcached。它们都有类似的基准和上涨/下跌。

这是关于起伏的快速指南。 * Xcache 易于安装且效果很好,尤其是使用光速服务器时。 * PHP 5.5 不再支持 APC,取而代之的是 OPCache * 当您有多个服务器或负载均衡器时,Memcached 很好。

您也可以使用文件缓存,但它需要大量资源,而不是最快的。

在大多数情况下,Apache不应该有太多关系,但你可以尝试NGINX,看看你有什么改进。在某些情况下,它将速度提高了 10 倍,如果不知道您的 URL 和网站用途的确切含义,很难说。