OberonCore https://forum.oberoncore.ru/ |
|
13: Юникод в TextModels https://forum.oberoncore.ru/viewtopic.php?f=131&t=6203 |
Страница 1 из 1 |
Автор: | Trurl [ Воскресенье, 17 Декабрь, 2017 13:34 ] |
Заголовок сообщения: | 13: Юникод в TextModels |
Реализация юникода, действительно, неоптимальная. Русский текст превращается в список слов и пробелов. Понятно, компьютеры сейчас мощные и это незаметно. Но если взять текст побольше, скажем книгу, тормоза начинаешь замечать. А если очень большой (я пробовал словарь Брокгауза-Ефрона), все просто замирает. В принципе, решение, которое предложил Wolfgang Weck, подходит. Но его надо именно встраивать в TextModels, от отдельного модуля пользы не будет. |
Автор: | Иван Денисов [ Воскресенье, 17 Декабрь, 2017 19:18 ] |
Заголовок сообщения: | Re: 13: Юникод в TextModels |
Проводил исследование проблемы. Большая часть времени тратится на вычисление ширины слов. Это было из-за бага, который мы нашли с Олегом Чередниченко. https://redmine.blackboxframework.org/p ... 73062d3201 В сборке Центра это применено уже. issue-#96 Rendering unicode strings https://redmine.blackboxframework.org/issues/96 |
Автор: | Trurl [ Воскресенье, 17 Декабрь, 2017 21:11 ] |
Заголовок сообщения: | Re: 13: Юникод в TextModels |
А Вы попробуйте открыть текст на тыщу страниц. |
Автор: | Иван Денисов [ Воскресенье, 17 Декабрь, 2017 22:11 ] |
Заголовок сообщения: | Re: 13: Юникод в TextModels |
Trurl писал(а): А Вы попробуйте открыть текст на тыщу страниц. Отрицать проблему не буду. Привел выше, как возможно немного улучшить состояние дел. В том виде как идет в 1.6 - неприемлемо в принципе. Ширины слов вычисляются по ширинам букв. Еще для одного проекта сделал буферизацию прокрутки . Это еще существенно улучшило ощущения от прокрутки больших текстов. + ставлю в текстах больше расстояние между строками. Тогда практически никаких артефактов при прокрутке нет. Вот мой модуль HostFonts. Там еще дерево для кэширования применено, которое делал Иван Кузьмицкий. Вложение: Trurl писал(а): В принципе, решение, которое предложил Wolfgang Weck, подходит. Но его надо именно встраивать в TextModels, от отдельного модуля пользы не будет. А что это за решение? Выложите ссылку или исходник, пожалуйста. |
Автор: | Trurl [ Понедельник, 18 Декабрь, 2017 12:18 ] |
Заголовок сообщения: | Re: 13: Юникод в TextModels |
http://oberoncore.ru/blackbox/open_points пункт 13. Вы правильные исправления сделали, но это другая проблема. Тексты представляются списками из фрагментов, хранящихся в файлах. Эта схема придумана, чтобы можно было работать с большими текстами при ограниченной памяти. Перемещение по списку - операция небыстрая, но длины списков были небольшими: при открытии файл отбражался в один фрагмент, а при сохранении все фрагменты опять сливались в один. Потом на фрагменты навесили атрибуты и их стало побольше. А когда добавляли юникод, не придумали ничего лучшего, как ввести дополнительный тип фрагментов для 16-битных символов. Теперь русское слово (в среднем 6 букв) и следующий за ним пробел образуют два фрагмента и занимают в памяти 64 байта. В восточноевропейских языках ситуация не лучше - даже отдельные слова могут разбиваться. Вольфанг предложил добавлять короткие символы к цепочкам длинных. Это снижает шансы сэкономить место на диске, зато сильно уменьшает фрагментацию. Но он сделал это отдельным модулем UTextModels. Теперь, если сохранить UTextModels.StdModel в документе, он не прочитается там, где нет UTextModels. Поэтому, он сохраняет его как стандарный TextModels.StdModel, но при конвертации опять получаем фрагментацию. |
Автор: | Евгений Темиргалеев [ Вторник, 26 Декабрь, 2017 16:47 ] |
Заголовок сообщения: | Re: 13: Юникод в TextModels |
Я мельком сталкивался, когда преобразовывал документацию из 1.5 в 1.6 -- русские литеры переходили в UCS2 и размеры файлов увеличивались. Тогда мне показалось, что хранение юникод и латин-1 отрезков -- это оптимизация. А реально это оказалась реализация на скорую руку, которая реально работает как антиоптимизация... |
Автор: | Trurl [ Воскресенье, 31 Декабрь, 2017 11:54 ] |
Заголовок сообщения: | Re: 13: Юникод в TextModels |
Да, там на скорую руку. Цитата: (u IS LPiece) & ~(u IS Piece) Линейкой бы, да по пальчикам. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |