Высокопроизводительный способ вычисления высоты текста Unicode в div с фиксированной шириной - PullRequest
3 голосов
/ 27 декабря 2011

Я ищу высокоэффективный способ вычисления высоты div фиксированной ширины, содержащей текст Unicode (нет HTML-тегов внутри, только текст!).

Мы попытались скопировать текст вскрытый абсолютно позиционированный элемент div со скопированными стилями CSS и получением clientHeight из него, но производительность этого решения не удовлетворяет нашим потребностям.Тот же подход реализован Ext.util.TextMetrics.Для 5000+ div элементов, использующих этот метод, требуется около 11-12 секунд, что много.

ПРИМЕЧАНИЕ Для нашей задачи нам нужно сделать это для каждого div, хотя дажене все из них будут отображаться изначально.Это потому, что нам нужно заранее знать высоту каждого отдельного div среди этих 5000+ элементов.

Мы попытались создать простой алгоритм переноса слов и вычислить высоту div, определив количество строк изатем умножить его на высоту строки, и это сработало очень хорошо с точки зрения производительности.Для того же количества элементов div в одной и той же конфигурации программного / аппаратного обеспечения это занимает 45 миллисекунд (более чем в 200 раз быстрее) - ширину символов предварительно рассчитывают заранее, используя медленный метод, упомянутый выше.На данный момент мы не приняли во внимание все особенности переноса слов и тот факт, что у нас есть текст Unicode.Мы думаем о том, чтобы сделать этот алгоритм кросс-браузерным и учесть эти особенности.Мы не уверены на 100%, что это возможно в кросс-браузерном режиме.

Итак, есть два вопроса:

  • Есть ли другой способ очень быстро вычислить высоту текста вбраузер?
  • В противном случае, какой алгоритм мы можем использовать для кросс-браузерной переноски слов (при условии, что нам необходимо поддерживать последние версии Chrome, Safari, Firefox и IE 9+)?Что насчет алгоритма переноса слов в Юникоде http://unicode.org/reports/tr14/?
...