我有一份简单的文档,大约 20 页,包含一些数学知识和几张 tikz 图表。我使用 biblatex 和 biber (0.9.9 MacTeX 2011) 来汇编我的参考文献,目前有 2 篇,大概有 10 篇引文。
使用 bibtex 后端时,我的编译参考书目阶段只需不到一秒钟。Biber 处理完全相同的文件却需要 5 秒钟以上。
我使用 TeXShop 和 biber,控制台窗口出现,但至少 4 秒内没有出现任何 biber 的命令行输出。
是我的设置有问题还是 biber 设计得很慢?
编辑:是的,每次都很慢。我深入研究了 biber 解压其 perl 依赖项的文件夹,我认为 TeXShop 每次可能都在解压它。也许每次使用后都会删除解压后的二进制文件。
我让 TeXShop 使用 biber 的方法是将首选项中的 bibTeX 引擎字段更改为“biber”。
答案1
即使考虑到第一次运行解包,它比用 C 编写的 bibtex 慢。请记住,biber 会执行很多也比 bibtex 更强大。它们在功能上几乎无法比较。您的 tikz 和数学对 biber 应该没有影响。如果每次运行时都会删除缓存,这将产生巨大的影响。很容易检查这一点 - 删除缓存并运行。第二个 biber 运行得更快吗?
主要开销是排序。这是一项复杂的业务,处理的远不止 bibtex - Unicode 7.0、每个字段的方向、每个字段的大小写......下一个开销是唯一性处理。同样很复杂。Bibtex 可能只完成了 biber 所做工作的 20%。请参阅 biber PDF 手册以了解其在 biblatex 工作中所占的份额。
从 2.5 版(目前在 DEV 中)开始,我已经使用 NYTProf 进行了一些分析。大部分biber
时间都花在模块内部(用 C 编写),正如人们所预料的那样,因为排序是主要关注点,而进行定制的 UCA 排序(甚至都无法做到)的成本Unicode::Collate
很高。在检查了一些调用堆栈之后,我对排序调用进行了一些循环整理,现在2.5 的速度大约是 2.4 的四倍,可能比所有早期版本都快。bibtex
biber
正如文档中提到的,为了进行性能测试,我使用了一个 2150 个条目、15,000 行的 .bib 文件,该文件引用了一个 630 个条目的宏文件,最终产生了大约 160 页的参考书目。在2.4 中,处理这个文件大约需要 2 分钟。在当前的 2.5 开发版本中,处理这个文件大约需要 28 秒。现在,这与使用不使用 Unicode 排序规则的选项biber
时几乎相同(因此我可能会放弃,因为它的功能远没那么有用,如果没有性能优势,那么它就没有任何意义了)。--fastsort
--fastsort