Jav*_*let 2 php dompdf twitter-bootstrap
我花了一段时间处理使用 DomPDF 的非常缓慢的 PDF 生成过程。经过大量的摆弄和谷歌搜索,我最终得到了一个解决方案,我想我会发布该解决方案,以防你们中的一些人正在处理同样的问题。
问题:我管理的电子商务网站具有允许卖家下载 PDF 文件的功能,其中包含他们已完成的采购订单(基本上是向买家显示的购买确认的副本)。这一直工作正常。当我部署了一项附加功能以允许卖家下载单个PDF 文件时,问题就开始了,其中包含在用户定义的一组日期之间生成的所有采购订单。当需要导出为单个 PDF(每页一个)的采购订单数量超过 20-30 时,该过程变得非常缓慢(如 30-60 秒)。
从数据库中获取数据并解析它不是问题。构建后来导出到 PDF 的视图也不是问题(即使有数百个订单,将 HTML 输出到屏幕也只需要几分之一秒),所以我基本上确定 dompdf 是问题所在。
设置如下: 1.- MySQL 数据库 2.- 应用服务器:多个负载均衡的 PHP+Nginx+PHP-fpm 实例运行 linux 3.- PHP 7.2 4.- dompdf 0.82(最新的) 5.- Codeigniter 3.0.9 6.- 用于格式化布局的 Bootstrap
目标是允许在可接受的时间内在单个 PDF 中下载多个(可能是数百个)采购订单。
Jav*_*let 10
解决方案:
经过大量的谷歌搜索、试验和错误,在 Stackoverflow 上查找了很多(我发现的文章都没有真正有帮助),我发现是引导程序导致了问题。
我正在使用引导程序进行非常基本的布局管理,我意识到将整个库(甚至是缩小的库)链接到发送到 dompdf 的视图中是多余的,但我不想重新编写视图文件。
因此,我采用了不同的方法:获取我的视图正在使用的特定类(6 个,也许 7 个)的 CSS 定义,并将它们内联到<style>视图的标签中
<style>
.row {
margin-right: -15px;
margin-left: -15px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
}
.col-lg-12 {
width: 100%;
}
.text-center {
text-align: center;
}
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
line-height: 1.42857143;
color: #333;
background-color: #fff;
}
(...) the list goes on a little longer for some other bootstrap styles and other site-specific ones made by yours truly.
</style>
Run Code Online (Sandbox Code Playgroud)
并从视图中完全删除引导程序。
重新测试,结果令人惊讶:一个 100 个采购订单(100 页)PDF(小于 60 kB)在更改之前需要 30-60 秒的时间生成并流式传输给用户,现在生成的时间更少超过半秒,这证实了链接引导程序在 dompdf 上产生了巨大的开销,这在 99% 的用例中可能是不必要的。
希望这可以帮助某人。花了好几天的时间才弄明白这个问题。
| 归档时间: |
|
| 查看次数: |
4695 次 |
| 最近记录: |