生成带有图像的PDF太慢了

Dav*_*ave 9 php pdf performance cakephp cakephp-2.5

我现在遇到的一大瓶颈是每次有人下订单时生成PDF.对于单个订单来说这不是什么大问题,但是如果在很短的时间内有很多,那么这个过程非常缓慢.

PDF需要文本信息,QR码,条形码,徽标以及1个或更多(最多20+)1/4宽度的图像.

当前流程w/DOMPDF:

  1. QR码图像用PHP创建并保存为png
  2. 条形码图像已创建并保存为png
  3. DomPDF生成PDF

新想法:

  1. HTML2PDF创建PDF,并使用它的qr和条形码标签生成条形码

从理论上讲,这将照顾QR和条形码图像,但是,其余的图像仍然会使它太慢.

这样做,没有(QR和条形码)以外的任何图像,PDF可以在~500ms内生成,但是一旦我开始添加图像,它每次上升到2,3,4,5秒.


当运行测试并处理~10k订单(几分钟内)时,它仍在12小时后处理PDF,直到我沮丧地关闭它.

PDF是在单独的队列过程中生成的,因此该人员在订购时无需等待,但是 - 仍然......在高流量时,他们不能花费5个多小时来接收他们的确认PDF.


问题/ TLDR:

如何使用动态qr代码,动态条形码,动态文本和1-20个静态图像(所有PDF中的图像相同)更快地创建PDF?

还有其他我没想过的潜在事吗?也许制作模板PDF并以某种方式使用PHP来填充动态点?

ban*_*cer 5

我强烈建议您使用 TCPDF 库。它非常快,并且可以很容易地集成到 CakePHP 中。您可以在 TCPDF 示例页面找到很多关于如何将图像、条形码和二维码包含到 PDF 中的示例。

要进一步提高性能,请使用页面的提示:

  • 安装和配置像 XCache 这样的 PHP 操作码缓存器;
  • 编辑 php.ini 文件并增加脚本可能消耗的最大内存量(memory_limit);
  • 编辑php.ini文件,增加每个脚本的最大执行时间(max_execution_time);
  • 编辑config/tcpdf_config.php文件:手动设置$_SERVER['DOCUMENT_ROOT']、K_PATH_MAIN和K_PATH_URL常量,去掉自动计算部分;
  • 如果您不是使用泰语,请编辑 config/tcpdf_config.php 文件并将 K_THAI_TOPCHARS 常量设置为 false;
  • 如果不需要扩展字符,编辑 config/tcpdf_config.php 文件,将默认字体设置为核心字体;
  • 如果不需要 UTF-8 Unicode,请将 TCPDF 构造函数上的 $unicode 参数设置为 false,将 $encoding 参数设置为“ISO-8859-1”或其他字符映射。
  • TCPPDF默认启用字体子集化以减小嵌入的Unicode TTF字体的大小,这个过程非常慢且需要大量内存,可以使用setFontSubsetting(false)方法关闭;
  • 尽可能使用核心字体而不是嵌入字体;
  • 如果不是严格要求,请避免使用 HTML 语法(writeHTML 和 writeHTMLCell 方法);
  • 将大的 HTML 块分割成小块;
  • 如果没有严格要求,避免使用交易;
  • 更改后重新启动网络服务器。

如果这不能将性能提高到可接受的水平,您可以在具有更多可用资源的第二台服务器上安装您的 CakePHP 应用程序(或仅运行生成 PDF 的脚本,如果它不使用 CakePHP),并将该服务器仅用于PDF生成。