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

问题描述:

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

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

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

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

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

我真的不知道为什么需要这么多时间。所有这一切都工作得很好,现在它不工作。唯一改变的是谷歌图像图表库,但现在甚至没有(评论那部分和检查)也是它的拍摄时间。

如何加快速度?有什么方法可以检查程序的哪个部分很慢。

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

请帮忙。

+0

尊重,您在这个问题上没有给我们太多的工作。请考虑编辑它以提供更多详细信息。 –

+0

请立即检查。谢谢。 –

排序。

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

现在我不能在我的生产服务器上做同样的事情。我很想获得关于如何优化数据库的意见。

谢谢你

+0

仍然不够用。请提供'SHOW CREATE TABLE'和'SELECT'来收集数据。 –

+1

这很可能通过精心挑选的MySQL索引来解决。您可以添加,更改和删除MySQL索引而不影响服务器中的数据。阅读这个http://use-the-index-luke.com/然后,如果你仍然需要帮助,请提出另一个问题。像Rick说的那样,你需要给我们表现不佳的查询,表格定义和EXPLAIN结果。来自这些查询。 –

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

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

是否有些MySQL查询效率低下?使用phpMyAdmin或类似的命令行工具获取到MySQL服务器的交互式连接。当你的PDF创建过程中运行,反复发出此命令

SHOW FULL PROCESSLIST 

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

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

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

+0

嗨Ollie, 我已经考虑了http://www.tcpdf.org/performances.php中列出的所有要点,但仍然没有运气。 MySQL的一部分,我不得不尝试你的建议,但这些查询之前也有。谢谢 –