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

TCPDF takes 10 minutes to generate a 40 page pdf file

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

以前生成报告只需不到 3 分钟,我使用 ajax 调用来生成报告,一旦文件生成完成,该报告就会给出一条完整的消息。该程序将 pdf 文件保存在一个文件夹中,我有一个同名的 link 来下载该文件。

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

错误是 TCPDF 无法获取图像。这是因为 google 图表库没有正确返回图像。当我在浏览器中访问图表 url 时,它给我的图像没有任何问题,但如果我在 php 文件内的图像 src 中给出它,它就不会显示。因此,我决定使用 file_get_contents、file_put_contents 和 link 等函数将文件保存在图像源中的文件夹中。这部分现在工作正常我可以看到图像。

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

我真的不知道为什么要花这么多时间。所有这一切之前都运行良好,现在却无法正常工作。唯一改变的是 google 图像图表库,但现在即使没有(评论该部分并检查)它也需要时间。

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

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

请帮忙。

下一步是解决性能问题。

TCPDF 是否做了很多您不需要完成的工作? 想必您已经看到 TCPDF 作者关于提高性能的技巧,并将其付诸实践。 http://www.tcpdf.org/performances.php

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

   SHOW FULL PROCESSLIST

它显示一个 INFO 列,显示每个连接的活动 MySQL 查询。它还以毫秒为单位显示每个查询经过的 time。如果您有数百毫秒的 运行 查询,您可以考虑使用 MySQL's EXPLAIN 命令来分析这些查询。通常向 MySQL table 添加适当的索引可以显着加快速度。

机器 运行您的 PDF 程序在 RAM 上是否不足? 使用像 *nix top 或 Windows perfmon 这样的性能监视器看看。

简而言之,您的 40 页报告是一项艰巨的工作吗? 如果是这样,您可能会考虑切换到比 [=41= 更快的报告生成程序] + TCPDF.

整理完毕。

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

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

谢谢