我有一个报告生成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无法处理它。
请帮忙。
答案 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分钟内生成相同的内容。
现在我无法在生产服务器中执行相同的操作。我很想知道如何优化数据库。
谢谢