【问题标题】:TCPDF takes 10 minutes to generate a 40 page pdf fileTCPDF 需要 10 分钟生成一个 40 页的 pdf 文件
【发布时间】:2016-04-03 12:00:04
【问题描述】:

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

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

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

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

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

我真的不知道为什么要花这么多时间。所有这些以前都工作得很好,现在它不起作用。唯一改变的是谷歌图像图表库,但现在即使没有(评论该部分并检查)这也需要时间。

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

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

请帮忙。

【问题讨论】:

  • 恕我直言,您在这个问题上没有给我们太多帮助。请考虑对其进行编辑以提供更多详细信息。
  • 请立即查看。谢谢。

标签: php mysql performance tcpdf


【解决方案1】:

下一步是对性能进行故障排除。

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

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

   SHOW FULL PROCESSLIST

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

运行您的 PDF 程序的机器内存不足吗?使用性能监视器,如 *nix top 或 Windows perfmon 来查看。

简单地说,你的 40 页报告是一项巨大的工作吗? 如果是这样,你可能会考虑改用比 PHP + TCPDF 更快的报告生成程序。

【讨论】:

  • 嗨 Ollie,我已经考虑了tcpdf.org/performances.php 中列出的所有要点,但仍然没有运气。 MySQL 部分我必须尝试您的建议,但这些查询之前也存在。谢谢
【解决方案2】:

整理好了

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

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

谢谢

【讨论】:

  • 仍然不够用。请提供SHOW CREATE TABLE 和收集数据的SELECT
  • 这很可能可以通过精心挑选的 MySQL 索引来解决。您可以添加、更改和删除 MySQL 索引,而不会影响服务器中的数据。阅读此use-the-index-luke.com,然后,如果您仍需要帮助,请提出另一个问题。就像 Rick 说的那样,您需要向我们提供性能不佳的查询、表定义和 EXPLAIN 结果。来自这些查询。
猜你喜欢
  • 2022-01-02
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多