我有一个报告生成PHP程序,它以前工作得很好。我在程序中使用了两个第三方库: Google图像图表库(如果我在url中提供值,返回图像)和tcpdf (用于pdf生成)。我使用mysql而不是mysqli进行查询。页面中有很多查询和循环。
在使用不到3分钟的时间生成报告之前,我使用ajax调用来生成报告,一旦文件生成完成,它就会给出一条完整的消息。这个程序保存在一个文件夹中的pdf文件,我有一个相同的名字,以下载文件的链接。
最近当我检查它没有正常生成时。
错误是TCPDF无法获得图像。这是因为google图表库没有正确地返回图像。当我在浏览器中访问图表url时,它给我的图像没有任何问题,但是如果我在php文件中的图像src中给出它,它就不会显示。因此,我决定使用file_get_contents、file_put_contents等函数将文件保存在文件夹中,并将其链接到图像src中。这个部分现在工作正常,我可以看到图像。
但现在的问题是,即使在当地环境中,生成报告也需要很长时间。我试图在没有打印图表的情况下生成报告,但即便如此,也需要时间。在这段时间内,它是25分钟,n全部,现在它的接近10分钟来生成一个40页pdf文件。
我真的不知道为什么要花那么多时间。这一切过去都很好,现在却不起作用。唯一改变的是谷歌图像图表库,但现在,即使没有(评论,这部分和检查),它也需要时间。
,我该如何加快速度?有没有办法检查程序的哪一部分是慢的.
试过了,但是它的输出文件超过了400 mb,而web砂子无法处理它。
请帮帮忙。
发布于 2016-04-03 13:48:50
整理好了。
问题在于数据库,其中一个表中有120000多条记录。删除了不相关的记录,不是永久的解决方案,但现在它在2.1分钟内生成了相同的内容。
现在我不能在我的生产服务器上做同样的事情。我想得到你关于如何优化数据库的输入。
谢谢
发布于 2016-04-03 12:34:05
下一步是对性能进行故障排除。
TCPDF做了很多你不需要做的工作吗?您可能已经看到了TCPDF作者关于提高性能的技巧,并将其付诸实践。http://www.tcpdf.org/performances.php
有些MySQL查询效率低下吗?使用MySQL或类似的命令行工具,获得到您的phpMyAdmin服务器的交互式连接.当您的pdf-创建过程正在运行时,请反复发出此命令。
SHOW FULL PROCESSLIST它显示了一个INFO列,显示每个连接的活动MySQL查询。它还以毫秒为单位显示了每个查询经过的time。如果有运行数百毫秒的查询,可以考虑使用MySQL的EXPLAIN命令来分析这些查询。通常,向MySQL表添加适当的索引可以显着地加快速度。
这台机器在RAM上运行PDF程序短吗?使用*nix top或Windows之类的性能监视器查看一下。
简单地说,你的40页报告是一份巨大的工作吗?如果是这样,您可能会考虑切换到一个比PHP + TCPDF更快的报告生成程序。
https://stackoverflow.com/questions/36385124
复制相似问题