为什么使用用户定义字体时 fontconfig 这么慢?

为什么使用用户定义字体时 fontconfig 这么慢?

为了使用一些 LaTeX 模板,我将一些字体从 MacBook 复制到了我的 Dell XPS 13(默认安装 Ubuntu 16.04.3 LTS)。我只会偶尔使用这些模板,但我认为将这些字体用于其他应用程序也无妨。

但自从我使用 fontconfig 库的每个应用程序启动都非常慢,大约需要 15 秒。即使是一个简单的应用程序fs-list也要这么长时间。当然,我已经执行了fs-cache -fv几次,甚至生成了fonts.dir文件,fonts.scale但无济于事。

我首先将这些字体放入,~/.fonts然后~/.local/share/fonts在了解到前一个目录已被弃用后放入,最后/usr/local/share/fonts在了解到某些系统在为用户字体生成缓存文件时存在问题后放入,但问题仍然存在。

我可以看到缓存文件,~/.cache/fontconfig并且/var/cache/config具有适当的读取权限。但是当我以管理员权限启动应用程序时也会发生此问题,因此不太可能存在权限问题。

解决这些问题的唯一方法是再次删除字体(即将它们保存在 fontconfig 不知道的目录中)。但这让我怀疑我是否遗漏了什么,因为我认为这不应该是一个问题?

当使用strace在应用程序启动过程中似乎减慢速度的调用时,似乎是这种类型:

stat("/usr/local/share/fonts/Arial Black.ttf", {st_mode=S_IFREG|0644, st_size=122556, ...}) = 0
open("/usr/local/share/fonts/Arial Black.ttf", O_RDONLY) = 4
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
fstat(4, {st_mode=S_IFREG|0644, st_size=122556, ...}) = 0
mmap(NULL, 122556, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7f0ac8cab000
close(4)                                = 0

如您所见,文件不仅被打开,还被加载并映射到内存中,这似乎没有道理,因为预装的字体不会发生这种情况。似乎每个用户字体都会发生这种情况,我有大约 280 种字体,这肯定可以解释速度变慢的原因。

我抄袭的字体大多是.ttf.ttc有一些.otf和 少量.dfont

有人知道我错过了什么吗?

相关内容