Производительность: как обычно взаимодействуют файлы шрифтов?

Я работаю над ручным анализом глифов из файла шрифта TrueType (.ttf). В зависимости от размера файла они могут варьироваться от сотен до тысяч различных глифов. Эти глифы можно разделить на отдельные диапазоны, такие как латиница, греческий, кириллица и т. Д.

Мне просто интересно, как обычные текстовые приложения, такие как Microsoft Word, обрабатывают такое большое количество глифов? Загружается ли определенный диапазон символов при инициализации, а специальные символы загружаются, когда они требуются? Если да, можно ли ожидать, что данные шрифта будут постоянно храниться в памяти для анализа данных шрифтов, или было бы лучше периодически открывать, передавать и закрывать из исходного файла, когда это необходимо?


person Mapsy    schedule 15.12.2014    source источник


Ответы (1)


Практически все системы загружают глифы по запросу. Практически все они также сохраняют используемые файлы шрифтов в памяти.

В Windows, насколько я понимаю, по крайней мере, с GDI, некое ядро ​​обработки шрифтов фактически реализовано в ядре. Это позволяет разделять использование памяти шрифтов (отображаемый файл, а также кеш результатов растеризации) между процессами. В Linux все реализовано по-разному, так как с современными шрифтами каждый процесс растрирует необходимые глифы с нуля. Однако X-сервер разделяет кеш глифов между процессами, но это деталь реализации.

В любом случае загружайте глифы по запросу. Нет причин не делать это таким образом. Возможно, вы сможете больше помочь, если будете более конкретны в том, чем вы хотите заниматься.

person behdad    schedule 16.12.2014
comment
Большое спасибо за понимание. Полагаю, у меня просто были некоторые оговорки по поводу того, чтобы иметь долгосрочную ссылку на файл. Итак, вы говорите, что большинство систем хранят отображаемый файл в ОЗУ и при необходимости извлекают данные глифов из файла? Я разрабатываю какой-то кроссплатформенный проект, который должен обрабатывать векторные шрифты, поэтому я смотрю на фактические данные глифов, а не на абстракцию высокого уровня. Я хочу поддерживать полный диапазон символов Юникода, но меня беспокоит снижение производительности, связанное с необходимостью получать больше символов во время рендеринга. - person Mapsy; 16.12.2014
comment
В большинстве систем, когда файл отображается, он не обязательно должен храниться в ОЗУ. Он будет загружен по запросу. Большинство систем, поддерживающих полный диапазон Unicode, делают это, лениво загружая любой используемый символ / глиф и кэшируя его. - person behdad; 04.01.2015