PHP PDF benchmark (mPDF, TCPDF, Dompdf)

การทดสอบรอบแรก

รอบแรกจะเป็นการวัดประสิทธิภาพแบบที่ง่ายที่สุดและเร็วที่สุด.

เงื่อนไขการวัดประสิทธิภาพ

  • กำหนดค่าต่างๆให้น้อยที่สุดเพื่อดูการแสดงผลตามความต้องการขั้นต่ำ และความเร็วรวมถึงหน่วยความจำที่ใช้.
  • ใช้ฟอนต์เดียวกันทั้งหมด และขนาด 12 pt เหมือนกันทั้งหมด.

โค้ดที่ใช้ทดสอบ

ด้านล่างต่อไปนี้เป็นโค้ดที่ใช้ทดสอบ.

{
    "require": {
        "mpdf/mpdf": "^8.0",
        "tecnickcom/tcpdf": "^6.3",
        "dompdf/dompdf": "^0.8.3"
    }
}

composer.json

<?php


require_once 'vendor/autoload.php';


$htmlcontent = <<< EOD
<p>
พันธุวิศวกรรมยูนิโคดไฮไลท์ สุนทรีย์ ลีเมอร์ลีเมอร์ฮองเฮาโปรดักชั่น โดนัท ซอร์สดีพาร์ทเมนท์ ป่าไม้ เหี่ยวย่นลูปสตรอเบอร์รีแคร์บาลานซ์ โน้ตบุ๊คเทเลกราฟภูมิทัศน์พฤหัสเรียลไทม์ ไลบรารี ดราม่าดิจิตอล บัตเตอร์โปสเตอร์อินเตอร์ เก๊ะสคริปต์เอาต์พุท แฟ็กซ์ลินุกซ์รวมมิตร โบว์ไลฟ์โน้ตบุคกระดี๊กระด๊า บร็อคโคลีจีพีเอสนรีแพทย์กูเกิ้ล สป็อตตัวตนฟอรัม โฮมแพลตฟอร์มบาร์บี้ ตรวจทาน ไฮแจ็คไลฟ์เบราว์เซอร์ฟล็อปส์สเตอริโอ เอาต์พุตมหภาคคีย์ทัวริสต์ เทรลเลอร์เทมเพลตแตงโม บล็อกเกอร์แฟ้บแกงค์โฟนเวสต์ ทัวริสต์บุ๋นบ็อกซ์ อัลไซเมอร์มอคค่าภควัมปติ อินเทอร์เฟซแอ็กชั่นกรุ๊ปฟอนต์ ศากยบุตรแตงโม ออยล์อาข่าเอฟเฟ็กต์แฮกเกอร์ อูบันตูเว็บเลเยอร์เซอร์เวอร์ชั่น แอพพลิเคชั่นออฟไลน์ เทมเพลตดาวน์เกรดแอพพลิเคชั่นแท็บอึ้ม แอปเปิลสแกน มิวสิคแฟ้บไนท์ฮาร์ดดิสก์ มิวสิค พะเรอไฟต์โซลูชั่นติวเตอร์เมาท์ ซื่อบื้อแอนิเมชันเฟิร์มเช็กเน็ตเวิร์ค
</p>
<p>
ไฮไลท์ ภารตะ มีเดียเวิร์ดทรานแซกชั่นแฮปปี้ เลกเชอร์พอร์ตเลิฟไวแมกซ์ สมาพันธ์เป่ายิงฉุบ ดีพาร์ตเมนท์โดมิโน คอร์แบนด์วิดท์โมไบล์เป่ายิงฉุบ มัลติยิวสเตชั่น บรอดแบนด์ไอโฟนเว็บเว็บเวิร์คสเตชั่น ออดิทอเรียม ฟอร์แมต แล็บคอนเซปต์ฟอร์แมตไฮเทค สป็อตเวอร์ชัน ซีนีเพล็กซ์อีโรติกสคริปต์ ซีเนอร์อีเมล แฮปปี้ไดรเวอร์ แชนแนล โดนัทเทคโนแครตกรีน บัฟเฟอร์โปรเซสคณาญาติ เวิร์ก พร็อกซีเห่ย เวิร์คสเตชั่นโน้ตบุค รีเลย์ สโลว์รีดไถไฮบริดวอลล์ บาร์บีคิวสหัสวรรษบราวเซอร์ แพลนไฟต์ เว็บบร็อคโคลีอีเมล์พิกเซล ง่าวเมจิค โปสเตอร์โฟมร็อค เทรลเลอร์อีเมล์แอ็กชั่น แรงผลัก เมเปิลโอเพนดีพาร์ตเมนท์ แช็ตไอคอนแอคทีฟ ซีดี เมนู
</p>
<p>
มีเดียแมคกราฟิก ชัวร์โปรเซสเซอร์ ฟีเจอร์ เบิร์นบราวเซอร์อาร์ติสต์มอนิเตอร์เก๊ะ เรตเซลส์แมนสแกนเที่ยงวัน ทรานแซ็คชัน โปสเตอร์เลเยอร์ง่าว ลินุกซ์แบนเนอร์เซิร์ฟเวอร์ไอพอดเฟิร์ม เน็ตบุคใช้งานเหี่ยวย่นคอมมูนิเคชั่น โซลูชั่นคอร์ แบนด์วิดท์เทมเพลตไมค์ไลเซนส์พาร์ทเนอร์ พารามิเตอร์เลดี้อัพเดตอาว์ สแกนเนอร์บูติค โน้ตบุคโกลบอลซอฟท์แวร์โปรเซส โปรโตคอลสมาร์ทกราฟิคเอาต์พุต เลดี้แล็บอินเทลพอร์ท เซลส์แมนละอ่อนบล็อกเกอร์ แอ็กชั่นแท็บเห่ย มาม่าโบกี้ ร็อคเวอร์ชั่นโน้ตบุ๊ค ยูนิโค้ดพาร์ตเนอร์ซิมโฟนี สล็อตโครนาเวิร์กสเตชั่นเจ๊าะแจ๊ะวีซ่า แอปพลิเคชันไอซีซอฟท์แวร์ กรุ๊ปแบนเนอร์พาเนลโมบาย เวิร์กสเตชั่นเฟิร์มแวร์กิกะไบต์ ไอซีพาเนล วิทย์มาราธอนออดิทอเรียมบัฟเฟอร์เซ็กซ์ แฟร์ซีนีเพล็กซ์ ฟล็อปส์แล็บฟินิกซ์แอปพลิเคชัน เห่ย อันตรกิริยาดอสสแกนสกรีนเซ็นทรัล ฮับ เราเตอร์โอยัวะ ไฟต์ดิจิทัลพะเรอสะบึม ลาติน
</p>
<p>
เวิร์กช็อปอพาร์ตเมนต์โฟน เซฟตี้ รีสอร์ทจีพีเอสไลน์ หมายปองทาวน์เฮาส์เวอร์ชั่นลีนุกซ์ บิลซาร์ดีนดีบั๊กแอสเซมเบลอร์ฟินิกซ์ พอร์ทอันตรกิริยาคีย์บอร์ดออฟไลน์แชมพู ดาวน์เกรดบาบูน รีดไถ ไซเบอร์เทมเพลตอัพเดตฟอยล์ แผดเผาเซ็นทรัลสเปซ โซลูชันโอเพนไบเบิลคอร์ลีเมอร์ แช็ตตัวตน ต่อยอดร็อคทอมแพทยสภาเพนกวิน แก๊สโซฮอล์เอาต์พุต แหม็บเพียวโพรเซสไลบรารียิม ทัวริสต์อัปเดต ไฮบริดทรานแซ็กชัน รีไทร์บัฟเฟอร์ แคร์พอร์ตไบนารีเวิร์ม กราฟิกส์อัลกอริทึมคาปูชิโนยิว มอลล์คีย์บอร์ดซัพพอร์ทแอโรบิค ซีดีรอมโอยัวะโปรโตคอลอัปโหลดนาฏยศาลา คอนโทรล ทัชแพดพาสเวิร์ดแอปพลิเคชันโพรเซสไบต์ อินเทลกัมมันตะแพ็ค เป็นไงไนท์ สะบึมคาปูชิโน อิ่มแปร้ไซเบอร์ ออเดอร์ซาฟารีเวิร์คสเตชั่น เน็ตบุคอพาร์ตเมนต์อัลบั้มอัลบั้ม บลูเบอร์รี่ทิป ซอฟต์แวร์โพรโทคอลเพนตากอนสจ๊วตฮองเฮา เอ็นเตอร์เทน ปัจเจกชนไมโครซอฟท์บุ๋นนาฏยศาลาซอฟท์แวร์ มัลติแคมฟรอกบลูเบอร์รี่
</p>
<p>
เทรลเล่อร์ เน็ตบุคแชมพูโบว์เห่ย อีโรติกคาราโอเกะอีโรติกมาสเตอร์ไอซ์ โมบายเรตลีนุกซ์จัมโบ้เฟิร์ม โมเด็ม วีนดาวน์เกรดพร็อกซีซิมโฟนี พันธกิจ โปสเตอร์เทมเพลตแฟ้บ อุปนายิกาไฟลต์คีย์บอร์ด บั๊ก เหี่ยวย่นออร์แกนิคสปิริตคอมเมนต์ ละตินสไปเดอร์คีย์ แหม็บ รัมแพลน กรรมาชนพล็อต กริดเทรลเล่อร์ โหลด ม้าหินอ่อนเป่ายิงฉุบ เอาท์พุตพิกเซลบิทสคริปต์ไง คอมพิวติ้งสแกนเนอร์แจ็กพอตเบนโตะโบว์ แมค ออฟไลน์ตรวจทานอาว์ดยุกไลฟ์ พาเนลตุ๊ด ชีสโฟมซัพพอร์ต ชิพเอาต์พุตล็อบบี้ละติน เคลื่อนย้ายวิทย์ซีเรียส ทัชแพด โมบายพล็อต แบนด์วิดท์ออฟไลน์อัลไซเมอร์เป่ายิงฉุบ รีวิวต่อยอดโดนัทธุหร่ำซิมโฟนี ธุหร่ำ แรงผลัก ก๊วนโอเพนแฮนด์เฮลด์คอนเซปต์ซันตาคลอส พาสปอร์ต แท็กเที่ยงวันนินจาก๋ากั่น เน็ตเวิร์กพรีเซ็นเตอร์มหภาคโทรจันอิ่มแปร้
</p>
<hr>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Proin sagittis nisl rhoncus mattis. Facilisi nullam vehicula ipsum a arcu cursus. Et malesuada fames ac turpis egestas. Cursus vitae congue mauris rhoncus aenean vel elit scelerisque. Pretium quam vulputate dignissim suspendisse in. Quam vulputate dignissim suspendisse in. Faucibus scelerisque eleifend donec pretium. Est ullamcorper eget nulla facilisi etiam dignissim diam quis enim. Pharetra vel turpis nunc eget lorem dolor sed viverra. Pellentesque massa placerat duis ultricies lacus sed turpis. In hac habitasse platea dictumst vestibulum rhoncus est. Suspendisse potenti nullam ac tortor vitae purus faucibus ornare. Vestibulum sed arcu non odio euismod lacinia at quis. Sapien et ligula ullamcorper malesuada proin libero nunc consequat interdum. Quisque sagittis purus sit amet. Cursus risus at ultrices mi tempus.
</p>
<p>
Lacus viverra vitae congue eu consequat ac felis donec et. Habitant morbi tristique senectus et. Pretium lectus quam id leo in vitae turpis. Nunc mi ipsum faucibus vitae aliquet nec ullamcorper. Nullam vehicula ipsum a arcu cursus. Aenean et tortor at risus. Pretium lectus quam id leo in vitae turpis massa. Lectus nulla at volutpat diam ut venenatis. Amet nisl suscipit adipiscing bibendum. Pellentesque nec nam aliquam sem et tortor consequat id porta. Nisl condimentum id venenatis a condimentum vitae sapien pellentesque. Purus sit amet luctus venenatis. Vel pharetra vel turpis nunc. Blandit libero volutpat sed cras. Consectetur libero id faucibus nisl tincidunt eget nullam non.
</p>
<p>
Nec nam aliquam sem et tortor. Feugiat in ante metus dictum at tempor commodo ullamcorper. Nisl nunc mi ipsum faucibus vitae. Felis eget nunc lobortis mattis. Et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Fames ac turpis egestas maecenas pharetra convallis posuere morbi. Porttitor leo a diam sollicitudin tempor id eu nisl. Faucibus et molestie ac feugiat. Risus at ultrices mi tempus imperdiet. Sem fringilla ut morbi tincidunt augue interdum velit euismod in. Sagittis id consectetur purus ut faucibus pulvinar elementum integer. Eu tincidunt tortor aliquam nulla facilisi cras fermentum.
</p>
<p>
Commodo elit at imperdiet dui accumsan. Blandit aliquam etiam erat velit scelerisque in dictum non consectetur. In hac habitasse platea dictumst quisque sagittis purus. Nec feugiat in fermentum posuere urna nec tincidunt praesent. In hac habitasse platea dictumst vestibulum. Pharetra diam sit amet nisl suscipit. Id cursus metus aliquam eleifend mi in nulla posuere. Platea dictumst quisque sagittis purus sit amet volutpat consequat. Diam in arcu cursus euismod quis viverra nibh cras pulvinar. Ullamcorper sit amet risus nullam eget felis eget. Aliquet porttitor lacus luctus accumsan tortor. Lacinia quis vel eros donec ac. Iaculis urna id volutpat lacus laoreet non. Tortor vitae purus faucibus ornare suspendisse sed nisi lacus sed. Rhoncus aenean vel elit scelerisque mauris pellentesque pulvinar. Ipsum nunc aliquet bibendum enim facilisis. Scelerisque varius morbi enim nunc faucibus a pellentesque sit. Viverra maecenas accumsan lacus vel facilisis volutpat est velit egestas. Maecenas pharetra convallis posuere morbi leo urna molestie at elementum. Ac auctor augue mauris augue neque gravida in.
</p>
<p>
Enim tortor at auctor urna nunc. Id donec ultrices tincidunt arcu. Id volutpat lacus laoreet non. Volutpat commodo sed egestas egestas fringilla phasellus faucibus. Cursus in hac habitasse platea dictumst quisque sagittis purus. Tortor at auctor urna nunc id. Cursus mattis molestie a iaculis at erat pellentesque adipiscing commodo. Sed viverra tellus in hac habitasse platea. Nulla malesuada pellentesque elit eget gravida cum sociis natoque. Purus sit amet volutpat consequat mauris nunc. At urna condimentum mattis pellentesque id nibh tortor. Integer enim neque volutpat ac. Tristique risus nec feugiat in fermentum posuere urna nec tincidunt. Integer eget aliquet nibh praesent tristique magna. In hac habitasse platea dictumst quisque sagittis purus sit. Sit amet dictum sit amet justo donec. Id consectetur purus ut faucibus pulvinar elementum.
</p>
<hr>
<table border="1" style="border: 1px solid #000; border-collapse: collapse; width: 100%;">
    <tr>
        <th>Name</th>
        <th>Address</th>
        <th>Country</th>
    </tr>
    <tr>
        <td>Celeste P. Washington</td>
        <td>6845 Aliquet. Rd.</td>
        <td>France</td>
    </tr>
    <tr>
        <td>Keith B. Best</td>
        <td>Ap #899-9803 Ut, Ave</td>
        <td>Malawi</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>
    <tr>
        <td>Venus X. Armstrong</td>
        <td>852-8456 Nibh Rd.</td>
        <td>Liberia</td>
    </tr>
    <tr>
        <td>Barclay B. Brewer</td>
        <td>P.O. Box 429, 7487 Nec Avenue</td>
        <td>Bermuda</td>
    </tr>
    <tr>
        <td>Felix J. Madden</td>
        <td>322-1536 Eleifend, Av.</td>
        <td>Somalia</td>
    </tr>
    <tr>
        <td>Daryl D. Flynn</td>
        <td>248-8712 Fringilla Rd.</td>
        <td>Slovenia</td>
    </tr>
    <tr>
        <td>Diana C. Wilkinson</td>
        <td>2997 Enim. Street</td>
        <td>Cape Verde</td>
    </tr>
    <tr>
        <td>Conan G. Rivera</td>
        <td>3850 Feugiat. Street</td>
        <td>Bermuda</td>
    </tr>
