В чистом виде функция getSpace используется буквально в одном месте, поэтому там не получить ни заметного влияния, ни стабильного бенчмарка.
Поэтому пришлось модифицировать generateGetSpace и generateGetPixel, которые вызываются много раз.
Константа COLOR_FN
Посмотрел подробнее – оказалось, что практически всегда в функции передается AnyLch. То есть COLOR_FN использовать можно. Я вынес эту проверку в функцию getProxyColor (насколько я знаю, JIT умеет инлайнить такое).
Есть всего одно исключение, где в getSpace может попасть что-то другое:
https://github.com/evilmartians/oklch-picker/blob/16fce6f13ab8fb2c8e148767ae2d33a8ecffdd06/stores/current.ts#L194
Тут промежуточное преобразование может оказаться лишним. Но во-первых, именно может – в некоторых случаях да, в некоторых нет. А во-вторых, там обрабатываются единичные цвета, поэтому на перфоманс не влияет. В остальных случаях rgb-цвета проверяются напрямую функциями inRGB/inP3.
Хотя, если хочется сделать красивее, можно подумать над рефакторингом с уточнением типов.
Вообще, если бы у Culori был прямой переход OKLab->xyz65, можно было бы вообще убрать условие и делать промежуточный цвет xyz65 всегда. Но без прямой конвертации получается хуже.
Перфоманс
Выигрыш есть и он тем заметнее, чем больше включено цветовых режимов.
Если включить всё, у меня по Full paint получается -30...35% в Хромиуме и -20...25% в FF.
Реализация #79.
В чистом виде функция
getSpace
используется буквально в одном месте, поэтому там не получить ни заметного влияния, ни стабильного бенчмарка. Поэтому пришлось модифицироватьgenerateGetSpace
иgenerateGetPixel
, которые вызываются много раз.Константа
COLOR_FN
Посмотрел подробнее – оказалось, что практически всегда в функции передается
AnyLch
. То естьCOLOR_FN
использовать можно. Я вынес эту проверку в функциюgetProxyColor
(насколько я знаю, JIT умеет инлайнить такое).Есть всего одно исключение, где в
getSpace
может попасть что-то другое: https://github.com/evilmartians/oklch-picker/blob/16fce6f13ab8fb2c8e148767ae2d33a8ecffdd06/stores/current.ts#L194 Тут промежуточное преобразование может оказаться лишним. Но во-первых, именно может – в некоторых случаях да, в некоторых нет. А во-вторых, там обрабатываются единичные цвета, поэтому на перфоманс не влияет. В остальных случаях rgb-цвета проверяются напрямую функциямиinRGB
/inP3
.Хотя, если хочется сделать красивее, можно подумать над рефакторингом с уточнением типов.
Вообще, если бы у Culori был прямой переход
OKLab->xyz65
, можно было бы вообще убрать условие и делать промежуточный цветxyz65
всегда. Но без прямой конвертации получается хуже.Перфоманс
Выигрыш есть и он тем заметнее, чем больше включено цветовых режимов. Если включить всё, у меня по
Full paint
получается -30...35% в Хромиуме и -20...25% в FF.