Большую часть времени обработки в этих обновлениях TLF составляет пересчет и обновление дисплея. Ассоциация определенных форматов с частями вашей текстовой модели намного менее интенсивна. К сожалению, вызов applyLeafFormat () выполняет как операции форматирования, так и операции повторного отображения. Вам нужно разделить эти две части.
Вместо того, чтобы иметь дело только с вашими токенами с точки зрения их абсолютных позиций, вы можете разделить их на отдельные объекты FlowElement (скорее всего, SpanElements), которые можно однозначно идентифицировать с помощью свойства "id". Как только ваши токены находятся в отдельных элементах, становится простым итерировать их множество, изменять характеристики формата и только принудительно обновлять отображение в конце.
for each (var id:String in ids) {
var element:SpanElement = _textFlow.getElementByID(id) as SpanElement;
if (element) {
element.format = getAppropriateFormatForElement(element);
}
}
_textFlow.flowComposer.updateAllControllers();
Кроме того, разделение ваших токенов на элементы также открывает дверь для сохранения вашей классификации токенов в самих элементах, освобождая вас от необходимости поддерживать отдельную структуру отображения классификации.