TCPDF需要10分钟才能生成40页的pdf文件

时间:2016-04-03 12:00:05

标签: php mysql performance tcpdf

我有一个报告生成PHP程序,以前工作得很好。我在程序中使用了2个第三方库:Google图像图表库(如果我在url中提供值,则返回图像)和tcpdf(用于pdf生成)。我使用mysql而不是mysqli进行查询。页面中有很多查询和循环。

在过去生成报告的时间不到3分钟之前,我正在使用ajax调用生成报告,该报告在文件生成完成后生成完整的消息。这个程序将pdf文件保存在一个文件夹中,我有一个同名的链接来下载文件。

最近,当我检查它没有正确生成时。

错误是TCPDF无法获取图像。这是因为谷歌图表库没有正确返回图像。当我在浏览器中访问图表URL时,它给我的图像没有任何问题,但如果我在一个php文件中的图像src中给它,它没有显示。所以我决定使用file_get_contents,file_put_contents等函数将文件保存在文件夹中,并将其链接到图像src中。这部分现在正常工作我可以看到图像。

但现在问题是,即使在本地环境中,也需要花费大量时间来生成报告。我试图在没有图表打印的情况下生成报告,但即使这样也需要花费时间。在它之间是25分钟,现在接近10分钟生成一个40页的pdf文件。

我真的不知道为什么要花这么多时间。所有这一切都工作正常,现在它不起作用。唯一改变的是谷歌图像图表库,但现在甚至没有(评论该部分和检查)也花费时间。

如何加快速度?有没有办法检查程序的哪个部分很慢。

尝试了xdebug,但其输出文件超过400 mb,webgrind无法处理它。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您的下一步是解决性能问题。

TCPDF是否做了很多你不需要做的工作?大概你已经看过TCPDF作者关于提高性能的技巧,并将它们放入实践。 http://www.tcpdf.org/performances.php

您的某些MySQL查询是否效率低下?使用phpMyAdmin或类似的命令行工具获取与MySQL服务器的交互式连接。当您的pdf创建过程正在运行时,请重复发出此命令

   SHOW FULL PROCESSLIST

它显示一个INFO列,显示每个连接的活动MySQL查询。它还以毫秒为单位显示每个查询已过去time。如果您的查询运行了几百毫秒,您可以考虑使用MySQL EXPLAIN命令用于分析这些查询。通常在MySQL表中添加适当的索引可以大大加快速度。

运行PDF程序的机器是否在RAM上短路?使用* nix top或Windows perfmon等性能监视器来查看。

您的40页报告,简单地说,是一项巨大的工作要创建吗?如果是这样,您可能会考虑切换到比PHP + TCPDF更快的报告生成程序。

答案 1 :(得分:0)

排序。

问题在于数据库,其中一个表中有120000条记录。删除了不相关的记录,而不是永久的解决方案,但现在它在2.1分钟内生成相同的内容。

现在我无法在生产服务器中执行相同的操作。我很想知道如何优化数据库。

谢谢