การทดสอบรอบที่สอง
รอบที่สองนี้จะเป็นการวัดประสิทธิภาพสำหรับการสร้างเอกสารจำนวนหน้ามากๆ.
เงื่อนไขการวัดประสิทธิภาพ
- ใช้ฟอนต์เดียวกันทั้งหมด ขนาด 12 pt.
- จำนวนหน้าเอกสาร 100 หน้า.
- กำหนดขนาดกระดาษที่ 8×5.5 นิ้ว.
- กำหนดขนาดขอบกระดาษที่ 0.15 นิ้ว.
โค้ดที่ใช้ทดสอบ
{
"require": {
"mpdf/mpdf": "^8.0",
"tecnickcom/tcpdf": "^6.3",
"dompdf/dompdf": "^0.8.3"
}
}
composer.json
<?php
require_once 'vendor/autoload.php';
$htmlcontent = <<< EOD
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
@font-face {
font-family: 'thsarabun';
src: url(fonts/THSarabunNew.ttf) format(\'truetype\');
}
body {
font-family: 'thsarabun';
font-size: 12pt;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 10px;
}
table {
border: 1px solid #999;
border-collapse: collapse;
}
table td,
table th {
border: 1px solid #999;
text-align: left;
}
</style>
</head>
<body>
{body}
</body>
</html>
EOD;
$bodycontent = <<< EOD
<h1>Demo PDF</h1>
<table>
<tbody>
<tr>
<td colspan="3">พันธุวิศวกรรมยูนิโคดไฮไลท์ สุนทรีย์ ลีเมอร์ลีเมอร์ฮองเฮาโปรดักชั่น โดนัท ซอร์สดีพาร์ทเมนท์ ป่าไม้ เหี่ยวย่นลูปสตรอเบอร์รีแคร์บาลานซ์ โน้ตบุ๊คเทเลกราฟภูมิทัศน์พฤหัสเรียลไทม์ ไลบรารี ดราม่าดิจิตอล บัตเตอร์โปสเตอร์อินเตอร์ เก๊ะสคริปต์เอาต์พุท แฟ็กซ์ลินุกซ์รวมมิตร โบว์ไลฟ์โน้ตบุคกระดี๊กระด๊า บร็อคโคลีจีพีเอสนรีแพทย์กูเกิ้ล สป็อตตัวตนฟอรัม โฮมแพลตฟอร์มบาร์บี้ ตรวจทาน ไฮแจ็คไลฟ์เบราว์เซอร์ฟล็อปส์สเตอริโอ เอาต์พุตมหภาคคีย์ทัวริสต์ เทรลเลอร์เทมเพลตแตงโม บล็อกเกอร์แฟ้บแกงค์โฟนเวสต์ ทัวริสต์บุ๋นบ็อกซ์ อัลไซเมอร์มอคค่าภควัมปติ อินเทอร์เฟซแอ็กชั่นกรุ๊ปฟอนต์ ศากยบุตรแตงโม ออยล์อาข่าเอฟเฟ็กต์แฮกเกอร์ อูบันตูเว็บเลเยอร์เซอร์เวอร์ชั่น แอพพลิเคชั่นออฟไลน์ เทมเพลตดาวน์เกรดแอพพลิเคชั่นแท็บอึ้ม แอปเปิลสแกน มิวสิคแฟ้บไนท์ฮาร์ดดิสก์ มิวสิค พะเรอไฟต์โซลูชั่นติวเตอร์เมาท์ ซื่อบื้อแอนิเมชันเฟิร์มเช็กเน็ตเวิร์ค</td>
</tr>
<tr>
<td>ไฮไลท์ ภารตะ</td>
<td rowspan="2">มีเดียเวิร์ดทรานแซกชั่นแฮปปี้</td>
<td>เลกเชอร์พอร์ตเลิฟไวแมกซ์</td>
</tr>
<tr>
<td>สมาพันธ์เป่ายิงฉุบ ดีพาร์ตเมนท์โดมิโน</td>
<td>คอร์แบนด์วิดท์โมไบล์เป่ายิงฉุบ</td>
</tr>
<tr>
<td>Celeste P. Washington</td>
<td>6845 Aliquet. Rd.</td>
<td>France</td>
</tr>
<tr>
<td>Willow F. Duke</td>
<td>1554 Erat St.</td>
<td>Egypt</td>
</tr>
<tr>
<td>Tarik R. Holland</td>
<td>5496 Mi Rd.</td>
<td>Hong Kong</td>
</tr>
</tbody>
</table>
{page}
EOD;
// ต้องมีเว้นวรรคบรรทัดล่างด้วย 1 บรรทัด
template-content-multipages.php
<?php
use Mpdf\Mpdf;
require 'template-content-multipages.php';
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$Mpdf = new Mpdf([
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/fonts',
]),
'fontdata' => $fontData + [
'thsarabun' => [
'R' => 'THSarabunNew.ttf',
]
],
'mode' => 'utf-8',
'format' => [203.2, 139.7],//8.0*5.5 inch
'margin_bottom' => 4,// 0.15 inch
'margin_left' => 4,
'margin_right' => 4,
'margin_top' => 4,
'orientation' => 'P',
'default_font' => 'thsarabun',
'default_font_size' => 12,
]);
for ($i = 1; $i <= 100; $i++) {
$Mpdf->AddPage();
$Mpdf->writeHTML(str_replace('{page}', $i, str_replace('{body}', $bodycontent, $htmlcontent)));
}
$Mpdf->Output(__FILE__ . '.pdf', 'F');
$executionTime = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
echo 'time spent: ' . $executionTime . ' seconds<br>' . PHP_EOL;
echo 'memory usage: ' . memory_get_peak_usage() . ' bytes<br>' . PHP_EOL;
test06-mpdf-multiple.php
<?php
require 'template-content-multipages.php';
$TCPDF = new TCPDF('', 'in', [8, 5.5]);
$fontname = TCPDF_FONTS::addTTFfont(__DIR__ . '/fonts/THSarabunNew.ttf', 'thsarabun', '', 96);
$TCPDF->SetFont($fontname, '', 12);
$TCPDF->setPrintFooter(false);
$TCPDF->setPrintHeader(false);
$TCPDF->SetMargins(0.15, 0.15, 0.15);
$TCPDF->SetAutoPageBreak(true, 0.15);
for ($i = 1; $i <= 100; $i++) {
$TCPDF->AddPage();
$TCPDF->writeHTML(str_replace('{page}', $i, str_replace('{body}', $bodycontent, $htmlcontent)));
}
$TCPDF->Output(__FILE__ . '.pdf', 'F');
$executionTime = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
echo 'time spent: ' . $executionTime . ' seconds<br>' . PHP_EOL;
echo 'memory usage: ' . memory_get_peak_usage() . ' bytes<br>' . PHP_EOL;
test07-tcpdf-multiple.php
<?php
ini_set('memory_limit','64M');
ini_set('max_execution_time', '300');
use Dompdf\Css\Style;
use Dompdf\Css\Stylesheet;
use Dompdf\Dompdf;
require 'template-content-multipages.php';
$Dompdf = new Dompdf();
$Dompdf->setPaper([0, 0, 576, 396]);
$Stylesheet = new Stylesheet($Dompdf);
$Style = new Style($Stylesheet);
$Style->set_margin('10.8pt');
$Stylesheet->add_style('html', $Style);
unset($Style);
$Style = new Style($Stylesheet);
$Style->set_page_break_before('always');
$Stylesheet->add_style('.body-page', $Style);
$Dompdf->setCss($Stylesheet);
$bodyPages = '';
for ($i = 1; $i <= 100; $i++) {
$bodyPages .= '<div' . ($i > 1 ? ' class="body-page"' : '') . '>' . str_replace('{page}', $i, $bodycontent) . '</div>';
}
$Dompdf->loadHtml(str_replace('{body}', $bodyPages, $htmlcontent));
$Dompdf->render();
$pdfContent = $Dompdf->output();
file_put_contents(__FILE__ . '.pdf', $pdfContent);
$executionTime = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
echo 'time spent: ' . $executionTime . ' seconds<br>' . PHP_EOL;
echo 'memory usage: ' . memory_get_peak_usage() . ' bytes<br>' . PHP_EOL;
test08-dompdf-multiple.php
ผลการทดสอบ
ชื่อและประเภทการทดสอบ | ครั้งที่ 1 | ครั้งที่ 2 | ครั้งที่ 3 |
---|---|---|---|
mPDF time | 21.168452978134 | 21.185007095337 | 21.247757911682 |
mPDF memory | 15691296 | 15691440 | 15691440 |
mPDF ขนาดไฟล์ | 277 KB | ||
TCPDF time | 18.786734104156 | 18.544844865799 | 18.829990148544 |
TCPDF memory | 10454648 | 10454648 | 10454504 |
TCPDF ขนาดไฟล์ | 315 KB | ||
Dompdf time | 39.982146978378 | 40.299237966537 | 40.522968053818 |
Dompdf memory | 37230408 | 37230552 | 37230552 |
Dompdf ขนาดไฟล์ | 376 KB |
จากผลการทดสอบรอบที่สอง ด้านความเร็วต้องยกให้ TCPDF, ด้านการใช้หน่วยความจำน้อยที่สุดต้องยกให้ TCPDF, ขนาดไฟล์ที่เล็กที่สุดต้องยกให้ mPDF.