</table>
EOD;
// ต้องมีเว้นวรรคบรรทัดล่างด้วย 1 บรรทัด

template-content.php

<?php

use Mpdf\Mpdf;

require 'template-content.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',
            'I' => 'THSarabunNew Italic.ttf',
            'B' => 'THSarabunNew Bold.ttf',
        ]
    ],
    'mode' => 'utf-8',
    'default_font' => 'thsarabun',
    'default_font_size' => 12,
]);
$Mpdf->writeHTML($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;

test02-mpdf.php

<?php

require 'template-content.php';


$TCPDF = new TCPDF();
$TCPDF->AddPage();
$TCPDF->SetFont('thsarabun', '', 12);
$TCPDF->writeHTML($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;

test03-tcpdf.php

<?php

use Dompdf\Dompdf;

require 'template-content.php';


$Dompdf = new Dompdf();
$Dompdf->loadHtml('<meta charset="utf-8"><style>@font-face {font-family: \'thsarabun\'; src: url(fonts/THSarabunNew.ttf) format(\'truetype\');}* {font-family: thsarabun; font-size: 12pt;}</style>' . $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;

test04-dompdf.php

ผลการทดสอบ

ชื่อและประเภทการทดสอบ ครั้งที่ 1 ครั้งที่ 2 ครั้งที่ 3
mPDF time 1.0144991874695 0.98334097862244 1.0125930309296
mPDF memory 14765848 14765992 14765992
mPDF ขนาดไฟล์ 223 KB
TCPDF time 1.5029988288879 1.3478870391846 1.4843010902405
TCPDF memory 9031352 9031352 9031352
TCPDF ขนาดไฟล์ 35 KB
Dompdf time 1.2856040000916 1.2740881443024 1.3087019920349
Dompdf memory 6533256 6533400 6533400
Dompdf ขนาดไฟล์ 196 KB

จากผลการทดสอบ ด้านความเร็วต้องยกให้ mPDF, ด้านการใช้หน่วยความจำน้อยที่สุดต้องยกให้ Dompdf, ขนาดไฟล์ที่เล็กที่สุดต้องยกให้ TCPDF.

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

คุณอาจใช้แท็กHTMLและแอททริบิวต์เหล่านี้: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>