ベンチマーク¶
pylopdfは速い結果も遅い結果も同時に公開します。以下は、ひとつの環境と コーパスで得たスナップショットです。普遍的な順位ではなく、自分のワークロードで 何を測るべきか判断する材料として使ってください。
最新の実行
2026-07-26 08:18 UTC · Windows 11 · Python 3.14.6 · AMD64
pylopdf 0.11.0 · pymupdf 1.28.0 · pypdf 6.14.2 · pdfplumber 0.11.10
ウォームアップ1回 + 計測5回。表は中央値(ミリ秒)です。
概要¶
| ワークロード | 最新コーパスで分かったこと |
|---|---|
| 実世界PDF 10件を結合 | pylopdf 36.6 ms、pymupdf 131.8 ms、pypdf 426.3 ms |
| 先頭ページを2倍で描画 | 10ファイルすべてでpylopdfが高速 |
| 12ページを2倍で描画 | render_pages()は317.4 ms(1 worker)から81.5 ms(8 workers)へ短縮し、3.89倍高速化 |
| 全ページのテキスト抽出 | 4ファイルでpylopdf、6ファイルでpymupdfが高速 |
| 抽出精度の代理指標 | 読み順の流儀により類似度0.121〜1.000 |
テキスト抽出¶
全ページ、単位ms。小さいほど高速です。
| ファイル | pylopdf | pymupdf | pypdf | pdfplumber |
|---|---|---|---|---|
| bill-hr815.pdf | 191.6 | 183.2 | 689.7 | 9997.1 |
| bunka-kokugo-series-019-p4.pdf | 1.9 | 0.5 | 1.0 | 1.8 |
| f1040.pdf | 26.7 | 66.9 | 230.3 | 704.7 |
| mhlw-doc.pdf | 18.4 | 11.5 | 114.3 | 263.3 |
| nics-background-checks-2015-11.pdf | 16.1 | 10.8 | 177.5 | 524.7 |
| patent-us223898.pdf | 33.3 | 6.3 | 79.2 | 493.7 |
| pdf20-simple.pdf | 0.3 | 1.2 | 1.7 | 2.4 |
| senate-expenditures.pdf | 6.6 | 7.2 | 132.2 | 374.1 |
| usrguide.pdf | 163.0 | 54.5 | 673.6 | 2050.7 |
| wdl6812-manuscript.pdf | 0.3 | 0.8 | 1.3 | 2.3 |
抽出内容¶
これは正解率ではなく代理指標です。空白を正規化してpymupdfと比較しています。 フォームやOCR層で類似度が低くても、文字数がほぼ同じなら読み順・空白の方針だけが 違う場合があります。
| ファイル | pylopdf文字数 | pymupdf文字数 | 類似度 |
|---|---|---|---|
| bill-hr815.pdf | 300559 | 300559 | 1.000 |
| bunka-kokugo-series-019-p4.pdf | 0 | 0 | 1.000 |
| f1040.pdf | 10156 | 10156 | 0.683 |
| mhlw-doc.pdf | 1264 | 1251 | 0.961 |
| nics-background-checks-2015-11.pdf | 5650 | 5650 | 0.121 |
| patent-us223898.pdf | 11218 | 11218 | 0.320 |
| pdf20-simple.pdf | 11 | 11 | 1.000 |
| senate-expenditures.pdf | 4516 | 4516 | 0.443 |
| usrguide.pdf | 55624 | 55560 | 0.996 |
| wdl6812-manuscript.pdf | 0 | 0 | 1.000 |
結合¶
| タスク | pylopdf | pymupdf | pypdf |
|---|---|---|---|
| コーパス10件をすべて結合 | 36.6 | 131.8 | 426.3 |
レンダリング¶
先頭ページを2倍PNGへ描画。単位ms、小さいほど高速です。
| ファイル | pylopdf | pymupdf |
|---|---|---|
| bill-hr815.pdf | 41.1 | 88.9 |
| bunka-kokugo-series-019-p4.pdf | 48.2 | 110.5 |
| f1040.pdf | 49.5 | 97.1 |
| mhlw-doc.pdf | 35.5 | 71.2 |
| nics-background-checks-2015-11.pdf | 54.2 | 72.6 |
| patent-us223898.pdf | 32.3 | 68.8 |
| pdf20-simple.pdf | 8.0 | 19.9 |
| senate-expenditures.pdf | 55.2 | 56.8 |
| usrguide.pdf | 28.3 | 54.9 |
| wdl6812-manuscript.pdf | 42.9 | 83.3 |
並列レンダリング¶
usrguide.pdfの先頭12ページを2倍PNGへ描画。単位ms、小さいほど高速です。
バッチは入力順を保持し、単一の不変ドキュメントスナップショットを使います。
| Workers | 時間 | 1 worker比 |
|---|---|---|
| 1 | 317.4 | 1.00倍 |
| 2 | 179.6 | 1.77倍 |
| 4 | 99.1 | 3.20倍 |
| 8 | 81.5 | 3.89倍 |
実際の並列度は、指定worker数と推定512 MBの描画作業メモリの両方で制限されます。
free-threadedでの抽出¶
Windows 11のfree-threaded CPython 3.14.6で、独立したbill-hr815.pdf 2部の
全ページテキストを抽出しました。1回warmup後、先行モードを交互にした7組の実行の
中央値です。
| モード | Workers | 時間 | 高速化 |
|---|---|---|---|
| 逐次 | 1 | 400.8 ms | 1.00倍 |
| 並行 | 2 | 235.5 ms | 1.70倍 |
すべての実行で2部の出力は完全に一致し、import後もGILが無効であることを インタープリタから確認しています。
再現する¶
コーパスはtests/assets/real_worldにあり、出典とライセンスも同じ場所へ記録しています。
uv sync --all-extras --group bench
uv run python bench/run.py
uv run python tools/pyodide_compat.py --root . --benchmark-only \
--benchmark-output .tmp/limits-benchmark.json
# Windowsのfree-threaded CPython 3.14インタープリタで:
py -3.14t bench/free_threaded.py
# POSIXで:
python3.14t bench/free_threaded.py
生成元レポートは
bench/results/latest.md
へコミットされています。free-threaded専用の生成レポートは
bench/results/free-threaded-latest.md
へ分離され、bench/run.pyを再実行してもCPython 3.14tの証跡を上書きしません。
native/Pyodideのresource-policy基準値は
bench/results/limits-latest.md
へ分けてコミットされています。2番目のcommandは上限付きopen/extractと制御された拒否を
測定します。CIは同じcaseをPyodide内でも実行し、Wasm linear memoryの増加を
記録します。この時間とmemory値は傾向であり、native/Wasmの性能比較ではありません。
数値を引用するときは、環境とコーパスを併記してください。