Comments 12
История про то, как внутри браузера реализована некая довольно полезная функциональность, но по каким-то причинам до сих пор нет нормального браузерного api к ней, и пришлось дублировать реализацию. Не в первый раз, кажется.
Генерация pdf - вот, где оно нужно
Вау, никогда такого не было и вот опять придумали как не взаимодействовать с dom
А если держать на странице отдельный iframe с минимумом верстки, и измерять текст внутри него - это тоже будет долгий layout рефлоу?
Да, подобное делали в невидимом летающем контейнере. Но рефлоу даже внутри него мелкого тормоза. Странно конечно, что canvas всё равно выигрывает. Возможно потому, что там не "честные" глифы рисуют. Как уже сказали раньше, если был бы API к reflow механизму страницу, то все проблемы бы решились без канвасов
Странно конечно, что canvas всё равно выигрывает. Возможно потому, что там не "честные" глифы рисуют.
canvas вообще не рисует, у него есть метод, который просто измеряет размеры строки в пикселях, но там нельзя например задать ограничение по ширине, то есть никакого выравнивания он не делает. Потому и быстрый.
он перестанет быть долгим даже просто на скрытом абсолюте, он не будет афектить ничего. А канвас выигрывает да, за счет отсутствия самого факта рендера
Есть стойкое ощущение, что эта проблема давным давно решена без вот этого велосипеда. Просто нужно размеры кэшировать, а не всё заново пересчитывать. Текст-то только растёт.
Классаня статья, спасибо за разбор данной библиотеки.
В реальных проектах те же проблемы обычно закрываются батчингом обновлений и снижением частоты reflow
читал, всё время думал, ну canvasRenderingContext2d.measureText на то есть. И да, он самый и есть оказалось)
Pretext — библиотека, которая считает текстовую вёрстку в 500 раз быстрее браузера. Зачем это нужно и как работает